Beitrag per id aus der Datenbank löschen


Sullaysur

Mitglied
Hallo Forum, ich habe ein Probelm.

Ich würde gerne Beiträge über einen Button aus der Datenbank löschen können.
Dazu habe ich auch schon ein Script und Form erstellt, leider funktioniert das ganze nicht.
Hoffe mir kann jemand helfen.

Hier das Script:
PHP:
<?php
session_start();
if(isset($_POST['delete-submit'])){

    require 'dbh.inc.php';

    $id = $_POST['id'];
    
    $sql = "DELETE FROM article WHERE id=$id";
    header("Location: ../index.php?delete=success");
    exit();
}
else {
    header("Location: ../index.php");
    exit();
}
Hier das Form zum übergeben der id:
Code:
<td>
  <form action="includes/delete.inc.php" method="post">
    <input type="hidden" name="id" value="<?= htmlspecialchars($content->id, ENT_COMPAT, 'UTF8') ?>">
    <button type="submit" name="delete-submit">Löschen</button>
  </form>
</td>
 

basti1012

Erfahrenes Mitglied
Ist das alles ?
Ich vermisse sowas in der art
Code:
$id=mysqli_real_escape_string($mysqli,$_POST['id']);

$sqlkill="DELETE FROM article WHERE id='$id'";
       if(mysqli_query($mysqli, $sqlkill)){
                  echo "Eintrag  wurde erfolgreich aus aktiver Datebank entfernt";
       }else{
                 die("ERROR beim Löschen: ".mysqli_error($mysqli));   
      }
 

Sullaysur

Mitglied
Bitte PDO und kein real_escape_string mehr nutzen ;)
PDO war das mit den ? wenn ich richtig liege, oder nicht?

Und ich habe es jetzt nochmal damit überarbeitet, aber es geht immer noch nicht.
PHP:
<?php
session_start();
if(isset($_POST['delete-submit'])){

    require 'dbh.inc.php';

    $id = $_POST['id'];

    if(empty($id)){
        header("Location: ../index.php?error=emptyfields");
        exit();
    }
    else{
        $sql="DELETE FROM article WHERE id=?";
        $stmt = mysqli_stmt_init($conn);
        if(!mysqli_stmt_prepare($stmt, $sql)){
            header("Location: ../index.php?error=sqlerror");
            exit();
        }
        else {
            mysqli_stmt_bind_param($stmt, "s", $id);
            mysqli_stmt_execute($stmt);
            header("Location: ../index.php?delete=success");
            exit();
        }
    }
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}
else {
    header("Location: ../index.php");
    exit();
}
Ich bitte um schnelle Hilfe, da ich an dem Problem schon mehr als 2 Wochen sitze.
 

Yaslaw

n/a
Moderator
Im Gegensatz zum ersten Posting führst du auch was aus.

Bitte hilf uns weiter: "aber es geht immer noch nicht ". Was geht denn nicht? Totalabsturz des Systems?

Nachtrag:
mysqli_stmt_bind_param($stmt, "s", $id)
Ich denke, dass sollte i und nicht s sein. Die ID ist hoffentlich ein Integer und kein String
 

Sullaysur

Mitglied
Sobald ich auf den Button "Löschen" klicke, werde ich weitergeleitet und lande wie im Script festgelegt wieder im Dashboard, in der url Zeile steht auch ?delete=success, aber der Beitrag ist immer noch da, logischer weise ist er dann auch noch in der Datenbank vorhanden gewesen als ich nachgesehen habe.

Das mit dem s hatte ich noch übersehen, ist geändert, funktioniert dennoch nicht
 

Sullaysur

Mitglied
Ok, habe den Fehler endlich gefunden. Dennoch Danke für die Hilfe.
Code:
Kontrollausgabe:

$id =

Warning:  htmlspecialchars(): charset `UTF8' not supported, assuming utf-8 in G:\Sullaysur\Documents\xampp\htdocs\website\dashboard\index.php on line 184

3


(Zeile: 47 - G:\Sullaysur\Documents\xampp\htdocs\website\dashboard\includes\delete.inc.php)
 

ComFreek

Mod | @comfreek
Moderator
Jup, PHP erwartet es als UTF-8: PHP: htmlspecialchars - Manual.

Randnotiz: Egal welche Sprache ich verwende ich google auch echt jedes Mal, wie die jeweilige Sprache/Bibliothek "UTF8" erwartet. Ich finde da den Ansatz von Java sehr gut und zwar dass Zeichensätze i. Allg. Konstanten wie bei einem Enum sind ==> Mit IntelliSense ist dann das Problem in Luft aufgelöst.