PHP - POST数据的奇怪问题

时间:2012-02-01 04:06:24

标签: 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 tell us a little more in the comments field.</p>';
}

相关表格元素:

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

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

如果我提交少于5个字符的注释字段,错误检查甚至会返回错误,但错误消息不会打印。另外,当我提交空白并打印出0时,我甚至回应了注释字段的strlen()。

有谁能看到这里的问题是什么?

4 个答案:

答案 0 :(得分:5)

if (!strlen > 0)首先评估strlen,然后给出10,然后由!false取消。 然后将此> 0进行比较,false,因为false将投放到00 > 0false 1}}。反过来说,如果字符串实际为空,则条件为true

您要么if (!(strlen > 0))if (strlen <= 0)

答案 1 :(得分:3)

缺少括号?

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>';
}

答案 2 :(得分:1)

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

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

or

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

答案 3 :(得分:1)

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

可以这样重写:

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

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

另外,我建议不要在HTML源代码中不返回POSTed值,这只是要求麻烦......