首页 > 解决方案 > 尝试在表单提交时插入 NULL 日期但得到 00:00

问题描述

我试图在表单插入中允许 NULL 日期(对于永久类型禁令),但如果该字段留空,它会插入0000-00-00 00:00:00

BannedMembers表如下所示:

CREATE TABLE BannedMembers
(
 BanID         INT NOT NULL AUTO_INCREMENT,
 MemberID      INT NOT NULL ,
 WarningSent   BIT NOT NULL ,
 BannedDate    DATETIME NOT NULL ,
 BanDuration   DATETIME NULL ,

 PRIMARY KEY  (BanID),
 FOREIGN KEY (MemberID)
    REFERENCES Members(MemberID)
);

我想通过将持续时间保留为 NULL 来启用永久禁令,我的 HTML/PHP 脚本(删节):

<form method="post" name="banmember_form" id="banmember_form" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    Banned Until? (Leave empty for permanent)
    <input type="date" class="form-control" name="banmember_duration" id="banmember_duration" placeholder="dd/mm/yyyy">
    <button type="submit" name="addbannedmember_submit" id="addbannedmember_submit">Add</button>
</form>

<?php
if(isset($_POST["addbannedmember_submit"]))
{
    //Check if the duration is empty (for permanent bans)
    if (empty($_POST["banmember_duration"]))
    {
        $banDuration = NULL ;
    }
    else
    {
        $banDuration = $_POST["banmember_duration"];
    }
    $addBannedMemberSql = "INSERT INTO BannedMembers(MemberID, BannedDate, 
    BanDuration)
    VALUES (".$_POST["banmember_name"]."',NOW(),'$banDuration') ";
    $conn->exec($addBannedMemberSql);
    echo "<meta http-equiv='refresh' content='0'>";
    }
?>

从我读到的内容以及我能够找到的内容来看,上面的 NULL 被存储,''因此当它插入时它只是默认返回为00:00...etc. 我找不到如何解决它的答案,许多想法说要删除''s 而其他人说要包括它们,我尝试({$banDuration})了我的INSERT但同样的问题。

我不完全理解准备好的语句,因为我对此很陌生,并且希望有一种方法可以将 NULL 存储为空白实体,以便在用户留空时传递给数据库。

标签: phpmysqlpdo

解决方案


我能够通过更改我的变量来解决这个问题:

从:$banDuration = NULL ;$banDuration = "NULL" ;

我的 INSERT 声明来自:

VALUES (".$_POST["banmember_name"]."',NOW(),'$banDuration') ";

VALUES ('".$_POST["banmember_name"]."',NOW(), (".$banDuration.")) ";

结果:

|ID  |  Banned Date         |   Banned Until|
|502 |  2018-10-16 20:03:52 |   NULL        |

不确定这是否是最好的解决方法,但它解决了我的问题。


推荐阅读