[PHP] Gästebuch Eintrag löschen -> Eintragsid auslesen aus Link

03/29/2013 12:39 adistoe#1
Hallo zusammen

Ich habe ein Gästebuch, welches über eine MySQL Datenbank läuft.
Spalten: ID, Name, E-Mail, Nachricht

Nun möchte ich Einträge löschen können, dafür führt ein Link auf "guestbook-delete.php?id=?" Anstelle des ? steht die Eintragsid.

Nun meine Frage:
Wie kann ich aus dem Link die ?id=? auslesen und damit den richtigen Datensatz löschen?


Ich bedanke mich schonmal im Voraus für Antworten.

Mit freundlichen Grüssen
adistoe

PS: Die ID einfach anzeigen lassen im Dokument funktioniert mit <?php $row->ID; ?>, daher dachte ich mir, müsste auch mit dem Link so funktionieren :)

#edit: Zweite Frage hat sich schon erledigt, hab ein echo vergessen :)
03/29/2013 13:04 reCougar#2
Wenn ich es richtig verstanden habe einfach mit $_GET['id']; ansonsten hab ich die frage nicht gut verstanden.
03/29/2013 13:08 adistoe#3
Also ich hab z.B. den Link [Only registered and activated users can see links. Click Here To Register...]

Dann will ich aus dem Link die ID, im Beispiel 5, auslesen können und als mysql_query den Datensatz mit ID 5 löschen.

-> $loeschen = mysql_query("DELETE FROM links WHERE id = >>HIER DIE ID<<");

Wie finde ich die ID da raus?
03/29/2013 13:09 Mikesch01#4
PHP Code:
<?php

mysql_connect
(...); //Verbindung aufbauen, mit benötigten Daten
mysql_select_db(...); //Datenbank verbinden

$qryUser mysql_query("SELECT ID FROM tabelleGaestebuch WHERE ID = '".$row->ID."'");
$rowUser mysql_fetch_object($qryUser);

if(
$rowUser->ID == $row->ID) {
  
mysql_query("DELETE FROM tabelleGaestebuch WHERE ID = '".$rowUser->ID."'"); //Benutzereintrag löschen anhand der ID
  
echo "Eintrag wurde erfolgreich gelöscht.";
}
else {
  echo 
"Eintrag konnte nicht gelöscht werden.";
}
?>
Jetzt bleibt noch die Frage, woher du $row->ID hast, denn da müsstest du ja bereits schon einmal nach dem Benutzer gefragt haben (in welcher Weise auch immer).

p.s du musst natürlich im Code die Daten noch eingeben und den Tabellennamen noch richtig ersetzen.
03/29/2013 13:17 adistoe#5
PHP Code:
      while ($row = mysql_fetch_object($queryResult))
      {
        ?>
        <table border="1" width="60%">
        <tr><td><a href="guestbook-edit.php">Eintrag bearbeiten</a> | [B]<a href="guestbook-delete.php?id=<?php echo $row->ID?>">Eintrag löschen</a><br>[/B]
        E-Mail des Autors: <?PHP echo $row->EMAIL?><br>
        ID: #<?PHP echo $row->ID?></td></tr>
        <tr><td><?php echo $row->VON?> hat am <?php echo $row->DATUM?> geschrieben:</td></tr>
        <tr><td><?php echo nl2br($row->NACHRICHT); ?></td></tr>
        </table><br>
        <?php
      
}
      
mysql_free_result($queryResult);
      
$countResult mysql_query("SELECT count(*) as `COUNT` FROM `GUESTBOOK`");
      if(!
$countResult)
      {
        die(
'Anzahl der Einträge konnte nicht gelesen werden: ' mysql_error());
      }
      
$count mysql_fetch_object($countResult);
      for(
$i=0$i<=($count->COUNT/$numMessages);$i++)
      {
        echo 
'<a href="guestbook.php?page='.$i.'">'.($i+1).'</a>';
      }
So werden die Einträge aufgelistet.

Wie im Code erkennbar wird man bei Klick auf Eintrag löschen auf guestbook-delete.php?id=>>ID!!!<< weitergeleitet.

Und daraus soll PHP jetzt wissen, dass er den Datensatz mit der id >>ID!!!<< löschen soll.

Inhalt der guestbook-delete.php:
PHP Code:
<?php
      
include ("../scripts/php/inc/db-guestbook-connect.php");
      
$loeschen mysql_query("DELETE FROM guestbook WHERE id = $_GET['ID']");

      if(!
$loeschen)
      {
        echo 
"Der Eintrag konnte nicht gelöscht werden! Bitte versuchen Sie es erneut!";
        }
        else
        {
        echo 
"Der Eintrag wurde erfolgreich gelöscht!";
      }
?>
include ("../scripts/php/inc/db-guestbook-connect.php");
ist btw. die Connection zur Datenbank (sollte erkennbar sein am Namen :) )

#edit: Fehlerhafte Zeile: $loeschen = mysql_query("DELETE FROM guestbook WHERE ID = $_GET['ID']");
03/29/2013 13:23 Mikesch01#6
PHP Code:
 <?php

include ("../scripts/php/inc/db-guestbook-connect.php"); 

$id htmlentities($_GET['ID']);

$qryUser mysql_query("SELECT ID FROM GUESTBOOK WHERE ID = '".$id."'");
$rowUser mysql_fetch_object($qryUser);

if(
$rowUser->ID == $id) {
  
$qry mysql_query("DELETE FROM GUESTBOOK WHERE ID = '".$rowUser->ID."'");

  if(
$qry) {
    echo 
"Eintrag wurde erfolgreich gelöscht.";
  }
  else {
    echo 
"Eintrag konnte nicht gelöscht werden.";
  }
}
?>
Eigentlich war dein Script ja in Ordnung bis auf einige formale Fehler. Sicherheitschecks immer einbauen ;)
03/29/2013 13:26 disortion#7
Du musst die ID-Variable auch erstmal in der Datei deklarieren.

EDIT:Ok wurde eben behoben von Mike ^^.
03/29/2013 13:27 adistoe#8
Jetzt kommt folgendes raus:
Code:
Notice: Undefined index: ID in K:\Program Files (x86)\xampp\htdocs\admin\guestbook-delete.php on line 64

Notice: Trying to get property of non-object in K:\Program Files (x86)\xampp\htdocs\admin\guestbook-delete.php on line 68

Notice: Trying to get property of non-object in K:\Program Files (x86)\xampp\htdocs\admin\guestbook-delete.php on line 69
 Eintrag wurde erfolgreich gelöscht!
Und der Eintrag bleibt vorhanden.
03/29/2013 13:28 Mikesch01#9
Was ist denn hier Line 64? So weit hab ich gar nicht gescriptet :D

//edit: sehe den Fehler..ID muss natürlich id sein (Kleingeschrieben)

PHP Code:
 <?php

include ("../scripts/php/inc/db-guestbook-connect.php"); 

$id htmlentities($_GET['id']);

$qryUser mysql_query("SELECT ID FROM GUESTBOOK WHERE ID = '".$id."'");
$rowUser mysql_fetch_object($qryUser);

if(
$rowUser->ID == $id) {
  
$qry mysql_query("DELETE FROM GUESTBOOK WHERE ID = '".$rowUser->ID."'");

  if(
$qry) {
    echo 
"Eintrag wurde erfolgreich gelöscht.";
  }
  else {
    echo 
"Eintrag konnte nicht gelöscht werden.";
  }
}
?>
03/29/2013 13:30 adistoe#10
PHP Code:
62: <?php
63
: include ("../scripts/php/inc/db-guestbook-connect.php"); 
64$id htmlentities($_GET['ID']);
65$qryUser mysql_query("SELECT ID FROM guestbook WHERE ID = '".$id."'");
66$rowUser mysql_fetch_object($qryUser);
67
68: if($rowUser->ID == $id) {
69:   mysql_query("DELETE FROM GUESTBOOK WHERE ID = '".$rowUser->ID."'");
70:   echo "Eintrag wurde erfolgreich gelöscht!";
71: }
72: else {
73:   echo "Eintrag konnte nicht gelöscht werden!";
74: }
75?>
#edit: Scheiss Gross- & Kleinschreibung^^
Funktioniert nun einwandfrei, danke sehr :)