3

罗宾尼克松书中的代码:

<?php
if (isset($_POST['name'])) $name = $_POST['name'];
else $name = '(enter your name)';
echo <<<_END
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
    Your name is $name<br />
    <form method = 'post' action = 'count.php'>
        What's your name?
        <input type='text' name='name' />
        <input type='submit' />
    </form>
    </body>
</html>
_END
?>

在第二行中,我们检查是否设置了变量isset()。在第三行中,我们有一个条件:如果没有设置,脚本会打印“输入您的姓名”。这就是我不明白的:我打开这个页面 - 它打印:

你的名字(输入你的名字) 你叫什么名字?(和提交表格)

根本没有输入任何内容,然后点击“发送” - 它打印:

你的名字是(并且不打印“输入你的名字”)你叫什么名字?(和提交表格)

我没有输入任何内容,但函数说该变量设置为NULL. 为什么?如果它传递一个空值,那么为什么要使用它?为什么不使用empty?但是在所有程序中,我都看到了这样的解决方案。为什么我们必须在isset()那里使用函数?我不明白什么?

4

5 回答 5

4

isset函数用于检查文本字段<input type='text' name='name' />是否有任何提交的数据,POST这些数据是通过$_POST['name'].

当您提交表单时,$_POST['name']为空白或空字符串。因此,您会看到Your name is What's your name? (and the submission form),对空字符串isset进行评估。true

如果要检查文本字段是否为空,则应使用empty()函数来检查两者isset以及字段是否为空白/空。

  if (!empty($_POST['name'])) $name = $_POST['name'];
  else $name = '(enter your name)';
于 2012-11-19T20:30:59.480 回答
0

这是因为一个空字符串(由浏览器发送到服务器)被认为是一个有效值,导致变量被“设置”,所以isset()为它返回 true。

empty()如果要确保输入了任何内容,则要进行检查。

于 2012-11-19T20:34:39.273 回答
0

将 isset 更改为 !empty。您正在从 post 变量中检索一个空字符串。

if (!empty($_POST['name'])) $name = $_POST['name'];
else $name = '(enter your name)';

或者更简洁:

$name=empty($_POST['name'])?'(enter your name)':$_POST['name'];
于 2012-11-19T20:30:21.300 回答
0

通过向提交按钮添加名称并首先对其进行测试,确保表单已提交。像这样:

<input type='submit' name="submit" />

<?php
if (isset($_POST['submit'])) {
if (isset($_POST['name']))  $name = $_POST['name'];
....
}
?>
于 2012-11-19T20:43:05.020 回答
0

正如其他人所说,empty()可以工作,但你的问题是为什么 isset 而不是空的。

对于评估为 FALSE 的任何内容,Empty 将返回 TRUE,例如 0、0.0、“0”,因此可能会导致意想不到的后果。

为了完整起见,您可能应该先检查它是否已设置,然后检查它是否为空,并进行相应处理。

我认为很多 PHP 程序员也养成了使用 isset() 来检查键是否存在于数组中的习惯,因此使用 isset 是很自然的。

你会注意到在那章的另一个例子中,尼克松有特殊情况来处理空字符串。

于 2012-11-19T20:42:02.700 回答