我们最近搬了服务器,并注意到一些奇怪的问题。 我们注意到的主要问题是在php中执行空检查的任何变量都被解释为字符串。
e.g。
if($var == null){
//do something
}
已经做出的两个主要变化是: 1.从HTTP服务器更改为HTTPS 2.从php版本5.3.14更改为5.3.13
请求是使用jQuery.ajax post call。
我的问题是,是否存在任何已知的问题/原因(例如上述更改),并且可以采取任何措施来解决问题(只需进行少量更改)。
一如既往地感谢您的回复!
编辑: 示例
JS / jQuery的
var test = null;
$.ajax({
url: 'functions.php',
data: { action: 'testNullFunction', testVar:test },
type: 'post',
success:
function (output) {
alert(output)
}})
腓:
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;
答案 0 :(得分: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'])
答案 1 :(得分:2)
有些天真的答案,但尝试进行严格的类型检查。
if($var === null){
//do something
}
或者也许使用is_null。
if (is_null($var)){
//do something
}
答案 2 :(得分:2)
如果您没有按照JSON的格式对数据进行编码,则您的字段将作为字符串发送 - 这包括null
作为'null'
发送,当然如果您评估的是if($myVar==null)
和$myVar
包含'null'
,它不是真正的空。
您可能还想look at this提问。