代码之家  ›  专栏  ›  技术社区  ›  Ben

试图在表单提交时插入空日期,但得到00:00

  •  1
  • Ben  · 技术社区  · 8 年前

    我试图在表单插入中允许空日期(对于永久类型禁止),但是如果字段留空,它将插入 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)
    );
    

    <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'>";
        }
    ?>
    

    从我所读到的,以及我所能发现的,上面的空值被存储为 '' 所以当它插入时,它只是默认返回到 00:00...etc '' 当别人说要包括他们的时候,我试过了 ({$banDuration}) 在我的 INSERT

    2 回复  |  直到 8 年前
        1
  •  0
  •   A. Denis    8 年前

    尝试保存的“NULL”字符串有问题。

    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'>";
    }
    
        2
  •  0
  •   Ben    8 年前

    我可以通过更改变量来解决此问题:

    $banDuration = NULL ; 到 $banDuration = "NULL" ;

    我的插入声明来自:

    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        |
    

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