isset($_GET(var)) 为真,即使 var 为 null 或 undefined

isset($_GET(var)) is true even if var is null or undefined

我正在向 isset() 语句发送多个未设置的变量,但结果为真。

所以我有一个表单,我通过侦听器发送数据,同时我将变量打印到 Web 控制台

  formQuote.addEventListener('submit', (event) => {
    event.preventDefault();
    fromDate = formQuote.elements["fromDate"].value;
    toDate = formQuote.elements["toDate"].value;
    apptmnt = $('input[name="apptmnt"]:checked').val();
            
    console.log(fromDate);
    console.log(toDate);
    console.log(apptmnt);

    $('#priceDisplay').load('forms/quote.php?fromDate=' + fromDate + '&toDate=' + toDate + '&apptmnt=' + apptmnt);

由于我没有输入任何内容,因此在单击提交时控制台显示 2 个空行(fromDate、toDate)和未定义。数据被 php 文件

捕获
if (isset($_GET['fromDate'], $_GET['toDate'], $_GET['apptmnt'])) {
    echo 'true';
}
else {
    echo 'false'; 
}

在 return 我看到 true!?

我根据文档的理解是,仅当所有参数都为真时才设置 return 为真,因此 isset($a, $b)isset($a)*isset($b)

相同

知道是什么原因造成的吗?

示例代码显示了 issetempty

之间的区别
<?php
$a = array('blank'=>'');
var_dump(isset($a['blank']));  // bool(true)
var_dump(!empty($a['blank'])); // bool(false)

您在查询字符串中发送这些参数,即使它们为空或未定义。您应该只在参数不为空时发送参数。 isset 检查变量是否存在且不为空,但在这种情况下,当您通过 JS 发送它时,即使它们在 JS 中为空,它也可能将它们作为不为空的空字符串发送,所以这就是为什么 isset returns 为真。所以你应该在调用你的页面之前检查它。

if (fromDate && toDate && apptmnt) {
    $('#priceDisplay').load('forms/quote.php?fromDate=' + fromDate + '&toDate=' + toDate + '&apptmnt=' + apptmnt);
} else {
    $('#priceDisplay').load('forms/quote.php');
}