1

我是 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

4 回答 4

7

我认为这isset将确保变量不是NULL,但是,“空白”与 null 不同。如果您提交一个包含空白值的表单,该变量仍在设置中,它只是空的。

于 2011-04-10T22:07:33.753 回答
2

当表单提交时,输入字段的内容被发送到服务器。

如果这些输入字段为空,则服务器会为每个输入获取一个空字符串——但它会得到一些东西;因此,$_POST["start"], $_POST["end"], $_POST["multiplication"]设置了项目——即使它们只包含空字符串。

你可以检查:

  • 如果字段包含空字符串:if ($_POST["start"] === '')
  • 或者如果 if 仅包含空格:if (trim($_POST["start"]) === '')
  • 或者如果他们是emptyif (empty($_POST["start"]))
于 2011-04-10T22:08:18.373 回答
0

如果未定义字段,您的代码将在<html>标签出现之前在 html 中打印您的消息。大多数浏览器不会显示它或将其显示在意想不到的地方。

您应该将消息显示移动到用户可以看到的 html 中的某个位置。

正如其他人指出的那样,除了第一次调用页面时,字段将具有空值但仍然存在(因此isset将返回TRUE

于 2011-04-10T22:08:25.037 回答
0

我希望,我理解你的权利。这是

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

效果不如预期?看来,您假设一个空字符串意味着什么都没有设置,什么不正确。

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

使用empty()或只是$_POST['start'] == ''代替。

于 2011-04-10T22:09:26.457 回答