如何在MySQL中将日期设置为空而不是注册

时间:2019-04-26 10:57:24

标签: php mysql

enter image description here我刚完成一个登录系统,并添加了另一个用于存储用户个人信息的表。因此,我有不需要的som输入。文本字段也不是问题,但是日期和数字字段存在问题: 由于不强制用户提供所有未填写的信息字段,因此应为NULL。但是,如果是日期,它总是给我注册,而如果是数字,它总是为0。

我把整个代码都给了你,因为我不确定最重要的是什么,但是我认为它的第9、10、14-21、73、76行

<?php

  $user_id = $_GET['id'];

  if(isset($_POST['add-personal-data'])){
    $geschlecht = $_POST['geschlecht'];
    $vorname = $_POST['vorname'];
    $nachname = $_POST['nachname'];
    $alter = $_POST['alter'];
    $input_date = $_POST['geburtsdatum'];
    $lieblingsziel = $_POST['lieblingsziel'];
    $beschreibung = $_POST['beschreibung'];

    if($input_date != null){
      $geburtsdatum = date("Y-m-d H:i:s",strtotime($input_date));
    } else {
      $geburtsdatum = NULL;
    }

    $beschreibung_statement = $pdo->prepare("INSERT INTO beschreibung (user_id, name, vorname, geschlecht, user_alter, geburtsdatum, lieblingsziel, beschreibung)
                                            VALUES ('$user_id', '$nachname', '$vorname', '$geschlecht', '$alter', '$geburtsdatum', '$lieblingsziel', '$beschreibung')");

    $user_control_statement = $pdo->prepare("SELECT * FROM user WHERE user_id = '$user_id'");
    $user_control_statement->execute();
    $user = $user_control_statement->fetch();

    if($user != NULL){

        $user_has_description_statement = $pdo->prepare("SELECT * FROM beschreibung WHERE user_id = '$user_id'");
        $user_has_description_statement->execute();
        $description = $user_has_description_statement->fetch();

        if($description == NULL){
          $beschreibung_statement->execute();
        } else {
          echo ('<div class="line fehler"><p> Dieser Benutzer besitzt bereits eine Beschreibung. </p></div>');
        }

    } else {
      echo ('<div class="line fehler"><p> Dieser Benutzer existiert nicht. </p></div>');
    }
  }

    echo $geschlecht . "<br>" . $vorname . "<br>" . $nachname . "<br>" . $alter . "<br>" . $geburtsdatum . "<br>" . $lieblingsziel . "<br>" . $beschreibung ;

?>
<main>
  <div class="line">

    <div class="register">

      <form method="post" action="?p=add-personal-data&id=<?php echo $user_id; ?>">

        <h2>Persönliche Daten</h2>
        <hr />
        <p>Daten, die du hier angibst, werden auf deinem Profil angezeigt.</p>

        <h4>Geschlecht</h4>
        <select name="geschlecht" class="datafield">
          <option>männlich</option>
          <option>weiblich</option>
          <option>anderes</option>
          <option selected>keine Angabe</option>
        </select>

        <h4>Vorname</h4>
        <input type="text" name="vorname" placeholder="Vorname" class="datafield" value="">

        <h4>Nachname</h4>
        <input type="text" name="nachname" placeholder="Nachname" class="datafield" value="">

        <h4>Alter</h4>
        <input type="number" name="alter" placeholder="Alter" class="datafield" value="">

        <h4>Geburtsdatum</h4>
        <input type="date" name="geburtsdatum" placeholder="Geburtsdatum" class="datafield" value="">

        <h4>Lieblingsziel</h4>
        <input type="text" name="lieblingsziel" placeholder="Lieblingsziel" class="datafield" value="">

        <h4>Beschreibung</h4>
        <textarea name="beschreibung" wrap="soft" class="datafield" rows="5" placeholder="Gib hier persönliche information, wie zum Beispiel Hobbies an."></textarea>

        <div>
          <input type="submit" name="add-personal-data" value="Speichern" class="submitbutton">
        </div>

      </form>
    </div>

  </div>
</main>

如果用户不提供任何信息,如何将NULL设置为“ geburtsdatum”和“ user_alter”?

4 个答案:

答案 0 :(得分:2)

将默认值设置为NULL,如果用户不提供任何信息,您也可以简单地插入NULL值。另外,如果将 DEFAULT 设置为 NULL ,那么您甚至不需要为其分配任何值。它将自动为其分配 NULL
您可以添加对 NULL 的插入查询,就像这样

INSERT INTO beschreibung (geburtsdatum, user_alter, ...) VALUES (NULL,NULL,...);

仍然,如果遇到问题,则需要转到phpmyadmin并通过选中此复选框将其允许为空

enter image description here

更新

正如Mangesh Sathe在评论部分中定义的那样,您需要将类型更改为 DATETIME TIMESTAMP 而不是date

答案 1 :(得分:0)

首先,在数据库中设置geburtsdatum列VarBUSANoLatelist = (VarBUSA1 + VarBUSA2 + VarBUSA3 + VarBUSA4) for Counter in VarBUSANoLatelist[0:20]: if VarBUSANoLatelist[Counter] < 0: VarBUSANoLate = VarBUSANoLate + 1 的默认值。现在,我认为如果对geburtsdatum使用两个查询字符串或同时使用两个查询字符串会更好。如果date为null,则不要将其插入查询中。

赞:

NULL

enter image description here

答案 2 :(得分:0)

这是准备以外的解决方案:

您将$geburtsdatum设置为字符串NULL,或将其设置为引用的日期(不仅是转义日期)。

if( $input_date != null ){
    $geburtsdatum = '"'.date("Y-m-d H:i:s",strtotime($input_date)).'"';
} else {
    $geburtsdatum = "NULL";
}

然后在VALUES()部分中编写不带引号的

VALUES ( ..., '$alter', $geburtsdatum, '$lieblingsziel', ... )

答案 3 :(得分:0)

如果您的geburtsdatum列已设置为接受NULL值,并且Default设置为NULL,则应该将db语句分成2个。

$geburtsdatum = date("Y-m-d H:i:s",strtotime($input_date));

if($input_date != null){
  $beschreibung_statement = $pdo->prepare("INSERT INTO beschreibung (user_id, name, vorname, geschlecht, user_alter, geburtsdatum, lieblingsziel, beschreibung)
                                        VALUES ('$user_id', '$nachname', '$vorname', '$geschlecht', '$alter', '$geburtsdatum', '$lieblingsziel', '$beschreibung')");

} else {
  //this statement will assign NULL into geburtsdatum field
  $beschreibung_statement = $pdo->prepare("INSERT INTO beschreibung (user_id, name, vorname, geschlecht, user_alter, lieblingsziel, beschreibung)
                                        VALUES ('$user_id', '$nachname', '$vorname', '$geschlecht', '$alter', '$lieblingsziel', '$beschreibung')");
}