0

下面的代码打印出一个下拉框,其中默认字符串--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>");

当表单提交后,它会调用一个函数来决定是否dropdown框为默认值,否则我将更新 SQL 数据库。

但是,这是我感到困惑的地方,尽管提交了NULL.

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);

这听起来可能很基础,但是有人可以解释一下这是如何工作的吗?因为我还在学习..提前谢谢!

4

5 回答 5

3

请阅读http://php.net/manual/en/language.types.null.php

NULL 是一个特殊的值,用于表示 php 中未分配的对象。"NULL" 是一个包含单词 NULL 的字符串文字,并不相同。然而,在 PHP 中,您可能会看到它会做一些类型与相等性的杂耍。例如,“” == NULL 为真。

您不能通过 HTTP 发送 PHP NULL 值,因为 HTTP 中的所有内容都是字符串。因此,即使您将 NULL 指定为值,您的表单实际上也会将“NULL”发送到服务器。

于 2013-05-08T20:50:53.433 回答
1

value=NULL相当于value="NULL"。您不能通过 HTTP 提交非字符串值。而不是value=NULL使用value=""(空字符串)。这对于 php 来说是虚假的,就像NULL现在一样。

于 2013-05-08T20:48:16.377 回答
1

所有输入始终表示为string数据。

你只需要用正确的值填充你的值,它不能是 type null,也不是int其他的。

可能的解决方法:

  • 如果您期望整数,则将每个输入转换为整数。喜欢$id = (int) $_GET['id'] ;
  • 使用诸如 之类的功能empty()。它将在"0",0null其他一些上返回 true。
于 2013-05-08T20:48:27.273 回答
1

你在这里感到困惑。

空!='空'

左边的 null 是一个没有值的变量的保留值,右边的 nul 是一个包含单词 null 的字符串。

现在转到您提供的示例,如果您将 if 语句更改为 != 'NULL' (带引号),您将获得预期的结果。if($case_ov_status != "NULL")

但是,我的建议是将选项标签中的值设置为 value="" 或 value="0" ,然后将 if 语句更改为: if($case_ov_status != "") if($case_ov_status != 0)甚至更好 if(!empty($case_ov_status))

于 2013-05-08T21:06:04.943 回答
1

当用户选择时<option selected='selected' value=NULL>--Select Status--</option>");,它返回您在value属性中指定的值。它可能是 1,2,abc,..or NULL。字符串NULL作为选定值返回。当您检查时if($case_ov_status != NULL),它说$case_ov_status是否设置为 NULL 值(即“”)?但显然您需要检查所选值是否为 NULL string。所以你不得不说if($case_ov_status != 'NULL')

于 2013-05-08T21:10:36.133 回答