如果语句具有多个逻辑比较

时间:2013-06-29 19:05:58

标签: php if-statement syntax compare

我需要检查$ _POST ['a']是否为空并且是'1'或'2'因此用户无法删除a =或将值从1或2更改为帖子路径中的其他内容:

<?php
if(empty($_POST['a']) || !in_array($_POST['a'], array('1', '2'))) {
 echo 'error1';
} else if ($_POST['a'] == '1') {
 do something;
} else if ($_POST['a'] == '2') {
 do something;
} else {
 echo 'error2';
}
?>

任何人都可以教我如何以正确的方式做到这一点吗?

非常感谢

3 个答案:

答案 0 :(得分:4)

您可以改用开关:

switch ($_POST['a']):
case '':
    // empty
    echo 'error1';
    break;
case '1':
    // do something for 1
    break;
case '2':
    // do something for 2
    break;
default:
    // not empty but not 1 or 2
    echo 'error2';
endswitch;

答案 1 :(得分:1)

if (!empty($_POST['a']) && $_POST['a'] == '1') { //Not empty AND is 1
 do something;
} else if (!empty($_POST['a']) && $_POST['a'] == '2') { //Not Empty AND is 2
 do something;
} else {
 echo 'error';
}

前两个将捕获所有“好”值,其他一切都会得到错误。在这种情况下,不需要顶部。

答案 2 :(得分:0)

更新:您遇到语法错误。在第一个)的末尾缺少if

两种简单的方法:

// first condition should be by itself as it's a terminal error
if(empty($_POST['a']) or !in_array($_POST['a'], array('1', '2'))) {
    echo 'error1';
    die; // or redirect here or just enfore a default on $_POST['a'] = 1; // let's say
}

// Second can be like this or embraced in the else of the first one (se ex.2)
if ($_POST['a'] == '1') {
    // do something;
} else if ($_POST['a'] == '2') {
    // do something;
}

// first condition should be by itself as it's a terminal error
if(empty($_POST['a']) or !in_array($_POST['a'], array('1', '2'))) {
    echo 'error1';
    // or redirect here or just enfore a default on $_POST['a'] = 1; // let's say
}else{ // Second is in the else here :)
    if ($_POST['a'] == '1') {
    // do something;
    } else if ($_POST['a'] == '2') {
        // do something;
    }
}

您的上一个else将无法联系,因为它始终会在您处理空虚和非法价值的第一个if中结束。