通过php表单输入mysql INT和DATE的空值


Null value for mysql INT and DATE entered through a php form

我正在做一个这样的表单:

     <tr align="center"><!-- list A doc -->
            <td><b>Documents Collected:</b></td>
            <td>  
                <select name="listA_id">
                <option value="">List A documents</option>
                <?php
                include("connect-db.php");
                $list = mysql_query("SELECT doc_no, doc_name FROM hr_doc_master WHERE doc_id =1 ");
            while($row_list=mysql_fetch_array($list))
            {
                echo  "<option value='"{$row_list[0]}'">{$row_list[1]}</option>";
            }
            mysql_close($connection);
    ?>
    </select></td></tr>
   <tr align="center"><td><b>Document No.</b></td>
    <td><input type="text" name="listA_doc_no"></td></tr>
            <tr align="center"><td>Expiry Date</td><td><input type="date" name="listA_doc_expiry"></td></tr>
           <tr align="center"><td>List B</td></tr>   
           <!----- list B ------->
            <tr align="center">
            <td><b>Documents Collected:</b></td>
            <td>  
                <select name="listB_id">
                <option value="">List B documents</option>  
                <?php 
                 include("connect-db.php");
                $list = mysql_query("SELECT doc_no, doc_name FROM hr_doc_master WHERE doc_id = 2");
            while($row_list=mysql_fetch_array($list))
            {
                echo  "<option value='"{$row_list[0]}'">{$row_list[1]}</option>";
            }
            mysql_close($connection);
    ?>
                    </select>
                    </td>
            </tr>
            <tr><td>Document No.</td><td><input type="text" name="listB_doc_no" size =30 ></td></tr>
            <tr align="center"><td><b>Expiry Date</b></td><td><input type="date" name="listB_doc_expiry" size =30 ></td></tr>
           <tr><td colspan=2><hr/></td></tr>
           <tr align="center"><td>List C</td></tr>     
           <tr align="center">
            <td>
                    <b>Documents Collected:</b>
                </td>
                    <td>  
                    <select name="listC_id">
                        <option value="">List C documents</option>
                        <?php
        include("connect-db.php");
                            $list = mysql_query("SELECT doc_no, doc_name FROM hr_doc_master WHERE doc_id =3 ");
            while($row_list=mysql_fetch_array($list))
            {
                echo  "<option value='"{$row_list[0]}'">{$row_list[1]}</option>";
            }
            mysql_close($connection); `?>`

                    </select>
                </td>
        </tr>
        <tr align="center"><td>Document No.</td><td><input type="text" name="listC_doc_no" size =30 ></td></tr>
        <tr align="center"><td>Expiry Date</td><td><input type="date" name="listC_doc_expiry" size =30 ></td></tr>

用户输入将在另一个页面上被POST ed。现在,用户没有必要从所有三个列表中进行选择。用户可以从一个列表或两个列表中选择,也可以从三个列表中选择。这将给出仅A,仅B,仅C, AB, BC, AC, ABC的六种情况。现在有一种方法可以将空值添加到INT以及mysql中的DATE。我试着像这样添加if else:

if($_POST['listA_doc_expiry'] ==""){$listA_doc_expiry = 'NULL' ; 
 $listA_id = 'NULL'; }
else{$listA_doc_expiry = $_POST['listA_doc_expiry'];
echo $listA_doc_expiry; }    

和QUERY:

$result = mysql_query("INSERT INTO hr_information(consultant_id, listA_doc_no, listB_doc_no, listC_doc_no, listA_doc_expiry, listB_doc_expiry,
 listC_doc_expiry, listA_id, listB_id, listC_id) VALUES('$consultant_id','$listA_doc_no','$listB_doc_no','$listC_doc_no','$listA_doc_expiry','$listB_doc_expiry','$listC_doc_expiry','$listA_id','$listB_id','$listC_id');") or die(mysql_error());

它给出了以下错误Incorrect date value: 'NULL' for column 'listB_doc_expiry' at row 1我应该如何在数据库中输入一个NULL日期值和INT。当我在查询中直接手动输入NULL(不带")时,它可以工作。P.S.我已经在创建数据库时将两者声明为NULL。

您正在尝试插入字符串'NULL',而不是NULL。您的VALUES部分中的引号导致NULL值出现问题。

更重要的是,您的代码非常容易受到SQL注入攻击。您不应该构造一个字符串来表示语句,然后自己将值放入字符串中,而应该使用一个准备好的语句,然后将值绑定到您引入的字段。关于如何做到这一点,有很多例子。

一个很好的奖励是,这也将摆脱你的'NULL'问题!

NULL不应该包含在'中,因为它是一个保留字。

您的查询结果类似于:

"INSERT INTO hr_information(... listA_doc_expiry, ... ) VALUES( ... 'NULL', ....

和字符串'NULL'对于日期或int列无效。