【问题标题】:empty fields saves empty values in the database空字段将空值保存在数据库中
【发布时间】:2017-02-15 04:09:23
【问题描述】:

我有一个需要用户填写的表格。它具有必填字段,其他字段不是必需的。例如,需要填写员工信息字段,不需要填写配偶、子女和子女的生日。每当我尝试将数据保存在数据库中而将配偶和孩子留空时,它也会在数据库中保存一个空值,并且作为日期选择器的孩子生日字段会保存一个默认日历值 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);
            }
        }

}

这是数据库显示的内容。

【问题讨论】:

  • 设置为空。
  • 日期必须格式化为 $child_bday=date('Y-m-d', strtotime($_POST['ch_DateOfBirth'][$i]));

标签: php mysql


【解决方案1】:

在您的数据库中允许空值,例如,将默认值设置为null

`CREATE TABLE emptable(
`empname` VARCHAR(30) NOT NULL,
`dob` date DEFAULT NULL);`

【讨论】:

    【解决方案2】:

    因为执行date('Y-d-m', strtotime($_POST['ch_DateOfBirth']时将空值转换为1970-01-01,所以将默认日历值输入数据库。

    所以检查日期是否为空,然后仅当其中有值时才将其转换为日期格式

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

    【讨论】:

      【解决方案3】:

      使用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);
      }
      

      【讨论】:

        【解决方案4】:

        完全正确:您需要更改表格列“Ch_Bdate”

        ALTER TABLE table_name CHANGE `Ch_Bdate` `Ch_Bdate` DATETIME NULL DEFAULT NULL;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 2017-12-07
          • 1970-01-01
          相关资源
          最近更新 更多