Null作为字符串“ null”发送

问题描述 投票:2回答:3

我们最近移动了服务器,并注意到了一些奇怪的问题。我们注意到的主要问题是,在php中执行空检查的任何变量都被解释为字符串。

例如

    if($var == null){
        //do something
    }

已进行的两个关键更改是:1.从HTTP服务器更改为HTTPS2.从php版本5.3.14更改为5.3.13

这些请求是使用jQuery.ajax调用后发出的。

我的问题是,是否有任何已知的问题/原因导致这种情况发生(例如上述更改),并且可以采取任何措施来解决该问题(只需进行最小的更改)。

一如既往,感谢您的回复!

编辑:例子

Js / jQuery

    var test = null;
    $.ajax({
        url: 'functions.php',
        data: { action: 'testNullFunction', testVar:test },
        type: 'post',
        success:
        function (output) {
            alert(output)
        }})

Php:

    if (isset($_POST['action']) && !empty($_POST['action'])) {
         $action = $_POST['action'];
         switch ($action) {
             case 'testNullFunction':
                 if ($_POST['testVar']==null || is_null($_POST['testVar'])){
                       echo "its null"; 
                } 
             break;
php jquery ajax post https
3个回答
5
投票

[执行时:

$.ajax({
    url: 'functions.php',
    data: { action: 'testNullFunction', testVar:test },
    type: 'post',
    success: function (output) {
        alert(output)
    }
})

您将data作为字符串发送,因此所有值也将变成字符串。

当PHP收到它时,它仍然是一个字符串。在这种情况下,PHP无法确定testVar包含null还是"null"-类型信息已丢失。


您可以通过发送:

data: { action: 'testNullFunction', testVar: JSON.stringify(test) }

并接收:

$testVar = json_decode($_POST['testVar'])

2
投票

有点天真,但是请尝试进行严格的类型检查。


2
投票

[如果您不按照JSON编码数据,则您的字段将以字符串形式发送-这包括将null作为'null'发送,当然,如果您对if($myVar==null)和[ C0]包含$myVar,它不是真的为空。

© www.soinside.com 2019 - 2024. All rights reserved.