2012-08-14 133 views
1

我們最近移動了服務器並注意到一些奇怪的問題。 我們注意到的主要問題是任何在php中執行空檢查的變量都被解釋爲一個字符串。空作爲字符串發送「null」

例如

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

已經取得的兩個關鍵的變化是:從HTTP服務器 1.更改爲從PHP版本HTTPS 2.更改,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; 
+2

你能表現出你如何測試它反對'null'之前設置'$ var'的例子嗎?如果它是來自Ajax調用的請求參數,那麼JS/jQuery中的參數設置如何? – nnnnnn 2012-08-14 00:18:20

+1

在上面添加了一個示例@nnnnnn – TStu 2012-08-14 00:35:00

回答

4

當你這樣做:

$.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.encode(test) } 

和接收:

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

任何想法爲什麼這是在以前的主機上工作? – TStu 2012-08-14 00:38:31

+0

對於某些版本的PHP,「null」== null? – Eric 2012-08-14 00:38:59

+0

謝謝@Eric。 看起來像一個漫長的夜晚:\ \ – TStu 2012-08-14 00:46:34

2

頗有幾分天真的答案,但嘗試做嚴格的類型檢查。

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

或者也許使用is_null來代替。

if (is_null($var)){ 
    //do something 
} 
+0

嘗試了兩種方法,但仍無法正常工作。 if($ var ==「null」){.... does not work – TStu 2012-08-14 00:21:55

2

如果不沿着編碼JSON的線你的數據,你的領域將被髮送作爲字符串 - 這包括null如果評估對像if($myVar==null)$myVar,包含3個被髮送的'null'當然ns 'null'它不是真正的零。

您可能還需要look at this問題。

相關問題