我正在尝试将表单输入到使用数值(主要是小数)
的数据库中此表单更新并插入正常,但我希望NULL
字段将NULL
插入数据库。
如果我将字段留空,它仍会将0.000
放入数据库。我将数据库设置为NULL = YES
我可以使用一小段代码来为所有14个文本框执行此操作吗?
这是我的代码:
<?php
if (isset($_POST['submit'])) {
$date2 = date("y-m-d"); // DATE OF TANK ADDITION
$time2 = date("H:i:s", time() - 3600); // TIME OF TANK ADDITION
$test1 = $_POST['test1'];
$test2 = $_POST['test2'];
$test3 = $_POST['test3'];
$test4 = $_POST['test4'];
$test5 = $_POST['test5'];
$test6 = $_POST['test6'];
$test7 = $_POST['test7'];
$test8 = $_POST['test8'];
$test9 = $_POST['test9'];
$test10 = $_POST['test10'];
$test11 = $_POST['test11'];
$test12 = $_POST['test12'];
$test13 = $_POST['test13'];
$test14 = $_POST['test14'];
$time = $_POST['time'];
$date = $_POST['date'];
$month = $_POST['month'];
$day = $_POST['day'];
$active1 = $_POST['active1'];
$active2 = $_POST['active2'];
$active3 = $_POST['active3'];
$active4 = $_POST['active4'];
$active5 = $_POST['active5'];
$active6 = $_POST['active6'];
$active7 = $_POST['active7'];
$active8 = $_POST['active8'];
$active9 = $_POST['active9'];
$active10 = $_POST['active10'];
$active11 = $_POST['active11'];
$active12 = $_POST['active12'];
$active13 = $_POST['active13'];
$active14 = $_POST['active14'];
$tank = $_POST['tank'];
$insert = "INSERT INTO tests SET
member_id='$_SESSION[SESS_MEMBER_ID]',
test1='$test1',
test2='$test2',
test3='$test3',
test4='$test4',
test5='$test5',
test6='$test6',
test7='$test7',
test8='$test8',
test9='$test9',
test10='$test10',
test11='$test11',
test12='$test12',
test13='$test13',
test14='$test14',
date='$date',
month='$month',
day='$day',
time='$time',
active1='$active1',
active2='$active2',
active3='$active3',
active4='$active4',
active5='$active5',
active6='$active6',
active7='$active7',
active8='$active8',
active9='$active9',
active10='$active10',
active11='$active11',
active12='$active12',
active13='$active13',
active14='$active14',
tank_id='$tank'";
答案 0 :(得分:5)
如果某个字段为空或有人在编辑时将其清除(我认为也可以),则该值为空字符串。
因此,为了确保在空字符串中插入NULL
,您可以(对于所有可能为NULL
的变量):
$test1 = ($_POST['test1'] === '') ? NULL : $_POST['test1'];
这将真正将值设置为NULL
,而不是插入时将转换为0的空字符串。
您应该为sql插入使用预准备语句。
修改:另请注意,当您尝试插入NULL
值时,应该只插入NULL
而不是'NULL'
。通过切换到带有绑定变量的预准备语句,也可以解决这个问题。
编辑2:这里可行的临时解决方案是从sql语句中删除引号并将其添加到赋值中:
$test1 = ($_POST['test1'] === '') ? NULL : ("'" . (float) $_POST['test1'] . "'");
...
和
$insert = "INSERT INTO tests SET
member_id='$_SESSION[SESS_MEMBER_ID]',
test1=$test,
test2=$test2,
test3=$test3,
...
我已经使用(float)
至少摆脱了sql注入问题(mysql_real_escape_string()
可能更好,不知道,不再使用它了...),但是这更像是一个黑客而不是一个真正的解决方案。 请切换到带有绑定变量的预准备语句。
答案 1 :(得分:2)
您必须完全将NULL
中的项目从中删除。
尝试类似:
foreach ($_POST as $k => $v)
{
$query .= "{$k}='{$v}',";
}
你必须让你的逗号工作等等。
警告:强>
请不要在生产中使用此代码。您应始终sanitize user inputs,使用parameterized SQL,并且不接受您不期望的POST密钥。
答案 2 :(得分:1)
特定字段的表结构中是否有DEFAULT NULL
?
该表需要知道如何处理默认值
CREATE TABLE IF NOT EXISTS MyTable (
MyField datatype DEFAULT NULL,
);
如果要更新表而不是重新创建表,请执行以下操作:
ALTER TABLE MyTable
ALTER COLUMN MyField datatype DEFAULT NULL