2

最近サーバーを移動しましたが、いくつかの奇妙な問題に気づいています。私たちが気付いた主な問題は、php で null チェックが実行される変数が文字列として解釈されていることです。

例えば

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

主な変更点は次の 2 つです。 1. HTTP サーバーから HTTPS への変更 2. 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;
4

3 に答える 3

5

あなたがするとき:

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

を文字列として送信するdataと、すべての値も文字列になります。

PHP がそれを受け取ると、それはまだ文字列です。testVarこの場合、型情報が含まれているかどうか、nullまたは"null"型情報が失われたかどうかを PHP が判断することは不可能です。


以下を送信することで修正できます。

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

そして受け取る:

$testVar = json_decode($_POST['testVar'])
于 2012-08-14T00:37:29.790 に答える
2

JSONの行に沿ってデータをエンコードしていない場合、フィールドは文字列として送信さnull'null'ます.if($myVar==null)$myVar'null'

この質問も参照してください。

于 2012-08-14T00:38:28.480 に答える
2

やや素朴な答えですが、厳密な型チェックを行ってみてください。

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

または、代わりに is_null を使用してください。

if (is_null($var)){
    //do something
}
于 2012-08-14T00:17:37.013 に答える