我有一个需要由用户填写的表单。它有必填字段,不需要其他字段。例如,员工信息字段需要填写,不需要配偶,子女和子女的生日。每当我尝试在数据库中保存数据同时让配偶和子项保持空白时,它也会在数据库中保存空值,并且子日历字段(datepickers)会保存默认日历值1970-01-01。 这是我保存在数据库中的php代码。
if (!empty($_POST['child']) && !empty($_POST['ch_DateOfBirth'])) {
$selectEmp=$dbcon->query("Select Emp_ID from employee");
$count=$selectEmp->num_rows;
if ($count>0) {
while($row=$selectEmp->fetch_array()){
$emp_id="".$row['Emp_ID']."";
}
$child_name=$_POST['child'];
$count=count($child_name);
for ($i=0; $i < $count ; $i++) {
$child_bday=date('Y-d-m', strtotime($_POST['ch_DateOfBirth'][$i]));
$sql6="INSERT into tbl_children (Emp_ID, Ch_Name, Ch_Bdate) values ('".$emp_id."', '".$child_name[$i]."', '".$child_bday."') ";
$dbcon->query($sql6);
}
}
}
这是数据库显示的内容。
答案 0 :(得分:2)
在数据库中允许空值,即将默认值设置为null
,例如
`CREATE TABLE emptable(
`empname` VARCHAR(30) NOT NULL,
`dob` date DEFAULT NULL);`
答案 1 :(得分:1)
默认日历值已输入数据库,因为执行1970-01-01
时空值将转换为date('Y-d-m', strtotime($_POST['ch_DateOfBirth']
。
因此,检查日期是否为空,然后仅在其中包含值时将其转换为日期格式
for ($i=0; $i < $count ; $i++) {
$child_bday="";
//converts to date format only if the date field is not empty..else its null
if(!empty($_POST['ch_DateOfBirth'][$i])
{
$child_bday=date('Y-d-m', strtotime($_POST['ch_DateOfBirth'][$i]));
}
$sql6="INSERT into tbl_children (Emp_ID, Ch_Name, Ch_Bdate) values ('".$emp_id."', '".$child_name[$i]."', '".$child_bday."') ";
$dbcon->query($sql6);
}
答案 2 :(得分:0)
使用array_filter()
从已发布的数组中删除空值。
$child_names = array_filter($_POST['child']);
foreach($child_names as $key => $child_name){
$child_bday = (isset($_POST['ch_DateOfBirth'][$key]))?date('Y-d-m', strtotime($_POST['ch_DateOfBirth'][$key])):NULL;
$sql6="INSERT into tbl_children (Emp_ID, Ch_Name, Ch_Bdate) values ('".$emp_id."', '".$child_name."', '".$child_bday."') ";
$dbcon->query($sql6);
}
答案 3 :(得分:0)
确切地说:您需要更改表格列“Ch_Bdate”
ALTER TABLE table_name CHANGE `Ch_Bdate` `Ch_Bdate` DATETIME NULL DEFAULT NULL;