Query di accesso PHP e MySQL

Sto imparando MySQL e PHP e attualmente sto avendo problemi con questo process di accesso.

Sembra che la query MySQL non restituisca alcuna row e non mi reindirizzamento dopo un accesso riuscito.

PHP:

$error_msg = ""; //checks the session to see if the user is logged in if (!isset($_SESSION['userid'])) { if (!isset($_POST['submit'])) { $dbc = mysqli_connect('localhost', 'root', '', 'login') or die('Error Connecting to Database on the SQL Server'); //grabs data from POST $user_username = $_POST['username']; $user_password = $_POST['password']; //lookup username and password in the database if (!empty($user_username) && !empty($password)) { $query = "SELECT userid, username FROM tuser WHERE username = '$user_username' AND password = SHA('$user_password')"; $res = mysqli_query($dbc, $query); //login is ok so set the user ID and username cookies, redirect to homepage if (mysqli_num_rows($res) == 1) { $row = mysqli_fetch_arrays($res); $_SESSION['userid'] = $row['userid']; $_SESSION['username'] = $row['username']; setcookie('userid', $row['userid'], time() + (60 * 60 * 24 * 30), "/"); setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30), "/"); setcookie('email', $row['email'], time() + (60 * 60 * 24 * 30), "/"); setcookie('password', $row['password'], time() + (60 * 60 * 24 * 30), "/"); //redirect after successful login header("Location: index.php"); } else { //the username and password are incorrect so set error message $error_msg = 'Sorry, you must enter a valid username and password to log in. <a href="Signup.php">Please sign up!</a>'; } } } } 

HTML:

 <form action="login_process.php" method="post" class="login"> Username: <input type="text" name="username"/> Password: <input type="password" name="password"/> <input type="submit" value="submit"/> </form> 

Scusa per il codice sciatto, ho familiarità con PHP e MySQL e mi insegna come farlo. Ho apportto alcune modifiche e il codice invia, ma non mi reindirizza, va solo a login_process.php e non fa nulla. Cosa mi manca? Apprezzo tutto l'aiuto, grazie a tutti!

  <? session_start(); $error_msg = ""; //checks the session to see if the user is logged in if (!isset($_SESSION['user_id'])) { if (isset($_POST['submit'])) { $user_username = mysql_real_escape_string($_POST['username']); $user_password = mysql_real_escape_string($_POST['password']); $dbc = mysqli_connect('localhost', 'root', '', 'login') or die('Error Connecting to Database on the SQL Server'); //grabs data from POST //lookup username and password in the database if (!empty($user_username) && !empty($password)) { $query = "SELECT userid, username FROM tuser WHERE username = '$user_username' AND password = SHA('$user_password')"; $res = mysqli_query($dbc, $query); //login is ok so set the user ID and username cookies, redirect to homepage if (mysqli_num_rows($res) == 1) { $row = mysqli_fetch_arrays($res); $_SESSION['user_id'] = $row['userid']; $_SESSION['user'] = $row['username']; setcookie('userid', $row['userid'], time() + (60 * 60 * 24 * 30), "/"); setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30), "/"); setcookie('email', $row['email'], time() + (60 * 60 * 24 * 30), "/"); setcookie('password', $row['password'], time() + (60 * 60 * 24 * 30), "/"); //redirect after successful login header("Location: home.php"); echo mysqli_error($dbc); } else { //the username and password are incorrect so set error message $error_msg = 'Sorry, you must enter a valid username and password to log in. <a href="Signup.php">Please sign up!</a>'; header("Location: home.php"); echo mysqli_error($dbc); } } else { $error_msg = 'Please enter a username and password to log in. <a href="Signup.php">Please sign up!</a>'; header("Location: home.php"); echo mysqli_error($dbc); } } } ?> 

Non sono sicuro che sia tutto il codice ma devi session_start() prima di poter accedere a $_SESSION

Il tuo codice richiede solo le domande a less che un post non sia impostato, quindi cambialo:

 if (isset($_POST['submit'])) { //your code } 

Inoltre, assicurarsi di evitare l'input dell'utente per impedire l'iniezione sql:

 $user_username = mysql_real_escape_string($_POST['username']); 

Assicurati che non sia un errore nel tuo SQL:

 echo mysqli_error($dbc); 

Non stai eseguendo nulla a causa di questa linea:

 if (!isset($_POST['submit'])) { 

Dovrebbe essere cambiato in

 if (isset($_POST['submit'])) { 

isset () restituirà TRUE se la variabile è impostata. ! isset () restituirà TRUE se non è impostato

Vedo due problemi:

Il tuo boolean è indietro sulla linea (cioè rimuovi il segno!)

 if (!isset($_POST['submit'])) { 

Il secondo problema è che il button di input manca di un attributo name = "submit", quindi non viene mai passato, quindi la variabile non sarà mai presente indipendentemente dal primo problema.

Grazie a tutti, ha funzionato.

 <? //Start session session_start(); $_SESSION['message'] = ""; //Include database connection details require_once('global.php'); //Connect to mysql server $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if(!$link) { die('Failed to connect to server: ' . mysql_error()); } //Select database $db = mysql_select_db(DB_DATABASE); if(!$db) { die("Unable to select database"); } if(!empty($login) && !empty($password)) { $login = mysql_real_escape_string($_POST['login']); $password = mysql_real_escape_string($_POST['password']); $query = "SELECT * FROM tuser WHERE username = '$login' AND password = SHA('$password')"; $data = mysql_query($query); if($data) { if (mysql_num_rows($data) == 1 ) { $row = mysql_fetch_assoc($data); $_SESSION['userid'] = $row['userid']; $_SESSION['username'] = $row['username']; $_SESSION['message'] = "Welcome,&nbsp;" . $_SESSION['username']; header('Location: member.php'); exit(); } else { $_SESSION['message'] = "Please enter a valid username or password"; header('Location: error.php'); exit(); } } else { die("Query failed"); } } else { $_SESSION['message'] = "Please enter a username or password"; header('Location: error.php'); exit(); } ?>