PHP: Datum korrekt in Datenbank speichern?
Hey Leute, ich habe folgendes Problem: Ich möchte über ein Input mit dem Type date ein Datum abspeichern, dieses anschließend wieder auslesen und dann die übrigen Tage (also Tage bis zum Tag x) berechnen. Allerdings kommt folgender Fehler beim auslesen, und auch in der Datenbank steht das Datum nur als 0000-00-00:
Notice: A non well formed numeric value encountered in C:\xampp\htdocs\haushalt\tasks\index.php on line 47
Hier mein Code zum speichern des Inputswert:
require ("../.res/php/mysql.php");
$taskname = $_POST["title"];
$owner = $_POST["taskowner"];
$points = $_POST["points"];
$frist = strtotime($_POST["dateToDo"]);
$frist = date("d.m.Y", $frist);
$repeat = $_POST["repeat"];
$changedate = $_POST["change"];
//GET USERID
$stmt = $mysql->prepare("SELECT id FROM accounts WHERE username = :user");
$stmt->bindParam(":user", $owner);
$stmt->execute();
$count = $stmt->rowCount();
if($count == 1){
$row = $stmt->fetch();
$stmt = $mysql->prepare("INSERT INTO tasks (title, dateToDo, repeating, userid, changeAfterDays, points) VALUES (:title, :datedo, :repeating, :userid, :changeafter, :points)");
$stmt->bindParam(":title", $taskname);
$stmt->bindParam(":datedo", $frist);
$stmt->bindParam(":repeating", $repeat);
$stmt->bindParam(":userid", $row["id"]);
$stmt->bindParam(":changeafter", $changedate);
$stmt->bindParam(":points", $points);
$stmt->execute();
header("Location: ../tasks/");
}else{
$error = "Besitzer wurde nicht gefunden!";
}
Und hier mein Code zum auslesen (Line 47 ist dick gedruckt):
$ddate = $row["dateToDo"] - $date;
2 Antworten
Wenn die Spalte von mysql date ist, dann musst du dem beim Schreiben auch yyyy-mm-dd übergeben. Oder du schreibst im INSERT FROM_UNIXTIME(:todate) und übergibst den Timestamp. d.m.y geht nicht.
Beim Auslesen bekommst du auch yyyy-mm-dd zurück, keinen Timestamp. Wenn du den willst, kannst du im select UNIX_TIMESTAMP(todate) as todate verwenden (dann gib aber die restlichen Spalten auch an statt *).
require ("../.res/php/mysql.php");
$stmt = $mysql->prepare("SELECT * FROM tasks ORDER BY dateToDo DESC");
$stmt->execute();
$count = $stmt->rowCount();
if($count == 0){
?>
<tr>
<td>Derzeit keine Aufgaben</td>
<td></td>
<td></td>
<td></td>
</tr>
<?php
}else{
while($row = $stmt->fetch()){
$date = date("d.m.Y");
Z. 47 $ddate = $row["dateToDo"] - $date;
$stmt = $mysql->prepare("SELECT username FROM accounts WHERE id = :id");
$stmt->bindParam(":id", $row["userid"]);
$stmt->execute();
$user = $stmt->fetch();
$user = $user["username"];
?>
<tr>
<td><?php echo $row["title"];?></td>
<td><?php echo "Noch ".$ddate." Tage";?></td>
<td><?php echo $user;?></td>
<td><?php echo $row["points"]." Punkte";?></td>
<th><a href="../.res/php/doTask.php?id=<?php echo $row["id"];?>"class="check"><i class="far fa-check-square"></i></a></th>
<th><a href="../.res/php/deleteTask.php?id=<?php echo $row["id"];?>"class="delete"><i class="far fa-trash-alt"></i></a></th>
</tr>
<?php
}