Ошибка входа в систему PHP для входа в систему undefined index

Я пытаюсь войти в систему, используя этот код:

session_start(); require "connect.php"; $username = $_POST['username']; $password = $_POST['password']; if($username&&$password) { $query = mysql_query("SELECT * FROM users WHERE username='$username'"); $numrow = mysql_num_rows($query); if($numrow!=0) { while($row = mysql_fetch_assoc($query)) { $db_username = $row['username']; $db_password = $row['password']; } if($username==$db_username&&$password==$db_password) { //echo 1; header("Location: members.php"); $_SESSION['username']=$db_username; } else echo 0; } else die("That user doesn't exist"); } else die("Please enter a username and password"); 

при успешном входе в систему он должен забрать меня на members.php:

  session_start(); if($_SESSION['username']) <------ this is line 5 { echo "20730312"; echo " You are logged in as: ".$_SESSION['username']; echo "<p><a href='logout.php'>Click here to logout</a>"; } 

но когда я запрашиваю member.php в моем приложении, он дает мне:

 Notice: Undefined index: username in E:\Program Files\xampp\htdocs\adddrop\members.php on line 5 

обратите внимание, что я использую веб-представление android для запроса members.php после успешного входа в систему, не так ли? Что я делаю не так ?

На стороне примечание: у вас там есть SQL-инъекция. Можете прочитать больше: http://en.wikipedia.org/wiki/SQL_injection

Проблема, с которой вы сталкиваетесь, заключается в том, что имя пользователя не всегда POST'd (когда вы просто загружаете страницу в первый раз):

 $username = isset($_POST['username']) ? $_POST['username'] : null; $password = isset($_POST['password']) ? $_POST['password'] : null; 

Это должно исправить это. В основном, я проверяю, установлен ли индекс POST, и только если я пытаюсь получить к нему доступ, иначе я установил его null .

Кроме того, вы можете сделать это следующим образом:

 $query = mysql_query("SELECT * FROM users WHERE username='" . mysql_real_escape_string($username) . "'"); 

Это предотвращает уязвимость SQL-инъекции.

А также добавьте exit; :

 header("Location: members.php"); $_SESSION['username']=$db_username; exit; // Add this. 

Как всегда. Вы не отправляете URL-адрес. Проверьте URL, к которому вы пытаетесь выполнить POST.

возможно, это:

 header("Location: members.php"); $_SESSION['username']=$db_username; 

следует изменить на (обратное):

 $_SESSION['username']=$db_username; header("Location: members.php"); 

Как говорится, у вас нет данных из POST. Убедитесь, что ваше действие формы правильно, и вы заполняете имя пользователя.

Кроме того, вы можете захотеть рассмотреть хеширование ваших паролей. Из того, что я вижу здесь, вы сравниваете простые текстовые пароли (или вы уже получаете хэшированные пароли к своему скрипту, что было бы нормально).