почему демонстрационный код в книге выдает ошибки «неопределенный индекс»

0

Я изучаю php. Книга, которую я читаю, это "PHP и mysql web development".

Для кода на стр. 394 он имеет следующие ошибки: Изображение 174551 Не могли бы вы сказать мне, что случилось?

Коды таковы:

<?php
    $name = $_POST['name'];
    $password = $_POST['password'];

    if ((!isset($name)) || (!isset($password)))
    {
?>
<h1>Please log in<h1>
<p> This page is secret.</p>
<form method="post" action="secret.php">
<p>Username: <input type="text" name="name"></p>
<p>Password: <input type="password" name="password"></p>
<p><input type="submit" name="submit" value="Log in"></p>
</form>
<?php
}
else if (($name == "user") && ($password =="pass"))
{
    echo "<h1>Here it is</h1>";
    echo "<p>I bet you are glad you can see this secret page.</p>";
}
else{
    echo "<h1> Go Away</h1>";
    echo "<p>You are not authorized to use this </p>";
}
  • 0
    Немного оффтопа: какие функции mysql используются в этой книге?
  • 1
    Если вы введете данные в поля, а затем отправите форму, вы не увидите ошибку. Также, если это фактический фрагмент из книги, вы должны взять его обратно, так как пример ужасен.
Теги:
forms

3 ответа

1
Лучший ответ

Вы должны проверить значения $_POST, а затем присвоить. Вы делаете обратный.

Должно быть так:

if(isset($_POST['name'], $_POST['password'])) {
    $name = $_POST['name'];
    $password = $_POST['password'];

    // rest of code
}
2

Не могли бы вы рассказать мне, что случилось?

Вы недостаточно внимательны. У вашей книги есть дополнительный символ в начале строк.

@    $name = $_POST['name'];
@    $password = $_POST['password'];

@ - подавление ошибок.

Мое предложение:

Не используйте эту книгу. Это старое и уродливое.

  • 0
    Вау, согласился. Любая книга, которая учит, как подавлять ошибки, является мусором.
  • 0
    Нет. Нет этих символов
Показать ещё 6 комментариев
1

Если вы отправляете на ту же страницу, где находится ваша форма, вы должны сделать следующее:

    $name = isset($_POST['name']) ? $_POST['name'] : "";
    $password = isset($_POST['password']) ? $_POST['password'] : "";

Собственная функция isset проверяет, существует ли переменная.

  • 0
    Переменная в этом контексте является неправильным, скорее вы проверяете наличие определенного ключа в массиве и его нулевое значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню