【问题标题】:PHP Form Validation with isset() function使用 isset() 函数进行 PHP 表单验证
【发布时间】:2012-11-07 20:06:37
【问题描述】:

罗宾尼克松书中的代码:

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

【问题讨论】:

  • var_dump($_POST['name']) 会告诉你这是一个string(0)(空/零长度字符串)。来自 _GET/_POST 的所有值都是字符串,无论其实际内容如何。

标签: php


【解决方案1】:

isset 函数用于检查文本字段&lt;input type='text' name='name' /&gt; 是否有任何通过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)';

【讨论】:

    【解决方案2】:

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

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

    或者更简洁:

    $name=empty($_POST['name'])?'(enter your name)':$_POST['name'];
    

    【讨论】:

      【解决方案3】:

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

      如果您想确保输入了任何内容,则改为检查 empty()

      【讨论】:

        【解决方案4】:

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

        <input type='submit' name="submit" />
        
        <?php
        if (isset($_POST['submit'])) {
        if (isset($_POST['name']))  $name = $_POST['name'];
        ....
        }
        ?>
        

        【讨论】:

        • if ($_SERVER["REQUEST_METHOD"] == 'POST') 比检查字段的存在/不存在更好。
        【解决方案5】:

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

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

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

        我想很多 PHP 程序员也养成了using isset() to check if the key exists in an array 的习惯,所以自然而然地使用 isset。

        您会注意到,在another example in that chapter 中,尼克松有处理空字符串的特殊情况。

        【讨论】:

        • empty 并非在所有情况下都有效。输入0 或单个空格将被视为“空”,但很容易出错。
        • @MarcB Ack,当您注意到这一点时不小心按了“Enter”(因此是尾随的 q)。我想稍微解释一下 isset 和 empty 之间的区别,以及解释为什么很多人养成使用 isset 的习惯
        猜你喜欢
        • 1970-01-01
        • 2020-01-15
        • 1970-01-01
        • 2014-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-01
        相关资源
        最近更新 更多