1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Delete aus Datenbank mit PHP ?

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Applefan88, 14.11.06.

  1. Applefan88

    Applefan88 Gast

    Hallo Apfeltalker,
    ich habe folgendes Problem, ich habe eine Seite mit RSS Feeds, die aus einer Datenbank ausgelesen werden. Auf meiner PHP Seite werden dann alle Feeds mit ID, titel usw. ausgelesen und angezeigt.
    Nun möchte ich dahinter einen Link setzen mit einem Bild (z.B. ein Kreuz). Wenn man nun auf den Link klickt, soll der Feed aus der Datenbank gelöscht werden. Den Link mit Bild habe ich aber wie kann man das realiseren das er weiß welchen Link ich meine?

    Hier ist mein Code:

    Code:
    
    <?php
    
    $daba = mysql_connect("localhost","root","");
    $db = mysql_select_db("rss");
    
    $sql= "SELECT * FROM feeds";
    $result = mysql_query($sql) OR die(mysql_error());
    while($row = mysql_fetch_assoc($result)) { 
    
    $feeddaten = array ($row['Id'],
                        $row['titel'],
                        $row['feed'],
                        $row['kategorie']);
                        
    utf8_decode($feeddaten);                    
    
    ?>
    
    
    
    <tr>
    <td><?php echo '<div class="copy">'. $feeddaten[0] . '</div>'; ?></td>
    <td><?php echo '<div class="copy">'. $feeddaten[1] . '</div>'; ?></td>
    <td><?php echo '<div class="copy"><a href="'. $feeddaten[2] . '">'.$row['feed'].'</a></div>'; ?></td>
    <td><?php echo '<div class="copy">'. $feeddaten[3] . '</div>'; ?></td>
    
    <td><center><a href="deleting.php"><img src="del.png" border="0"></a></center></td>
    <td><center><a href="information.php"><img src="info.gif" border="0"></center></td>
    <td><a href="bearbeiten.php"><img src="impress.gif" border="0"></td>
    
    
    </tr>
    
    <?php } ?>
    
    Die Werte bei den Links sollten eigentlich auch gar nicht sein, denn deleting.php ist eigentlich noch gar nicht fertig, habe nur etwas rumprobiert.
    Wenn möglich sollte der Feed direkt aus der Datenbank gelöscht werden wenn man auf das Kreuz klickt.
    Vielen Dank im vorraus. Ich weiß echt nicht mehr weiter! :(
     
  2. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    du musst die id des ausgewaehlten feeds mit übergeben...

    also erstma schleife um alle feeds darzustellen und jedesmal den deletebutton dahinter..
    bei jedem deletebutton kommt nen <a href..> drumherrum in dem du die aktuelle id mit übergibst (delete.php?myID=<?echo $feeddaten?>)

    dann inner delete.php ne query machen, die ungefaehr so aussieht:
    delete * from myTable where id=myID limit 1;

    das müsste reichen
     
  3. Applefan88

    Applefan88 Gast

    Ich bin eigentlich noch Anfänger in PHP, könntest du mir ein Beispiel vorgeben ich verstehe das so noch nicht ganz mit dem Link, der Rest in der deleting.php habe ich verstanden.
    :-D
     
  4. Applefan88

    Applefan88 Gast

    das ganze klappt leider immer noch nicht :-c,
    er übergibt die Werte zwar, aber sie werden einfach nicht gelöscht.
    Hier mal mein Link und dann in der anderen Datei der sql Inhalt:

    Link:
    Code:
    <a href="deleting.php?myID=<?php echo $feeddaten[0] . '"'; ?><img src="del.png" border="0">

    delete.php SQL Syntax:
    Code:
    <?php
    
    $db = new mysqli("localhost","root","");
    $db->select_db("rss");
    
    $sql = "DELETE * FROM feeds WHERE Id=myID limit 1";
    mysql_query($sql);
    
    if($sql == TRUE) {
    echo 'Der Feed wurde erfolgreich gel&ouml;scht';
    }
    
    
    ?>
     
  5. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155

    wird denn in der href url die id richtig uebergeben?
    <a href="deleting.php?myID=<?php echo $feeddaten[0] . '"'; ?><img src="del.png" border="0">

    bau mal in die delete.php ne ausgabe, ob er die variable myID richtig einliesst..

    einfach am anfang der delete.php nen echo "my_id: ".$myID;

    und aender ma die query in:
    "DELETE * FROM feeds WHERE Id= '".$myID."' limit 1;";

    vllt reicht es ja shcon aus dem myID ein $myID zu machen :)
     
  6. Applefan88

    Applefan88 Gast

    Er übergibt die Feedurl richtig, habe jetzt die beiden Dinge umgestellt aber, es bringt nichts,
    er gibt sogar aus Der Feed wurde erfolgreich gelöscht.
    Also muss er die SQL Syntax ja anerkennen. Aber warum wird der Feed immer noch nicht gelöscht???

    Gibt es noch eine andere Möglichkeit?
     
  7. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    lass dir mal bitte die sql query ausgeben

    sind die id's von den feeds unique?..also einmalig
    darf der phpuser in dieser table löschen?
     
  8. Applefan88

    Applefan88 Gast

    Also:
    der User root, den ich momentan verwende hat alle Rechte, das habe ich schon schmerzhaft festellen können, als plötzlich alles weg war :) und die Id ist Primarykey und autoincrement, aber nicht unique.

    Wenn ich sage delete ... $feeddaten[0], werden alle IDs gelöscht.
     
  9. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    mhhh komisch...dafür ist ja extra auch noch das limit 1 drin...

    du hast in der delete.php das array feeddaten doch gar net zur verfügung..sondern nur die var $myID..oda includest du delete.php?

    gib mal bitte die query..die dir php zurückliefert mti dem echo

    primary key reicht...
     
  10. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Probier doch erst einmal ein SQL Query zu finden, welches für Einzelfälle tut, was Du willst, also zum Beispiel:
    Code:
    DELETE FROM feeds WHERE feedID=42 LIMIT 1
    
    Das impliziert allerdings, dass Deine Feeddaten in einer Tabelle liegen, die eine Spalte »feedID« führt, und dass diese ein auto-inkrementeller Primärschlüssel ist (unique_id ergibt sich daraus). Füllst Du nun Deine feeds-Tabelle mit Daten sollte jeder Datensatz eine feedID != 0 erhalten, und die feedID sollte aufsteigend und originär sein.

    Dann klappt's.

    In PHP gilt allerdings, dass Du allen Eingaben, die vom Benutzer kommen, misstrauisch beäugen musst, sonst hast Du ganz schnell ein Problem (SQL injection). Das könnte so aussehen:

    Code:
    $daba = mysql_connect(...);
    
    function deleteFeedById($_feedId=0, $_daba=0) {
        if ($_daba) {
            if (!empty ($_feedId)) {
                $sql = "DELETE FROM feeds ";
                $sql .= sprintf ("WHERE feedID='%u' LIMIT 1", mysql_real_escape_string($_feedId));
                if ($result = mysql_query($sql, $_daba)) {
                   return $_feedId;
                }
            }
        }
        return FALSE;
    }
    
    if ($loeschresultat = deleteFeedById(42, $daba)) {
         printf ("<p>Boah. Feed Nummer %u wurde entfernt.<p>\n", $loeschresultat);
    } else {
         echo "<p><em>Das war nix.</em></p>\n";
    }
    
    
    Hiermit rufst Du eine Löschroutine auf, die Dir die ID des gelöschten Datensatzes bei Erfolg zurückgibst. Bei Problemen gibt die Routine »FALSE« zurück und Du bekommst eine entsprechende Ausgaben.

    Wichtig ist hierbei die Verwendung von mysql_real_escape_string, um enventuelle SQL-Eingaben über die Adresszeile zu bekämpfen.
     
  11. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    natürlich..hab an die security noch gar net gedacht..thx4hint
     
  12. Applefan88

    Applefan88 Gast

    Also das kommt wenn ich die in die Ausführung des Querys hinzufüge:
    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 '* FROM feeds WHERE Id=1 limit 1' at line 1

    Oh man, es funktioniert noch nicht einmal folgendes:

    $sql = "DELETE * FROM feeds WHERE Id=1 limit 1";
    mysql_query($sql);

    woran kann das liegen?
     
  13. Applefan88

    Applefan88 Gast

    meine delete.php

    Code:
    <?php
    
    $db = mysql_connect("localhost","root","", "rss");
    
    $sql = "DELETE * FROM feeds WHERE Id= '".$myID."' limit 1;";
    $result = mysql_query($sql) OR die(mysql_error());
    
    if(!$result) {
    echo 'Der Feed konnte nicht gel&ouml;scht werden!';
    }
    echo "<br><br><center> FeedID: <b>".$myID. '</b> wurde gel&ouml;scht<br>
    <a href="delete.php">Weiter</a></center>';
    
    
    
    ?>
    
    Und dann kam die Fehlermeldung oben! :-c
     
  14. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    bist du dir sicher das deine table feeds heisst und das es Id gibt?
    lass das limit mal weg..theoretisch duerfte ja eh nur eins gelöcsht werden, weil ja deine ids unique sind..

    versuch ma statt Id=1, Id='1'
     
  15. Applefan88

    Applefan88 Gast

    <?php

    $db = mysql_connect("localhost","root","");
    mysql_select_db("");

    $sql = "DELETE FROM feeds WHERE Id= '".$myID."' limit 1;";
    $result = mysql_query($sql) OR die(mysql_error());

    if(!$result) {
    echo 'Der Feed konnte nicht gelöscht werden!';
    }
    echo "<br><br><center> FeedID: <b>".$myID. '</b> wurde gelöscht<br>
    <a href="delete.php">Weiter</a></center>';



    ?>

    Es funzt, genial, der Fehler lag an der Syntax.
    Delete From statt Delete * FROM


    Vielen Dank für eure Hilfe
     
    #15 Applefan88, 14.11.06
    Zuletzt von einem Moderator bearbeitet: 14.11.06
  16. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    auman..stimmt..

    wieso sieht man immer den wald vor lauter...blablabla

    :D

    nun bau aber noch das angesprochnde escape string rein, wegn sqlinjection
     
  17. Applefan88

    Applefan88 Gast

    klar mach ich
    und nochmal vielen Dank, war ja auch eine schwere Geburt ;)
     

Diese Seite empfehlen