PHP'if'语句跨越多行?

时间:2011-08-07 14:41:04

标签: php syntax

我一直试图让这个工作,但我一直在解析错误:

if (isset($_POST['submit'])) {
    if ( isset($_POST['agree']) == false  || 
         isset($_POST['name'] == false    || 
         isset($_POST['email'] == false   ||  
         isset($_POST['title'] == false   ||  
         isset($_POST['program'] == false || 
         isset($_POST['course'] == false  ||  
         isset($_POST['file'] == false    ||) {
        echo ' <font color="red"> Please complete all required fields </font><br><br> ';
    }
}

在PHP中可以做这样的事吗?这是为了让我的代码更具可读性。

4 个答案:

答案 0 :(得分:11)

是的,这是完全可能的,但是你有一个没有下面表达式的最后一个尾随||并且你错过了一堆结束),这会给你解析错误。

此外,您可以将其缩写为

if (!isset($_POST['agree'], $_POST['name'], ...))

if (array_diff(array('agree', 'name', ...), array_keys($_POST)))

请注意,尽管所有这些都可能没有测试您想要测试的内容。如果您有表单,则所有这些字段都将设置。除非用户主动操作表单,否则将使用值""(空字符串)提交所有字段,这会使isset返回true。您要么寻找empty,要么进行更多自定义测试。

答案 1 :(得分:9)

嗯,如果你更正了括号并省略了最后一个||,这个有效的PHP代码:

if (isset($_POST['submit'])) {
   if (!isset($_POST['agree']) || 
       !isset($_POST['name']) || 
       !isset($_POST['email']) ||  
       !isset($_POST['title']) ||  
       !isset($_POST['program']) || 
       !isset($_POST['course'])  ||  
       !isset($_POST['file'])
   ) {
       echo '<font color="red">Please complete all required fields</font><br>';
   }
}

顺便说一下,<font>元素已经deprecated,而是使用CSS。

答案 2 :(得分:4)

这样做会不会更简单?

foreach(array('submit','agree','name','email','title','program','course','file') as $value) {
    if(!isset($_POST[$value])) {
        /* insert form incomplete routine here */
        }
    }

答案 3 :(得分:2)

您几乎失去了所有isset的结束括号。你还有一个额外的'||'最后。

注意:错误消息非常清楚地说明了这一点:

 Parse error: syntax error, unexpected T_IS_EQUAL, expecting ',' or ')' in ... on line 5