我正在尝试将表单输入到使用数值(主要是小数)的数据库中
此表单更新并插入正常,但我希望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'";
Run Code Online (Sandbox Code Playgroud)
如果某个字段为空或有人在编辑时将其清除(我认为也可以),则该值为空字符串.
因此,为了确保插入NULL有空字符串的位置,您可以(对于所有可能的变量NULL):
$test1 = ($_POST['test1'] === '') ? NULL : $_POST['test1'];
Run Code Online (Sandbox Code Playgroud)
这将真正设置值NULL而不是插入时将被强制转换为0的空字符串.
您应该为sql插入使用预准备语句.
编辑:还要注意,当您尝试插入您的NULL值时,您应该只插入NULL而不是插入'NULL'.通过切换到带有绑定变量的预准备语句也可以解决该问题.
编辑2:在这里工作的临时解决方案是从sql语句中删除引号并将它们添加到赋值中:
$test1 = ($_POST['test1'] === '') ? NULL : ("'" . (float) $_POST['test1'] . "'");
...
Run Code Online (Sandbox Code Playgroud)
和:
$insert = "INSERT INTO tests SET
member_id='$_SESSION[SESS_MEMBER_ID]',
test1=$test,
test2=$test2,
test3=$test3,
...
Run Code Online (Sandbox Code Playgroud)
我以前(float)至少摆脱了sql注入问题(mysql_real_escape_string()可能更好,不知道,不再使用它了......),但这更像是一个黑客而不是一个真正的解决方案.请切换到带有绑定变量的预准备语句.