使用isset()函数进行PHP表单验证

时间:2012-11-19 20:27:58

标签: php

罗宾尼克松的代码书:

<?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()函数?我不懂什么?

5 个答案:

答案 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()可以正常运作,但你的问题是为什么不是空的。

对于评估为FALSE的任何内容,

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'];
....
}
?>