我正在尝试在表单插入中允许使用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)
);
我想通过将HTML / PHP脚本的持续时间保留为NULL来启用永久性禁令(删节):
<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
。我找不到解决方法的答案,许多想法都说要删除''
,而另一些想法则说要包括它们,我在({$banDuration})
中尝试了INSERT
,但问题相同。
由于我不是一个新手,所以我不完全理解准备好的语句,并希望有一种方法可以将NULL作为空白实体存储,如果用户将其留空,则可以将其传递给DB。
答案 0 :(得分:0)
您尝试保存的'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'>";
}
答案 1 :(得分:0)
我能够通过更改变量来解决此问题:
从:$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 |
不确定这是否是最好的解决方法,但它解决了我的问题。