【问题标题】:isset($_GET(var)) is true even if var is null or undefinedisset($_GET(var)) 为真,即使 var 为空或未定义
【发布时间】:2021-10-20 12:57:13
【问题描述】:

我将多个未设置的变量发送到 isset() 语句,但结果为 true。

所以我有一个表单,我通过监听器发送数据,同时我将变量打印到 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'; 
}

作为回报,我看到了true!?

我对文档的理解是,只有当所有参数都为真时,isset 才会返回真,所以isset($a, $b)isset($a)*isset($b) 相同

有什么想法会导致这种情况吗?

【问题讨论】:

  • 您已将参数放入您请求的 URL 中,因此它们设置。这些参数的 value 可能只是一个空字符串或undefined,这无关紧要。也许你想去看看issetempty有什么区别?
  • 使用if (!empty($_GET['fromDate']) && !empty($_GET['toDate']) && !empty($_GET['apptmnt'])) {,isset会检查你的url参数中是否存在key。

标签: php httprequest


【解决方案1】:

示例代码显示issetempty 之间的区别

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这就是我的想法,只是有点懒于考虑除了fromDate之外的所有设置,所以我必须在toDate之前删除&amp;。但我想 !empty 是一种更方便的方式
    • @w461 是的,在这里使用空更合适,但是如果你的输入可以有 0 作为值,那么空也会导致问题,因为它 0 被认为是空的,所以最好看看空和伊塞特作品。您可以从here 阅读有关它的精彩文章
    • 非常有用的评论,一个变量可以是 0,确实如此。所以回去工作......干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    相关资源
    最近更新 更多