Löschen aus MySQL-Tabelle
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktuellen benutzers
anhieb
aufgefallen
aufnehmen
ausgabe
bedingung
birne
code
einwand
ersetzen
fehler
funktionieren
nennen
parameter
problem
sagen
sinn
syntax
tor
unterschied
-
Mein Problem ist jetzt, dass
<form action="delete_abfrage.php" method="post"> <?php include("connect.php"); include("checkuser.php"); $nickname = $_SESSION['user_nickname']; $query = " SELECT nickname, beitrag, zeit FROM comment WHERE nickname = '$nickname'"; $result = mysql_query($query) or exit(mysql_error()); while ($ausgabe = mysql_fetch_array ($result)) { print ("<input type=checkbox name=comment class=check><font color=red>$ausgabe[nickname]</font> $ausgabe[beitrag] <i>$ausgabe[zeit]</i><br><hr><br>"); } echo "<input type=submit value=Löschen> "; echo "<input type=reset value=Zurücksetzen>"; ?> </form>
Und delete_abfrage.php
<?php include("connect.php"); include("checkuser.php"); $loeschen = "DELETE FROM comment WHERE id = '".$_POST['comment']."'"; $loesch = mysql_query($loeschen); if ($loeschen == true) { echo"Der Beitrag konnte erfolgreich gelöscht werden!<br><p><a href=../intern.php?page=beitrag>Zurück zur Beitragsseite</a>"; } else { echo"Der Beitrag konnte leider nicht gelöscht werden!"; } ?>
Es zeigt zwar an "Beitrag gelöscht", aber es passiert nichts! Was ist daran falsch?
Beitrag zuletzt geändert: 23.1.2011 15:44:37 von piratentaverne -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Naja es löscht zwar was aber nicht sichtlich!! Vielleicht ist das SELECT id das Problem, da er ja nur die ausgewählten Beiträge des aktuellen Benutzers löschen soll!!
-
Du gibst einen Nickname weiter und tust dann so, als wäre der Nickname die ID. Du musst in der Bedingung "id" durch "nickname" ersetzen.
-
Funktioniert leider auch nicht! :(
-
Beachte, was für einen Wert du bei den Checkboxen (alle mit dem Name "comment") erhältst. Ich denke, das ist nicht das gewünschte Ergebnis. Du könntest die Checkboxen "comment[]" nennen und dann als value die ID übergeben:
print ("<input type=\"checkbox\" name=\"comment[]\" class=\"check\" value=\".$ausgabe["id"].\"><font color=red>".$ausgabe["nickname"]</font> ".$ausgabe["beitrag"]." <i>".$ausgabe["zeit"]."</i><br><hr><br>");
Beachte hier, dass du im SQL (Select) noch die id aufnehmen musst!
Dann kannst du dir deinen Query zusammenbasteln:
$zu_loeschen = $_POST["comment"]; // Das ist der Array mit den IDs die du löschen möchtest foreach($zu_loeschen AS $id => $wert) { mysql_query("DELETE FROM comment WHERE id = '".mysql_real_escape_string($wert)."'"); }
-
Dein Code ist einfach nur unsinnig, da du Äpfel mit Birnen vergleichst, außerdem öffnest du Tür und Tor für eine SQL-Injection…
Ich hab den Code mal etwas abgeändert, vergleich den mal:
Und Weiter dein 2. Codesegment:<form action="delete_abfrage.php" method="post"> <?php include("connect.php"); include("checkuser.php"); $nickname = $_SESSION['user_nickname']; $query = mysql_real_escape_string(" SELECT nickname, beitrag, zeit FROM comment WHERE nickname = '$nickname';"); $result = mysql_query($query) or exit(mysql_error()); while ($ausgabe = mysql_fetch_array ($result)) { echo '<input type="checkbox" name="comment" class="check" value="'.$ausgabe['nickname'].'" /> <span style="color:red">'.$ausgabe['nickname']."</span> ". $ausgabe['beitrag'].' <i>'.$ausgabe['zeit'].'</i><br /><hr /><br />'; } echo "<input type=submit value=Löschen> "; echo "<input type=reset value=Zurücksetzen>"; ?> </form>
Damit sollte das eigentlich funktionieren…<?php include("connect.php"); include("checkuser.php"); $loeschen = "DELETE FROM comment WHERE nickname = '". mysql_real_escape_string($_POST['comment'])."';"; $loesch = mysql_query($loeschen); if ($loesch == true) { echo"Der Beitrag konnte erfolgreich gelöscht werden!<br><p><a href=../intern.php?page=beitrag>Zurück zur Beitragsseite</a>"; } else { echo"Der Beitrag konnte leider nicht gelöscht werden!"; } ?>
Mit freundlichen Grüßen
Beitrag zuletzt geändert: 23.1.2011 18:38:52 von nemoinho -
nemoinho schrieb:
Dein Code ist einfach nur unsinnig, da du Äpfel mit Birnen vergleichst, außerdem öffnest du Tür und Tor für eine SQL-Injection…
Damit sollte das eigentlich funktionieren…
Wieso ist mein Code offen für Injections? Ich überprüfe genauso den Parameter über mysql_real_escape_string.
Der Unterschied zw. meinem und deinem Code ist, dass bei meinem nur die Beiträge gelöscht werden, die abgehakt sind (Checkboxen). Bei deinem werden alle Beiträge von dem User gelöscht, was sicher nicht im Sinn des Threaderstellers liegt. -
trueweb schrieb:
nemoinho schrieb:
Dein Code ist einfach nur unsinnig, da du Äpfel mit Birnen vergleichst, außerdem öffnest du Tür und Tor für eine SQL-Injection…
Damit sollte das eigentlich funktionieren…
Wieso ist mein Code offen für Injections? Ich überprüfe genauso den Parameter über mysql_real_escape_string.
Der Unterschied zw. meinem und deinem Code ist, dass bei meinem nur die Beiträge gelöscht werden, die abgehakt sind (Checkboxen). Bei deinem werden alle Beiträge von dem User gelöscht, was sicher nicht im Sinn des Threaderstellers liegt.
Da liegt wohl ein kleines Missverständnis vor, ich meinte nicht dein Codesegment, sondern das des Threadschreibers… und da wird tatsächlich nichts geprüft.
Das mit der ID oder jedem anderen Primary Key stimmt schon, aber @piratentaverne hat danach nicht gefragt, darum habe ich mich darum nicht gekümmert, aber du hast Recht, da mache ich einen Fehler. Außerdem fürchte ich, dass ich deinen Beitrag übergangen habe, ansonsten wäre mir aufgefallen, dass dort bereits alles steht, was relevant ist und ich hätte meinen Einwand nicht geschrieben.
Mit freundlichen Grüßen -
jetzt ist allerdings das Problem: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\n SELECT\n nickname,\n beitrag,\n zeit\n FROM \n ' at line 1
Wieso funzt das jetzt nicht?
Beitrag zuletzt geändert: 27.1.2011 14:11:59 von piratentaverne -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage