罗宾尼克松的代码书:
<?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()
函数?我不懂什么?
答案 0 :(得分:3)
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)';
答案 1 :(得分:0)
更改isset to!empty。您正在从post变量中检索空字符串。
if (!empty($_POST['name'])) $name = $_POST['name'];
else $name = '(enter your name)';
或者更简洁:
$name=empty($_POST['name'])?'(enter your name)':$_POST['name'];
答案 2 :(得分:0)
这是因为一个空字符串(由浏览器发送到服务器)被认为是一个有效的值,导致变量被“设置”,所以isset()
为它返回true。
如果您想确保输入任何内容,则需要检查empty()
。
答案 3 :(得分:0)
正如其他人所说,empty()
可以正常运作,但你的问题是为什么不是空的。
Empty将返回TRUE,例如0,0.0,“0”,因此可能会导致意外后果。
为了完整性,你应该首先检查它是否已经设置,然后检查它是否为空,并相应地处理。
我认为很多PHP程序员都习惯using isset() to check if the key exists in an array,所以使用isset很自然。
你会注意到在another example in that chapter中,Nixon有特殊情况来处理空字符串。
答案 4 :(得分:0)
通过在提交按钮中添加名称并首先对其进行测试,确保已提交表单。像这样:
<input type='submit' name="submit" />
<?php
if (isset($_POST['submit'])) {
if (isset($_POST['name'])) $name = $_POST['name'];
....
}
?>