处理 _GET 美元和 _POST 美元

Handling $_GET and $_POST

提问人:riddley walker 提问时间:10/11/2023 最后编辑:riddley walker 更新时间:10/12/2023 访问量:22

问:

部分解决方案在下面的编辑 #2 中给出。

我正在处理PHP表单。留空的字段将在 url“empty”中传递,例如:

www.test.com?UserID=1234&DiscountText=&Size=

我需要根据通过(和未通过)的内容做出决定。在 PHP 5.x 程序中,我使用这样的代码将值分配给变量,如果未传递任何值,则分配 NULL 值:

    if (isset($_GET['Size'])) {
        $Size = $_GET['Size'];
    } else {
        $Size=NULL;
    }

在 PHP 8.x 下,如果变量未传递,则会生成警告,因为 $_GET['Size'] 为 null。

我能够用这个为 PHP 修复它:

if ((isset($_GET['Size']))  and (!is_null($_GET['Size'])) ) {
    echo "We have been passed a non-null value in the variable";
    $Size = $_GET['Size'];
} else {
    Echo "<br> Assign a null value to the variable";
    $Size = NULL;
}

问题在于,这个“模板”在程序中被多次使用,并测试了不同的变量。我尝试编写一个函数,以便可以在上面的示例中调用:

$Size = TestToSeeIfVariableIsSetAndNotNull($_GET['Size']);

但不断收到错误/警告,因为我可能传递了一个空值,这正是我试图测试的东西。你能建议一个可以封装东西的函数,这样我就不必写一百万次相同的代码吗?

编辑:这是我尝试过的功能:

<?php   
Function test($X){
    if ((!isset($X)) or (is_null($X))) {
        $X= NULL;
}
Return $X;
}

$TestThis=$_GET['TestMe'];

if (is_null(test($TestThis))){
    echo "<br> our function returned null " ;   
}else{
    echo "<br>Our Function returned ". test($TestThis);
}
?>

如果我将程序称为 Test.com?TestMe=HelloWorld,它有效。但是,如果 TestMe 被排除在外,我会收到警告:PHP 警告:未定义的数组键“TestMe”。

有没有更好的方法,以免我的日志文件因所有这些警告而爆炸?

编辑#2:我问chatgpt看看它是否有建议,它提出了一个部分解决方案。它使用了 null 合并运算符??如果未设置 $_GET['Size'],则将 $Size 设置为 null。这样,如果传递了 null 值,则不会生成警告。它确实摆脱了警告,但我想知道这是否是最佳实践,因为忽略错误消息永远不会让我觉得这是最好的解决方案。我把它包括在这里,供那些可能有同样问题的人使用,但在这里询问其他人这是否是最好的方法。

function processSize() {
    $Size = $_GET['Size'] ?? null;
    
    if ($Size !== null) {
        echo "We have been passed a non-null value in the variable";
    } else {
        echo "<br> Assign a null value to the variable";
    }

    return $Size;
}
函数 null php-8

评论


答: 暂无答案