Beitrag von ole (26. Januar 2024 um 22:04 )
Dieser Beitrag wurde vom Autor gelöscht (24. Dezember 2025 um 02:06 ).
Hast du denn auch eine Fehlermeldung?
Und wie sieht $db aus? Denke mal es handelt sich da um PDO?
PS: Niemals Formularwerte (egal ob GET/POST) unbehandelt übernehmen, man weiß nie was da alles kommt.
Ich schreibe grade ein einfaches Tool für mein Restaurant wo ich die Temperaturen meiner Kühlungen speichern kann. Jetzt habe ich das Problem sobald ich die $comment mit einfüge in den Query das er das nicht mehr speichert. Die comment spalte in der Datenbank ist eine varchar(255) und sofern ich die abfrage so gestalte speichert er mir das auch:
Code$query = "INSERT INTO `haccp_temperatur` (`kid`, `time`, `temperatur`, `cleaned`, `comment`) VALUES ($kid, $time, $temperatur, $cleaned, '')";PHP Alles anzeigen// Daten aus Formular auslesen $kid = $_POST['kid']; $time = $_POST['time']; $temperatur = $_POST['temperatur']; $cleaned = $_POST['cleaned']; $comment = $_POST['comment']; // Abfrage vorbereiten $query = "INSERT INTO `haccp_temperatur` (`kid`, `time`, `temperatur`, `cleaned`, `comment`) VALUES ($kid, $time, $temperatur, $cleaned, $comment)"; // Abfrage ausführen $result = $db->query($query); // Erfolg ausgeben if ($result) { echo "Daten erfolgreich gespeichert!"; } else { echo "Fehler beim Speichern der Daten!"; }
Du musst die Übergebenen Parameter in ein Array Packen und dieses seperat übergeben. Ansonsten versucht MYSQL deine PHP Variablen einzufügen.
Also so:
$query = "INSERT INTO `haccp_temperatur` (`kid`, `time`, `temperatur`, `cleaned`, `comment`) VALUES (?, ?, ?, ?, ?)";
$result = $db->query($query, [$kid, $time, $temperatur, $cleaned, $comment]);
Jetzt werden in der Query die Platzhalter gesetzt und anschließend übermitteslt du die Parameter beim ausführen.
mysqli.... urgs. Ich war mal so frei und hab es dir hier mal als PDO umgeschrieben mit Error-Handling:
<?php
try {
// Verbindung zur Datenbank herstellen
$db = new PDO('mysql:host=localhost;dbname=***', '***', '***');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Daten aus Formular sichern
$kid = $_POST['kid'];
$time = $_POST['time'];
$temperatur = $_POST['temperatur'];
$cleaned = $_POST['cleaned'];
$comment = $_POST['comment'];
// Prepared Statement vorbereiten
$query = $db->prepare("INSERT INTO `haccp_temperatur` (`kid`, `time`, `temperatur`, `cleaned`, `comment`) VALUES (:kid, :time, :temperatur, :cleaned, :comment)");
// Parameter binden
$query->bindParam(':kid', $kid, PDO::PARAM_INT);
$query->bindParam(':time', $time, PDO::PARAM_STR);
$query->bindParam(':temperatur', $temperatur, PDO::PARAM_INT);
$query->bindParam(':cleaned', $cleaned, PDO::PARAM_INT);
$query->bindParam(':comment', $comment, PDO::PARAM_STR);
// Prepared Statement ausführen
$query->execute();
// Erfolg ausgeben
echo "Daten erfolgreich gespeichert!";
} catch (PDOException $e) {
// Fehler behandeln
echo "Fehler beim Speichern der Daten: " . $e->getMessage();
}
?>
Alles anzeigen
mysqli.... urgs. Ich war mal so frei und hab es dir hier mal als PDO umgeschrieben mit Error-Handling:
Was genau ist denn jetzt der Vorteil an PDO? Für kurze Querys ist es doch viel praktischer, wenn man alles in einer Zeile machen kann und nicht Prepare, Bind param und Execute nach einader ausführen muss.
Was genau ist denn jetzt der Vorteil an PDO?
Das was du nicht so magst offensichtlich, die Sicherheit.
Für kurze Querys ist es doch viel praktischer, wenn man alles in einer Zeile machen kann und nicht Prepare, Bind param und Execute nach einader ausführen muss.
Ach Einzeiler? Bitte sehr:
(new PDO('mysql:host=localhost;dbname=***', '***', '***'))->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)->prepare("INSERT INTO `haccp_temperatur` (`kid`, `time`, `temperatur`, `cleaned`, `comment`) VALUES (:kid, :time, :temperatur, :cleaned, :comment)")->execute([':kid'=>$_POST['kid'], ':time'=>$_POST['time'], ':temperatur'=>$_POST['temperatur'], ':cleaned'=>$_POST['cleaned'], ':comment'=>$_POST['comment']]);
Was meinst du mit "aber nur 5x"?
Dank dir jetzt speichert er es ab aber nur 5x
Wie sieht den deine Tabelle aus? Hast du vielleicht irgendwelche Unique Indexes gesetzt, sodass nur eine bestimmte Menge an Datensätzen eingefügt werden kann?
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!