$СООБЩЕНИЕ не работает. "Обратите внимание: Неопределенный индекс: имя пользователя..." [дубликат]


Возможный Дубликат:
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>

Я очень признателен за любую помощь по моему вопросу, спасибо за чтение.

Author: Community, 2013-01-02

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

 5
Author: Josh Brody, 2013-01-02 01:33:13

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

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

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

 3
Author: marvin, 2014-05-14 17:24:09

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

$username = "";

if(isset($_POST['username'])){
    $username = $_POST['username'];
}

"SELECT password FROM users WHERE username='".$username."'"
 2
Author: silent_coder14, 2013-01-02 01:28:13