Wie kann der eingegebene Eintrag nach Bestätigung in die Datenbank gespeichert werden?
Hallo,
mit folgendem Code scheint es nicht zu funktionieren, dass die Eingabe nach Bestätigungsfrage nicht in der Datenbank aktualisiert. Warum? Bin neu in PHP
Danke!
if ($name_select && $name_select !== $_POST["name"]) {
// Meldung ausgeben, dass bereits ein Eintrag vorhanden ist
echo "Es ist bereits ein Eintrag in der Spalte $column_name vorhanden. Möchten Sie den Eintrag wirklich überschreiben?";
echo "<form action='putzgruppen.php' method='post'>";
echo "<input type='hidden' name='name' value='" . $_POST["name"] . "'>";
echo "<input type='hidden' name='column_name' value='" . $column_name . "'>";
echo "<input type='submit' name='confirm' value='Ja'>";
echo "<input type='submit' name='cancel' value='Nein'>";
echo "</form>";
} else {
if ($count == 0) {
// Einfügen des Namens in die Datenbank
$name = $_POST["name"];
$sql = "INSERT INTO Putzgruppe ($column_name) VALUES ('$name')";
if (mysqli_query($conn, $sql)) {
echo "Daten erfolgreich gespeichert.";
header("Location: putzgruppen.php"); // Weiterleitung zur Datenbankseite
exit(); // Beenden des Skripts, um ein weiteres Ausführen zu verhindern
} else {
echo "Fehler: " . $sql . "<br>" . mysqli_error($conn);
}
} else {
if(isset($_POST['confirm'])) {
// Aktualisierung des bestehenden Eintrags
$name = $_POST["name"];
$column_name = $_POST["column_name"];
$sql = "UPDATE Putzgruppe SET $column_name='$name' WHERE $column_name='$name_select'";
if (mysqli_query($conn, $sql)) {
echo "Daten erfolgreich aktualisiert.";
header("Location: putzgruppen.php"); // Weiterleitung zur Datenbankseite
exit(); // Beenden des Skripts, um ein weiteres Ausführen zu verhindern
} else {
echo "Fehler: " . $sql . "<br>" . mysqli_error($conn);
}
}
}
}
} else {
echo "Das Eingabefeld ist leer.";
}
1 Antwort
Zuerst einmal solltest du prüfen, ob der Programmfluss in deinem Anwendungsfall überhaupt bis in den Körper der Kontrollstruktur
if (isset($_POST['confirm'])) {
kommt. Das lässt sich leicht mit echo-Ausgaben prüfen.
Wenn ja, müsste die SQL-Anweisung genauer betrachtet werden. Lass dir am besten die $sql-Variable ausgeben.
Der von dir gewählte Weg, wie du SQL-Anfragen aufbaust, ist übrigens unsicher, denn du prüfst die Werte, die du von außen erhältst, überhaupt nicht. Das bedeutet ein Nutzer könnte beispielsweise in das Eingabefeld für den Namen eigene SQL-Anweisungen einfügen, die von deinem Skript in die SQL-Anfrage eingebaut und dann von dem DBMS ausgeführt werden.
Nutze stattdessen Prepared Statements (alternatives Tutorial) und füge auch eine inhaltliche Validation hinzu. Wenn ein Nutzer vor Formularversand zum Beispiel den Spaltennamen ändert, kann er leicht einen Anwendungsfehler provozieren.