Strugling with if, empty, and, or,


Strugling with if, empty, and, or,

当date_enabled为2且三个变量中有一个为空时,下面的脚本应该会创建一个错误。例如,当day为空时,脚本仍然不回显句子。有人发现问题了吗?

$year = $_POST['date-year'];
$month = $_POST['date-month'];
$day = $_POST['date-day'];
$date_enabled = 2;     
if ((($date_enabled ==2)) && ((empty($year) || empty($day) || empty($month)))){
            echo "You didn't enter a valid date";
            }

UPDATE -当我执行以下脚本时,它返回:它是空的,它是空的(函数)。这意味着empty和我根据@Expert System的建议创建的函数isEmpty也可以工作。

if (empty($day)){
    echo "its empty";
    }
if (!isset($day)){
    echo "its not set";
    }
if (isEmpty($day)){
    echo "its empty (function)";
    }

UPDATE AGAIN -上面的脚本确实正确工作。问题出在我的形式上。现在运行正常,谢谢你的帮助。

我认为你的问题中"空"的定义是不清楚的。如果您的问题中的empty表示零长度字符串,那么empty函数不适合您。

empty() from PHP document

确定变量是否为空。变量是如果不存在或其值为FALSE,则认为为空。如果变量不存在,Empty()不会生成警告。

也许这个自定义函数可以在你的上下文中工作

function isEmpty($var) {
    return !isset($var) || ($var == '');
}
然后

if (($date_enabled == 2) && 
    (isEmpty($year) || isEmpty($day) || isEmpty($month))){
    echo "You didn't enter a valid date";
}

试试下面的代码:

$year = isSet($_POST["date-year"]) ? $_POST["date-year"] : "";
$month = isSet($_POST["date-month"]) ? $_POST["date-month"] : "";
$day = isSet($_POST["date-day"]) ? $_POST["date-day"] : "";
$date_enabled = 2;
if ((($date_enabled ==2)) && ((empty($year) || empty($day) || empty($month)))){
    echo "You didn't enter a valid date";
}

问题可能是当您尝试访问$_POST数组中未定义的索引时,E_NOTICE级别出现错误。对于ususl/default配置选项,这应该不会导致问题(即停止执行),但对于您的配置选项,可能会(只是猜测)。