Я пытаюсь войти в систему, используя этот код:
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. Убедитесь, что ваше действие формы правильно, и вы заполняете имя пользователя.
Кроме того, вы можете захотеть рассмотреть хеширование ваших паролей. Из того, что я вижу здесь, вы сравниваете простые текстовые пароли (или вы уже получаете хэшированные пароли к своему скрипту, что было бы нормально).