【问题标题】:PHP - Weird issue with POST dataPHP - POST 数据的奇怪问题
【发布时间】:2012-02-01 04:06:23
【问题描述】:

我正在编写一个简单的联系表格,下面的代码给我带来了麻烦:

if(!strlen($_POST['lastname']) > 0){
    echo '<p class="message error">Please enter the parent\'s last name.</p>';
}

if(!strlen($_POST['comments']) > 5){
    echo '<p class="message error">Please tell us a little more in the comments field.</p>';
}

相关表单元素:

<textarea name="comments" cols="60" rows="5"><?=(isset($_POST['comments']) ? $_POST['comments'] : '')?></textarea>

当我将两个字段都留空时,只会显示第一条错误消息(以及未显示的其他错误消息),而 cmets 字段的错误消息则不会。

如果我提交少于 5 个字符的 cmets 字段,错误检查甚至会返回错误,但错误消息不会打印。此外,我什至在我提交空白的 cmets 字段的 strlen() 时也回显它并打印出 0。

谁能看出这是什么问题?

【问题讨论】:

  • 为什么不使用 if(strlen($_POST['cmets'])
  • @Kieran Andrews - 因为我今晚要加班 2 小时,所以这就是为什么,呵呵......但是谢谢你。请转发作为答案。
  • 经典案例不喝酒写代码,或者不累不写代码。 :o)

标签: php post


【解决方案1】:

if (!strlen &gt; 0) 首先计算strlen,例如得到10。然后由! 取反为false 然后与&gt; 0 进行比较,即false,因为false 将被转换为00 &gt; 0false。反之,如果字符串为空,则条件为true

你要么想要if (!(strlen &gt; 0)),要么想要if (strlen &lt;= 0)

【讨论】:

    【解决方案2】:

    缺少括号?

    if(!(strlen($_POST['lastname']) > 0)) {
        echo '<p class="message error">Please enter the parent\'s last name.</p>';
    }
    
    if(!(strlen($_POST['comments']) > 5)) {
        echo '<p class="message error">Please tell us a little more in the comments field.</p>';
    }
    

    【讨论】:

    • 与 deceze 捆绑...谢谢!
    【解决方案3】:

    如果您想验证数据是否输入,您也可以使用以下选项

    if(empty($_POST['name'])){
      echo 'Enter Name';
    }
    
    or
    
    if(trim($_POST['name'])==''){
     echo 'Enter Name';
    }
    

    【讨论】:

      【解决方案4】:

      需要明确的是,这里的问题是 !仅适用于 strlen 的返回值,而不适用于整个比较表达式。上面的 if 语句将总是返回 false。

      可以这样重写:

      if (!(strlen($_POST['lastname']) > 0)){ /* display error */ }
      

      这是因为 !否定嵌套在括号中的表达式的结果,而不是 strlen 返回的数字。

      另外,我建议不要在 HTML 源代码中返回未更改的 POSTed 值,那只是自找麻烦...

      【讨论】:

        猜你喜欢
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 2020-07-28
        • 2015-12-20
        • 2012-02-02
        • 2011-12-09
        • 1970-01-01
        相关资源
        最近更新 更多