这个问题来自于我花了2个小时的反复试验,最后找到了错误的位置,我需要有人帮助澄清为什么这样做。
下面的代码打印出一个下拉框,其默认字符串为'--Select Status--',其值为NULL。
print("<label>Overall Status Overwrite:</label>
<select name='case_ov_status' class='case_ov_status'>
<option selected='selected' value=NULL>--Select Status--</option>");
在提交时,我调用一个函数来确定下拉框是否为默认值,如果不是,我将更新SQL数据库。然而,这是我困惑的地方。尽管提交了NULL值,下面的if语句仍然会运行。我发现2小时后,使用if($case_ov_status != 'NULL')
代替if($case_ov_status != NULL)
解决了问题。
if($case_ov_status != NULL){ //Still ran despite != NULL.
mysql_query("START TRANSACTION", $connection);
$sql = "Update cases set status=".$case_ov_status." Where patientid='".$patientID."' and caseid='".mysql_real_escape_string($case)."'";
$resultNew = mysql_query($sql, $connection);
这可能听起来很基本,但有人可以解释一下这是如何工作的吗?因为我还在学习.. 提前谢谢!
答案 0 :(得分:2)
请阅读http://php.net/manual/en/language.types.null.php
NULL是表示php中未分配对象的特殊值。 “NULL”是包含单词NULL的字符串文字,并且不相同。但是在PHP中你可能会看到它会做一些与平等相关的类型。例如,“”== NULL为真。
您无法通过HTTP发送PHP NULL值,因为HTTP中的所有内容都是字符串。因此,即使您将NULL指定为值,您的表单实际上也会向服务器发送“NULL”。
答案 1 :(得分:1)
value=NULL
相当于value="NULL"
。您无法通过HTTP提交非字符串值。而不是value=NULL
使用value=""
(空字符串)。对于PHP来说,这就像NULL
那样是假的。
答案 2 :(得分:1)
所有输入始终表示为string
数据。
您只需要使用正确的值填充值,它不能是null
类型,也不能是int
或其他类型。
可能的解决方法:
$id = (int) $_GET['id'] ;
empty()
等功能。它会在"0"
,0
,null
和其他一些上返回。答案 3 :(得分:1)
NULL!='NULL'
左边的null是没有值的变量的保留值, 右边的nul是一个包含单词null的字符串。
现在,为了获得您提供的示例,如果您将if语句更改为!='NULL'(带引号),您将获得预期结果。 if($ case_ov_status!=“NULL”)
我的建议是将option标签中的值设置为value =“”或value =“0”,然后将if语句更改为: if($ case_ov_status!=“”) if($ case_ov_status!= 0) 甚至更好 如果(!空($ case_ov_status))
答案 4 :(得分:1)
当用户选择<option selected='selected' value=NULL>--Select Status--</option>");
时,它会返回您在value
属性中指定的值。它可以是1,2,abc,..或NULL
。字符串NULL
作为选定值返回。
当您检查if($case_ov_status != NULL)
时,它会将$case_ov_status
设置为NULL值(即“”)或不是?但显然您需要检查所选值是否为NULL string
。所以你必须说if($case_ov_status != 'NULL')