Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
can';t在更新多行的php表单中保留空值_Php_Forms_Null_Edit - Fatal编程技术网

can';t在更新多行的php表单中保留空值

can';t在更新多行的php表单中保留空值,php,forms,null,edit,Php,Forms,Null,Edit,我有一个更新多行的表单。一个项目,其完成日期为。COMPLETED的默认值为null。在php/mysql中,我有一个表单来编辑列表。我可以更新已完成,但是如果我没有在表单中输入值,它不会保持为空,它会插入0000-00-00的日期。这些功能需要有效日期或空值。以下是相关代码: 表格: 该表允许NULL,这是该字段的默认设置。我的直觉是表单字段正在传递一些信息,但如果用户输入日期,我不知道如何允许它传递日期,而如果表单中没有输入值,则传递null 谢谢mysql\u real\u escape\

我有一个更新多行的表单。一个项目,其完成日期为。COMPLETED的默认值为null。在php/mysql中,我有一个表单来编辑列表。我可以更新已完成,但是如果我没有在表单中输入值,它不会保持为空,它会插入0000-00-00的日期。这些功能需要有效日期或空值。以下是相关代码:

表格:

该表允许NULL,这是该字段的默认设置。我的直觉是表单字段正在传递一些信息,但如果用户输入日期,我不知道如何允许它传递日期,而如果表单中没有输入值,则传递null

谢谢

mysql\u real\u escape\u string()返回一个字符串(如果出错,则返回布尔值),因此$COMPLETED变量将变成一个空字符串,即!==无效的此外,PHP中的变量类型NULL将无法正确转换为作为查询的已计算字符串(特别是因为您在查询中引用了$COMPLETED)。您需要检查$COMPLETED是否为空字符串,并相应地进行处理。也许是这样:

if(empty($COMPLETED)) {
   $update = " UPDATE `UCKET`.`LIST` SET `COMPLETED` = NULL WHERE `LIST`.`LIST_NUM` =$LIST_NUM;";
} else {
   $update = " UPDATE `UCKET`.`LIST` SET `COMPLETED` = '$COMPLETED' WHERE `LIST`.`LIST_NUM` =$LIST_NUM;";
}
另一种(更好的)解决方案是使用准备好的语句,这样您就可以将null类型的php变量直接传递到数据库进行插入,而不是在查询字符串中计算null

if(empty($COMPLETED)) {
   unset($COMPLETED);
}

$stmt = $mysqli->prepare("UPDATE `UCKET`.`LIST` SET `COMPLETED` = ? WHERE `LIST`.`LIST_NUM` = ?;");

$stmt->bind_param('si', $COMPLETED, $LIST_NUM);

由于变量直接传递到数据库服务器,并作为查询的参数进行处理,因此使用准备好的语句无需使用mysql_real_escape_string()。如果($COMPLETED)已经为空,则可能不需要取消设置($COMPLETED),但这取决于表单的设计方式。

A:将列更改为空作为默认值。也可以将三元运算符与前者结合使用。如果你不能改变它的当前状态,也可以使用三元运算符。我很高兴这有帮助,欢迎使用StackOverflow。如果这完全回答了你的问题,你会考虑把它标记为你的问题的答案吗?谢谢
if(empty($COMPLETED)) {
   $update = " UPDATE `UCKET`.`LIST` SET `COMPLETED` = NULL WHERE `LIST`.`LIST_NUM` =$LIST_NUM;";
} else {
   $update = " UPDATE `UCKET`.`LIST` SET `COMPLETED` = '$COMPLETED' WHERE `LIST`.`LIST_NUM` =$LIST_NUM;";
}
if(empty($COMPLETED)) {
   unset($COMPLETED);
}

$stmt = $mysqli->prepare("UPDATE `UCKET`.`LIST` SET `COMPLETED` = ? WHERE `LIST`.`LIST_NUM` = ?;");

$stmt->bind_param('si', $COMPLETED, $LIST_NUM);