Попытка вставить нулевую дату при отправке формы, но получение 00:00 - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь разрешить ввод значений 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 как пустую сущность для передачи в БД, если он оставлен пустым пользователем.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Мне удалось решить эту проблему, изменив мою переменную:

С: $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        |

Не уверен, что это лучшее решение, но это решило мою проблему.

0 голосов
/ 16 октября 2018

Проблема со строкой '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'>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...