Почему это! Isset не работает? - PullRequest
1 голос
/ 11 апреля 2011

Я новичок в мире PHP и собрал форму, которая умножает введенное значение.Однако, когда я пытаюсь проверить, не указал ли человек какие-либо значения, чтобы вернуть сообщение об ошибке, он отображает сообщение.Мой код ниже.Ценю, если вы могли бы также предложить улучшения.

<?php

$counter = 0;

if(isset($_POST["submit"])) {
    $start = $_POST["start"];
    $end = $_POST["end"];
    $multiply = $_POST["multiplication"];

// if($_POST["start"] == "" && $_POST["end"] == "" && $_POST["multiplication"] == "") {
    // print "Please enter some values";
// }

if(!isset($_POST["start"], $_POST["end"], $_POST["multiplication"])) {
    print "Please enter some values";

}

// for($start;$start<$end;$start++) {
    // $counter = $counter +1;
    // $multiplication = $counter * $multiply;
    // print "$counter <br />";
    // print "$counter multiplied by $multiply = $multiplication <br />";

// }

}

?>
<html>
<head>
    <title>Sample Multiplication</title>
</head>
<body>
    <form name="multiply" method="post" action="multiplication_sample.php">
        <input type="text" name="start" value="<?php if(isset($_POST["start"])) { print $start; }  ?>">
        <input type="text" name="end" value="<?php if(isset($_POST["end"])) { print $end; } ?>">
        <input type="text" name="multiplication" value="<?php if(isset($_POST["multiplication"])) { print $multiply; } ?>">
        <input type="submit" name="submit" value="submit">
    </form>

<?php

if(isset($_POST["submit"])) {

for($start;$start<$end;$start++) {
    $counter = $counter + 1;
    $multiplication = $counter * $multiply;
    print "$counter multiplied by $multiply = $multiplication <br />";
}

}

?>
</body>
</html>

Ответы [ 4 ]

7 голосов
/ 11 апреля 2011

Я думаю, что isset убедится, что переменная не NULL, однако «blank» - это не то же самое, что null. Если вы отправляете форму с пустыми значениями, переменная все еще устанавливается, она просто пуста.

2 голосов
/ 11 апреля 2011

Когда форма отправлена, содержимое полей ввода отправляется на сервер.

Если эти поля ввода пусты, сервер получает пустую строку для каждого ввода - но он что-то получает;поэтому, элементы $_POST["start"], $_POST["end"], $_POST["multiplication"] установлены - даже если они содержат только пустые строки.

Вы можете проверить:

  • Если поля содержат пустую строку: if ($_POST["start"] === '')
  • Или, если содержит только пробелы: if (trim($_POST["start"]) === '')
  • Или, если они empty: if (empty($_POST["start"]))
0 голосов
/ 11 апреля 2011

Надеюсь, я вас правильно понял.Это

if(!isset($_POST["start"], $_POST["end"], $_POST["multiplication"])) {
    print "Please enter some values";
}

, который работает не так, как ожидалось?Кажется, что вы предполагаете, что пустая строка означает, что ничего не установлено, что не соответствует действительности.

$x = "";
isset($x); // true

Используйте empty() или просто $_POST['start'] == '' вместо.

0 голосов
/ 11 апреля 2011

Если поля не определены, ваш код напечатает ваше сообщение в html до появления тега <html>. Большинство браузеров не отображают его или отображают в неожиданном месте.

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

И как уже указывалось, за исключением первого вызова страницы, поля будут иметь пустое значение, но все еще существуют (и поэтому isset вернет TRUE)

...