我刚完成一个登录系统,并添加了另一个用于存储用户个人信息的表。因此,我有不需要的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”?
答案 0 :(得分:2)
将默认值设置为NULL
,如果用户不提供任何信息,您也可以简单地插入NULL
值。另外,如果将 DEFAULT
设置为 NULL
,那么您甚至不需要为其分配任何值。它将自动为其分配 NULL
您可以添加对 NULL
的插入查询,就像这样
INSERT INTO beschreibung (geburtsdatum, user_alter, ...) VALUES (NULL,NULL,...);
仍然,如果遇到问题,则需要转到phpmyadmin并通过选中此复选框将其允许为空
更新
正如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
答案 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')");
}