我正在编写一个简单的联系表单,以下代码给我带来了麻烦:
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()。
有谁能看到这里的问题是什么?
答案 0 :(得分:5)
if (!strlen > 0)
首先评估strlen
,然后给出10,然后由!
到false
取消。 然后将此与> 0
进行比较,false
,因为false
将投放到0
而0 > 0
是false
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值,这只是要求麻烦......