Delete/Insert/Update/Search, altmodisch gelöst? Verbesserungsvorschläge?
Mehrere Formularfunktionen in PHP:
Delete:
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["kunden_id"])) {
$kunden_id = $_POST["kunden_id"];
$sql = "DELETE FROM kunden WHERE kunden_id=$kunden_id";
if ($conn->query($sql) === TRUE) {
echo "Record deleted successfully";
}
else {
echo "Error deleting record: " . $conn->error;
}
}
$conn->close();
?>
Insert:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$vname = $conn->real_escape_string($_POST['vname']);
$nname = $conn->real_escape_string($_POST['nname']);
$age = $conn->real_escape_string($_POST['age']);
$sql = "INSERT INTO kunden (vname, nname, age) VALUES ('$vname', '$nname', '$age')";
if ($conn->query($sql) === TRUE) {
echo "Neuer Kunde erfolgreich hinzugefügt";
}
else {
echo "Fehler: " . $sql . "<br>" . $conn->error;
}
}
$conn->close();
?>
Update:
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["kunden_id"]) && isset($_POST["vname"]) && isset($_POST["nname"]) && isset($_POST["age"])) {
// Kunden-ID und neue Daten aus dem Formular abrufen
$kunden_id = $_POST["kunden_id"];
$vname = $_POST["vname"];
$nname = $_POST["nname"];
$age = $_POST["age"];
// SQL-Update-Statement vorbereiten
$sql = "UPDATE kunden SET vname='$vname', nname='$nname', age='$age' WHERE kunden_id=$kunden_id";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
}
else {
echo "Error updating record: " . $conn->error;
}
}
$conn->close();
?>
Search:
if (isset($_POST['search'])) {
$search = $_POST['search'];
$sql = "SELECT kunden_id, vname, nname, age FROM kunden WHERE nname LIKE '%$search%' ORDER BY kunden_id";
}
else {
$sql = "SELECT kunden_id, vname, nname, age FROM kunden ORDER BY kunden_id";
}
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table border='1'>
<tr>
<th>Kunden ID</th>
<th>Vorname</th>
<th>Nachname</th>
<th>Alter</th>
</tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr>
<td>" . $row["kunden_id"]. "</td>
<td>" . $row["vname"]. " </td>
<td>" . $row["nname"]. "</td>
<td>" . $row["age"]. "</td>
</tr>";
}
echo "</table>";
}
else {
echo "0 Ergebnisse";
}
$conn->close();
?>
<form method="post">
<input type="text" name="search" placeholder="Nachname eingeben...">
<button type="submit">Suchen</button>
</form>
2 Antworten
1) Die Prüfung der Request-Methode ist redundant, wenn du eh die Existenz des kunden_id-Parameters prüfst.
2) Du brauchst die Datenbankverbindung nicht explizit schließen. Das passiert nach Beendigung des PHP-Skripts sowieso.
3) Berücksichtige auch hier die Punkte (1, 3, 4, 5, 8, 9), die ich dir bereits in diesem Beitrag schrieb. Die real_escape_string-Methode is dann auch redundant. Ich würde stets ein Prepared Statement vorziehen, da das all das, was notwendig ist, schon von sich aus tut.
4) Das Ergebnis einer Aktion würde ich unter dem Formular ausgeben lassen, nicht darüber. Immerhin wäre das die Erwartungshaltung eines Nutzers.
5) Ordne dem Eingabefeld ein Label zu. Das placeholder-Attribut nimmt diese Rolle nicht ein.
HTML:
<label for="searchword">Nachname:</label>
<input id="searchword" name="search" placeholder="Nachname eingeben...">
Wenn das Label visuell unbedingt versteckt sein soll, kannst du eine CSS-Regel ergänzen:
.visually-hidden {
clip: rect(0 0 0 0);
clip-path: inset(50%);
height: 1px;
overflow: hidden;
position: absolute;
white-space: nowrap;
width: 1px;
}
Niemals solltest du Benutzereingaben direkt in SQL-Abfragestrings einbauen, sonst droht das hier:
Für sowas gibt es Parameterabfragen ("prepared statements"):
https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php