Datensatz löschen geht nicht - was mache ich falsch?

nilox

Grünschnabel
Hallo an alle PHP - Hacker,

leider konnte ich mit den vorhandenen Foreneinträgen zum Thema keine passende
Lösung finden. Mein jetziges Problem übersteigt mein nicht so versiertes
Programmiererdenken.
Ich habe eine News - Seite angelegt, in der man Veranstaltungsinfos eintragen kann,
Datum und Titel der Veranstaltung, versteckt wird eine ID vergeben über auto inc...

Im Adminbereich wo man auch Einträge hinzufügen kann werden die Einträge
angezeigt, welche schon vorhanden sind. Nun wollte ich eine Löschfunktion
einbauen. Frage: Probiert habe ich es über Formular und Checkbox, Php in
Html LInk und komme nach stundenlangen Suchens in diversen Foren einfach
nicht weiter vielleicht kann mir jemand einen Tip geben was ich hier falsch mache:


Admintool Auszug des PHP Scripts:

PHP:
<table border="0" width="450" align="center">
    <?php include('src/dbconnect.php'); ?>
    <?php $db=mysql_connect($db_host,$db_user,$db_password); 
echo mysql_error(); 
mysql_select_db($db_datenbank, $db); 
echo mysql_error(); 
$sql='SELECT * FROM `news`; ';
$result=mysql_query($sql,$db); 
echo mysql_error(); 
while( $row=mysql_fetch_array($result) ) 
 { 
?>
    <tr valign="bottom"> 
      <td width="207" class="weiss_10px">Titel des Eintrags:</td>
      <td colspan="3" class="grau_10px"><a> 
        <?PHP echo $row['name']; ?>
        </a></td>
    </tr>
    <tr valign="bottom"> 
      <td width="207" class="weiss_10px">Eintrag erstellt:</td>
      <td colspan="3" class="grau_10px"><a> 
        <?php $timestamp = $row["zeit"];
$timestamp = sprintf("%02d.%02d.%04d %02d:%02d", substr($timestamp, 6, 2),
substr($timestamp, 4, 2), substr($timestamp, 0, 4), substr($timestamp, 8, 2), substr($timestamp, 10, 2));
print $timestamp;?>
        </a></td>
    </tr>
    <tr valign="bottom"> 
      <td width="207" class="weiss_10px"><a>Datum des Termins</a></td>
      <td colspan="3" class="grau_10px"><a> 
        <?PHP echo $row['tag']; ?>
        . 
        <?PHP echo $row['monat']; ?>
        | 
        <?PHP echo $row['jahr']; ?>
        </a></td>
    </tr>
    <tr valign="bottom"> 
      <td width="207" class="weiss_10px"><a> Infos zum Termin:</a></td>
      <td colspan="3" class="grau_10px">
        <?PHP echo $row['txt']; ?>
      </td>
    </tr>
    <tr valign="bottom"> 
      <td width="207" class="weiss_10px">&nbsp; 
<?PHP echo $row['id']; ?>
        <a href="delete.php?delete_id=ID">delete</a></td>
      <td colspan="3" class="link_10px">&nbsp;
    </tr>
    <tr valign="bottom"> 
      <td width="207" class="weiss_10px"></td>
      <td colspan="3" class="link_10px"></td>
    </tr>
    <tr valign="bottom"> 
      <td width="207" class="weiss_10px"></td>
      <td colspan="3" class="grau_10px"></td>
    </tr>
    <tr valign="top"> 
      <td colspan="4" class="grau_10px"> 
        <hr noshade>
      </td>
    </tr>
    <?PHP    }  ?>
  </table>

Die delete.php sieht so aus:

:confused:
PHP:
 <?php include('src/dbconnect.php');
$db=mysql_connect($db_host,$db_user,$db_password); 
echo mysql_error(); 
mysql_select_db($db_datenbank, $db); 
mysql_query('DELETE FROM `news` WHERE ID = '.$_GET['ID']);?>


Es wird nach dem klicken des Links einfach eine leere Seite angezeigt ohne
Fehlermeldung. Für einen Denkanstoß wäre ich euch sehr verbunden und wünsche
allen ein fröhliches Osterfest. C YA
 
Hi!

Sehe auf die Schnelle zwei Schwierigkeiten:
a) "delete.php?delete_id=ID" ...dort übergibst Du ja nicht die aktuelle ID ($row['ID']), sondern den String "ID"?!
-> echo "delete.php?delete_id=$row['ID']" ... ?
b) delete.php löscht den Eintrag, der über die Variable $_GET['ID'] übergeben wurde, Du übergibst aber "delete_id" (siehe a))
-> mysql_query('DELETE FROM `news` WHERE ID = '.$_GET['delete_id']);?> ... ?

Liebe Grüße,
Mark.

//edit: Alternativ:
a) echo "delete.php?ID=$row['ID']";
b) mysql_query('DELETE FROM `news` WHERE ID = '.$_GET['ID']);?> ;)
 
ok, erstmal Danke für die schnelle Reaktion. Habe das jetzt schon Mal verstanden das ich
die ID übergeben soll mit Get in die delete.php. wie kann ich aber das in dem Link "delete"
übergeben? habe folgendes versucht:

vorher:
PHP:
<a href="delete.php?delete_id=ID">delete</a>
nachher:
PHP:
<a href="delete.php?delete_id=$row['ID']">

leider klappt das nicht, liegt das evtl. daran das ID groß geschrieben ist aber in der Datenbank als id kleingeschrieben angelegt ist? Oder muss ich die Variable Get mit
einem Formular übergeben.? Oder ist schlicht der LInk von der Syntax falsch?
Mir qualmt der Kopf, Hochachtung gegenüber allen Programmieren, Hut ab.
Mfg... und Danke
 
Hi ho,
du darfst keine "Variablen" dinge in >'< setzen. Der interpretiert dies nicht sondern gibt es als text aus.

PHP:
echo "<a href='delete.php?delete_id=".$row[ID]."'>";

Übernehm mal das, dann müste es Funktionieren.


Sonnige Grüße,
cille

[EDIT]
Info zu z.B.: echo "Willkommen $name"; und echo 'Willkommen $name";
Wenn du z.B.: das normale Gänsefüßschen nimmst, interpretiert PHP die darin eingefügten Variablen.
Aber wenn du z.B.: dieses Gänsefüßschen ' nimmst, werden diese nich interpretiert.

Was passiert?
Statt die Funktion auszuführen, zeigt der Webserver im Klartext an. Kunstück, die Funktion wurde als String behandelt, als einfache Zeichenfolge. Und das ist natürlich Quatsch mit Soße, denn so kann sie nicht funktionieren. :)
 
Zuletzt bearbeitet:
Hi!

@cille: Aber ID ist doch kein Variables Ding!? $row['ID'] ist somit doch völlig korrekt, da ID ein String ist ... etwas anderes wäre es bei $row[$column]... ?

@nilox: ich weiß nicht, ob Du nicht einfach die unterschiedlichen Variablen-Namen unterschiedlich interpretierst:
Wenn Du mit "delete.php?delete_id=$row['ID']" die delete.php aufrufst, muß dort die ID mit $_GET['delete_id'] übernommen werden.
Schaue doch am besten zunächsteinmal, ob die richtige ID bei delete.php ankommt:
echo "Lösche $_GET['delete_id']";
...so siehst Du, ob überhaupt eine ID übergeben wurde. Wenn ja, kontrolliere Dein MySql-Statement ... z.B. auch einfach mal mit echo ausgeben: erscheint dort die richtige ID? ...usw... :)

Liebe Grüße,
Mark.

//edit: oh, sehe gerade, cille, Du meintest wahrscheinlich die gesamte echo-Anweisung und nicht nur $row[ID] ... da hast Du natürlich vollkommen recht :)
 
Thx für die Tips

Ich habe den Link jetzt abgeändert mit den Anführungszeichen und der ID als kleingeschriebener id schaut nun so aus:
PHP:
<?php echo "<a href='delete.php?id=".$row[id]."'>delete</a";?>

Leider löscht er den Eintrag immer noch nicht sondern zeigt statt dessen eine leere Seite an:
in der Browserleiste erscheint: http://www.internetseite.de/news/delete.php?id=5


Danke im Vorraus für die Mühe!

mfg nilox
 
Zuletzt bearbeitet:
Es wird... nur noch eine Statusmeldung fehlt

:) Danke Mark und Cille:)

mit der Kombination eurer Vorschläge und dank eurer Erklärungen war ich zwar erst verwirrt, dann hat es aber "klick" gemacht. Also die id muss ich wenn dann klein angeben, da sie in der Datenbank ja auch klein geschrieben angelegt ist. Jedenfalls klappt es nun und ich möchte mich nochmals bedanken.

Noch eines: Wie sage ich der delete.php nach dem Löschen das er wieder zurück soll zur Adminseite? Könnte das ja mittels Metatag-Weiterleitung nach ein par Sekunden machen, dazu müsste aber wenigstens eine Meldung erscheinen wie !Eintrag erfolgreich gelöscht! Irgendwelche Ideen?

frohe Ostern noch!

Ps: vielleicht kann ich euch beim nächsten Flash oder Photoshop Problem helfen (o:
 
du kannst einfach nach dem löschen query ein:
Code:
<script>document.location.href="form.php"</script>
einfügen.. gibt zwar schönere lösungen aber funktioniert
 
Es klappt!

thx an alle. echt klasse forum hier... projekt erfolgreich abgeschlossen!:)
PHP:
<script>document.location.href="form.php"</script>
klappt prima
Vielen Dank nochmals! C ya nilox:;-)
 
Zurück