kostenloser Webspace werbefrei: lima-city


Löschen aus MySQL-Tabelle

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    piratentaverne

    piratentaverne hat kostenlosen Webspace.

    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> &nbsp; $ausgabe[beitrag]&nbsp; <i>$ausgabe[zeit]</i><br><hr><br>");
    }
    echo "<input type=submit value=L&ouml;schen>&nbsp;";
    echo "<input type=reset  value=Zur&uuml;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&ouml;scht werden!<br><p><a href=../intern.php?page=beitrag>Zur&uuml;ck zur Beitragsseite</a>";
    }
    else 
    {
    echo"Der Beitrag konnte leider nicht gel&ouml;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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Den Fehler kann ich dir auf Anhieb nicht sagen, nur wie du ihn findest:
    Undzwar lohnt es sich
    $loesch = mysql_query($loeschen);
    durch
    $loesch = mysql_query($loeschen) OR die(mysql_error());
    zu ersetzen.
    Zudem solltest du wohl
    if ($loeschen == true)
    in
    if ($loesch == true)
    ändern ;)
  4. Autor dieses Themas

    piratentaverne

    piratentaverne hat kostenlosen Webspace.

    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!!
  5. 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.
  6. Autor dieses Themas

    piratentaverne

    piratentaverne hat kostenlosen Webspace.

    Funktioniert leider auch nicht! :(
  7. t*****b

    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> &nbsp;".$ausgabe["beitrag"]."&nbsp; <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)."'");
    }


  8. 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:
    <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&ouml;schen>&nbsp;";
    echo "<input type=reset  value=Zur&uuml;cksetzen>";
    ?>
    </form>
    Und Weiter dein 2. Codesegment:
    <?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&ouml;scht werden!<br><p><a href=../intern.php?page=beitrag>Zur&uuml;ck zur Beitragsseite</a>";
    }
    else 
    {
    echo"Der Beitrag konnte leider nicht gel&ouml;scht werden!";
    }
    ?>
    Damit sollte das eigentlich funktionieren

    Mit freundlichen Grüßen

    Beitrag zuletzt geändert: 23.1.2011 18:38:52 von nemoinho
  9. t*****b

    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.
  10. 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
  11. Autor dieses Themas

    piratentaverne

    piratentaverne hat kostenlosen Webspace.

    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
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!