【问题标题】:php: best way to validate POSTphp:验证 POST 的最佳方法
【发布时间】:2013-01-28 20:24:17
【问题描述】:

我一直在使用下面的代码通过 $_POST 验证我的用户输入:

if(isset($_POST['name']) && !empty($_POST['name'])) {
    $n=$_POST['name'];
}
else {
    $errors[] = "Please give a name";
}

此代码检查是否实际设置了“名称”,这是显而易见且需要的。 其次,它检查用户是否在文本字段中输入了一些内容以提供名称值。 但是,如果用户将 SPACE " " 作为输入,它会接受它,因为它不是空的,它有 SPACE。

我找到了一种正确的方法:

if(isset($_POST['name'])) {
    $n = trim($_POST['name']);
    if(empty($n)) {
        $errors[] = "Please give a name";
    }
}

else {
$errors[] = "Please give a name";
}

但是这里我重复了两次同样的错误信息,那么如何优化呢?

【问题讨论】:

    标签: php validation post


    【解决方案1】:
    if(isset($_POST['name']) && trim($_POST['name']) !== "") {
        $n=$_POST['name'];
    }
    else {
        $errors[] = "Please give a name";
    }
    

    删除空的,然后进行修剪。

    说实话,除非你打开了通知,否则你甚至不需要 isset:

        if(trim($_POST['name']) !== "") {
    

    【讨论】:

    • 我得到这个:致命错误:不能在写上下文中使用函数返回值。你自己试过吗?
    • 这个不接受0作为有效输入,但我不关心它是否是0左右。它至少应该是一个字符
    • 啊,没想到你也想要那个。我已经更新了答案,以防其他人发现它有用。
    【解决方案2】:

    如果不需要修剪后的字符串,可以将修剪本身移动到 if 子句:

    if(isset($_POST['name']) && (trim($_POST['name']) != '') ) {
        $n=$_POST['name'];
    }
    else {
        $errors[] = "Please give a name";
    }
    

    如果您还需要它,您可以在检查之前修改输入:

    $_POST['name'] = trim( $_POST['name'] );
    if(isset($_POST['name']) && !empty($_POST['name'])) {
        $n=$_POST['name'];
    }
    else {
        $errors[] = "Please give a name";
    }
    

    【讨论】:

    • 谢谢。但我注意到 trim($_POST['name']!='') 不起作用。即使我将它包含在我昨天使用的旧 php 中,它也接受了空间,现在我正在使用最新的 wamp 服务器运行它,它工作正常。
    【解决方案3】:

    这样试试

    if(trim(isset($_POST['name']))) {
        $n = trim($_POST['name']);
    }
    else {
        $errors[] = "Please give a name";
    }
    

    【讨论】:

      【解决方案4】:

      试试

       if(isset($_POST['name'])) {
              $n = trim($_POST['name']);
           }
              if(empty($n) or !isset($_POST['name'])) {
                  $errors[] = "Please give a name";
              }
      

      【讨论】:

        【解决方案5】:

        只需将上面的代码更改为此

         if(trim(isset($_POST['name'])))
        {
        $n = trim($_POST['name']);
        }
        else 
        {
        $errors[] = "Please give a name";
        }
        

        【讨论】:

          【解决方案6】:

          试试这个

          if(isset($_POST['name']) && trim($_POST['name']) != false) {
              $n=$_POST['name'];
          }
          else {
              $errors[] = "Please give a name";
          }
          

          【讨论】:

          • 好吧其实在php 5.5之前空只支持变量。我已经编辑了我的答案。 (来源:php.net/manual/en/function.empty.php
          • 是的,现在很好。但是如果我使用 !="" 而不是 !=false 有什么区别我注意到 !="" 在旧 php 中不起作用
          【解决方案7】:

          最后我开始使用下面的代码。更好,因为在这里我什至可以控制最少的字符数。

          if(isset($_POST['name']) && strlen(trim($_POST['name'])) > 1) {
                  $block->name = trim($_POST['name']);
              }
              else {
                  $errors[] = "Please give a name. It should be at least two characters";
              }
          

          【讨论】:

            猜你喜欢
            • 2016-04-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-18
            • 2019-08-06
            • 2011-06-03
            • 2016-02-03
            • 1970-01-01
            相关资源
            最近更新 更多