PHP-POST数据的奇怪问题

PHP-POST数据的奇怪问题,php,post,Php,Post,我正在编写一个简单的联系表单,下面的代码给我带来了麻烦: 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

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

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>';
}
if(!strlen($\u POST['lastname'])>0){
echo'

请输入家长的姓氏。

; } 如果(!strlen($_POST['comments'])>5){ echo“

请在评论字段中告诉我们更多信息。

”; }
相关形式要素:

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

当我将这两个字段留空时,仅显示第一条错误消息(以及未显示的其他错误消息),而注释字段的错误消息则不显示

如果我提交的注释字段少于5个字符(应该是这样),错误检查甚至会返回一个错误,但错误消息不会打印出来。此外,当我提交时,我甚至回显了comments字段的strlen(),该字段为空,并打印出0

任何人都能看到这里的问题是什么吗?

如果(!strlen>0)
首先计算
strlen
,它会给出10。这将被
否定
错误
。然后将其与
>0
进行比较,后者为
false
,因为
false
将被强制转换为
0
0
false
。反过来说,如果字符串实际上为空,则条件将为
true

您想要
if(!(strlen>0))
或者
if(strlen缺少括号

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>';
}
if(!(strlen($\u POST['lastname]]>0)){
echo'

请输入家长的姓氏。

; } 如果(!(strlen($_POST['comments'])>5)){ echo“

请在评论字段中告诉我们更多信息。

”; }
如果要验证数据是否输入,也可以使用以下选项

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

or

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

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

它可以这样重写来工作:

if (!(strlen($_POST['lastname']) > 0)){ /* display error */ }
这是因为!对嵌套在括号中的表达式的结果求反,而不是对strlen返回的数字求反


另外,我建议不要在HTML源代码中原封不动地返回发布值,这只是自找麻烦……

为什么不使用if(strlen($\u POST['comments'))<6){-读起来更好。@Kieran Andrews-因为我今晚加班2个小时,这就是为什么,呵呵…但谢谢你。请转载作为答案。经典案例:不喝酒和编码,或不累和编码。:o)与deceze并列…谢谢!