$ _POST не работает. "Примечание: Неопределенный индекс: имя пользователя …"

Возможный дубликат:
PHP: «Примечание: неопределенная переменная» и «Примечание: неопределенный индекс»

Итак, я в настоящее время изучаю PHP и читаю книгу о функции md5 для паролей, поэтому решил попробовать и посмотреть, как это происходит. Я также решил использовать метод POST, а не GET, так как видел людей, которые говорят, что они безопаснее и не позволяют переменным отображаться в URL-адресе.

Для моего проекта тестирования я сделал очень простую форму:

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <form action="dologin" method="POST"> <table border="0"> <tbody> <tr> <td>Username:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="password"></td> </tr> </tbody> </table> <input type="submit" value="Login"> </form> </body> </html> 

Проблема в том, что когда я ввожу значения в поля BOTH и нажимаю «Login», я получаю следующий вывод в другом файле PHP.

 Notice: Undefined index: username in C:\xampp\htdocs\md5\home\dologin\index.php on line 11 Username non existent 

Здесь следует код для файла «/dologin/index.php»

 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php mysql_connect("localhost", "root") or die(mysql_error()); mysql_select_db("test") or die(mysql_error()); $query = "SELECT password FROM users WHERE username='".$_POST['username']."'"; $result = mysql_query($query); $row = mysql_num_rows($result); if(isset($row)){ $password = (mysql_result($result,$row - 1)); $enteredpassword = md5("w@#$@#".$_GET['password']."^#3f%#^"); if($password == $enteredpassword){ if(!isset($_COOKIE['PHPSESSID'])){ session_start(); } $_SERVER['LOGIN_STATUS'] = true; } else { die("Access denied"); } } else { die("Username non existent"); } ?> </body> </html> 

Любая помощь вообще по моей проблеме очень ценится, спасибо за чтение.

undefined index означает, что где-то в массиве $ _POST нет индекса (ключа) для имени пользователя ключа.

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

Если бы у меня была подобная ошибка, я бы сделал что-то вроде этого:

 $username = $_POST['username']; // you should really do some more logic to see if it's set first echo $username; 

Если бы имя пользователя не появилось, это означало бы, что я где-то прищурился. Вы также можете,

 var_dump($_POST); 

Чтобы узнать, что вы публикуете. var_dump действительно полезен для отладки. Проверьте это: var_dump

прежде всего,

убедитесь, что есть сообщение

 if(isset($_POST['username'])) { // check if the username has been set } 

вторых, и, самое главное, дезинформировать данные, что означает, что

 $query = "SELECT password FROM users WHERE username='".$_POST['username']."'"; 

смертельно опасно, вместо этого используйте

 $query = "SELECT password FROM users WHERE username='".mysql_real_escape_string($_POST['username'])."'"; 

и, пожалуйста, изучите тему SQL-инъекции

Вы должны проверить, определено ли POST['username'] . Используйте это выше:

 $username = ""; if(isset($_POST['username'])){ $username = $_POST['username']; } "SELECT password FROM users WHERE username='".$username."'"