$СООБЩЕНИЕ не работает. "Обратите внимание: Неопределенный индекс: имя пользователя..." [дубликат]
Возможный Дубликат:
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>
Проблема в том, что когда я ввожу значения в ОБА поля и нажимаю "Войти", я получаю следующий вывод в другом файле 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>
Я очень признателен за любую помощь по моему вопросу, спасибо за чтение.
3 answers
неопределенный индекс означает, что где-то в массиве $_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."'"