CRUD i PHP - Problem att få Update att fungera

Permalänk
Medlem

CRUD i PHP - Problem att få Update att fungera

hej håller på skapa en databas som man kan lägga in filmer, ta bort och redigera. Jag är en nybörjare och kan inte så mycket jag har tagit hjälp av chatt gpt för att skriva delar av koden det ända problemet jag har just nu är att jag inte fattar varför det inte går att redigera filmerna i databasen allt annat funkar jag skickar koden så kanske någon kan hjälpa mig

<!DOCTYPE html> <html> <head> <title>Filmdatabas</title> <style> /* Dina tidigare stilmallar */ </style> </head> <body> <h1>Film<h2>Lägg till / Redigera film</h2> <form method="post" action="film_bibliotek.php"> <input type="hidden" name="id" value="<?php echo isset($id) ? $id : ''; ?>"> <p> <label for="titel">Titel:</label> <input type="text" id="titel" name="titel" value="<?php echo isset($titel) ? $titel : ''; ?>" </p> <p> <label for="ar">År:</label> <input type="text" id="ar" name="ar" value="<?php echo isset($ar) ? $ar : ''; ?>" </p> <p> <label for="regissor">Regissör:</label> <input type="text" id="regissor" name="regissor" value="<?php echo isset($regissor) ? $regissor : ''; ?>" </p> <p> <label for="kategori">Kategori:</label> <select id="kategori" name="kategori"> <<option value="Drama"<?php if ($condition) { echo ' selected'; } ?>>Drama</option> <option value="Action"<?php if ($condition) { echo ' selected'; } ?>>Action</option> <option value="Komedi"<?php if ($condition) { echo ' selected'; } ?>>Komedi</option> <option value="Skräck"<?php if ($condition) { echo ' selected'; } ?>>Skräck</option> <option value="Dokumentär"<?php if ($kategori == 'Dokumentär') {echo ' selected';} ?>>Dokumentär</option> </select> </p> <input type="hidden" name="edit_link" value="<?php echo isset($edit_link) ? $edit_link : ''; ?>"> <input type="submit" value="Lägg till"> </form> <h2>Filmer i databasen</h2> <table> <!-- Din tidigare kod för att visa filmer --> </table> <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // Anslut till databasen $servername = "localhost"; $username = "root"; $password = "mysql"; $dbname = "mysql"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // Hämta information om filmen som ska redigeras if (isset($_GET["id"])) { $id = $_GET["id"]; $sql = "SELECT * FROM film WHERE id='$id'"; $result = $conn->query($sql); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $titel = $row["titel"]; $ar = $row["ar"]; $regissor = $row["regissor"]; $kategori = $row["kategori"]; } else { $titel = ""; $ar = ""; $regissor = ""; $kategori = ""; } } else { $titel = ""; $ar = ""; $regissor = ""; $kategori = ""; } // Lägg till eller uppdatera film if ($_SERVER["REQUEST_METHOD"] == "POST") { $id = $_POST["id"]; $titel = $_POST["titel"]; $ar = $_POST["ar"]; $regissor = $_POST["regissor"]; $kategori = $_POST["kategori"]; if ($id == "") { // Lägg till ny film $sql = "INSERT INTO film (titel, ar, regissor, kategori) VALUES ('$titel', '$ar', '$regissor', '$kategori')"; if ($conn->query($sql) === TRUE) { $edit_link = mysqli_insert_id($conn); echo "Filmen har lagts till i databasen."; } } else { // Uppdatera befintlig film $sql = "UPDATE film SET titel='$titel', ar='$ar', regissor='$regissor', kategori='$kategori' WHERE id='$id'"; if ($conn->query($sql) === TRUE) { echo "Filmen har uppdaterats."; } } } // Lägg till kolumnen "kategori" om den inte finns $sql = "ALTER TABLE film ADD kategori VARCHAR(50)"; $conn->query($sql); // Ta bort film if (isset($_GET["id"])) { $id = $_GET["id"]; $sql = "DELETE FROM film WHERE id=$id"; $conn->query($sql); } // Hämta filmer från databasen $sql = "SELECT * FROM film"; $result = $conn->query($sql); // Visa filmer i tabell if ($result->num_rows > 0) { echo "<table>"; echo "<tr><th>Titel</th><th>År</th><th>Regissör</th><th>Kategori</th><th>Redigera</th><th>Ta bort</th></tr>"; while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row["titel"] . "</td>"; echo "<td>" . $row["ar"] . "</td>"; echo "<td>" . $row["regissor"] . "</td>"; echo "<td>" . $row["kategori"] . "</td>"; echo "<td><a href='?edit_link=" . $row["id"] . "'>Redigera</a></td>"; // Här är den uppdaterade länken för att redigera en film. echo "<td><a href='?id=" . $row["id"] . "'>Ta bort</a></td>"; echo "</tr>"; } echo "</table>"; } else { echo "Inga filmer i databasen."; } // Stäng databasanslutningen $conn->close(); ?> </body> </html>

Permalänk

Det är samma php-sida (film_bibliotek.php) som laddas om? Då PHP körs på serversidan för att sedan skicka dig ren HTML-kod så skulle jag rekommendera att ha själva DB-koden i början av HTML-koden så den kan köra all logik (kolla om något lagts till/ändrats/tagits bort) så att den alltid renderar ut rätt antal filmer.

Möjligen är det smidigare att initiera DB-anslutning i början av sidan och sedan köra de olika CRUD-anropen till databasen där de hör hemma på sidan. Exempelvis kör du DB-anropet som bara hämtar och skriver ut data i `<table>`-elementet.

Jag gissar på att du behöver kolla efter edit_link i $_GET som ett sätt att kolla om klickade på redigeringslänken för en film och sedan då kan du hämta dess $id vilket då kommer direkt efter `?edit_link=`

// Klickade på någon redigeringslänk? if (isset($_GET["edit_link"])) { // Lagra dess id-värde $id = $_GET["edit_link"]; // SQL-kod här för UPDATE }

Möjligen kanske du vill ändra vad knappen för "Lägg till" heter då så det står "Ändra" där för att veta vad som hänt (en if-sats beroende på om `$_GET["edit_link"]` finns, alltså en redigeringslänk klickades på) med webbplatsen eftersom den laddas om när du klickar på en redigeringslänk utan att något annat uppenbart har förändrats.

Om du skapar detta i utbildningssyfte och inte i hobbysyfte, så skapa vanan att sanera inmatningsdata så ingen skadlig kod lagras som exempelvis `DROP Table;`

Mvh,
WKL.

Visa signatur

(V)ulnerabilities
(I)n
(B)asically
(E)verything
Programming