Beitrag per id aus der Datenbank löschen


#1
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
#2
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));   
      }
 
#4
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
#5
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
 
#6
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
 
#7
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
#8
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.