-2

我正在尝试匹配一个条件,如果用户状态为 10 并且未设置任何POST 变量,则会触发错误:

if ($_SESSION['status']=='10' && !isset($_POST['a']) || !isset($_POST['B'])) {}

我不能对任何!isset一个变量使用 && 条件,因为可以设置一个变量,而另一个变量可能没有。如果未设置一个或多个变量并且状态==10,我只希望条件匹配。

在测试$_POST变量时,我通过浏览器网络工具(例如 Firebug)从页面!isset中删除一个元素。input当表单提交时缺少变量,它仍然错误地通过验证。

如果分组条件,我也在寻找 PHP。

4

4 回答 4

0

如果您正在寻找绝对任何PHP 变量,我建议您这样做:

if (($_SESSION['status'] == 10) && (count($_POST) > 0)) {

然后,您可以使用获取 _POST var 键的列表array_keys($_POST)

如果您正在寻找特定的:

if (($_SESSION['status'] == 10) && (isset($_POST['A']) || isset($_POST['b']))) {

括号的顺序很重要。您可以用括号分隔逻辑语句组。

于 2013-04-02T21:28:32.133 回答
0

那是你要找的吗?

$status = $_SESSION['status'];

if($status == '10'){
    if(!isset($_POST['a']) or !isset($_POST['B'])){
     //Triggers error.
    }else{
     //Another
    }
}
于 2013-04-02T21:29:17.860 回答
0

尝试使它成为一个函数:

function checkAllVars($dataVars, $requestVars) {
    foreach($dataVars as $varname) {
        if(!isset($requestVars[$varname])) {
            return false;
        }
    }
    return true;
}

$dataVars = array (
"varName1",
"varName2",
"varName3",
"varName4",
);

$allVarsSet = checkAllVars($dataVars, $_REQUEST);
于 2013-04-02T21:51:51.540 回答
-1

你可能正在寻找

if($_SESSION['status']=='10' && (!isset($_POST['a']) || !isset($_POST['B']))){}
                                ^                                          ^

这意味着如果状态 = 10 并且(如果未设置“a”或未设置“B”,或者它们都可以不设置)做某事

或者你可能正在寻找

if(($_SESSION['status']=='10' && !isset($_POST['a'])) || ($_SESSION['status']=='10' && !isset($_POST['B']))){}
于 2013-04-02T21:27:47.443 回答