• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Delete aus Datenbank mit PHP ?

  • Ersteller Applefan88
  • Erstellt am

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! :(
 

tiriqs

Cripps Pink
Registriert
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
 

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
 

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';
}


?>
 

tiriqs

Cripps Pink
Registriert
26.06.06
Beiträge
155
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öscht';
}


?>


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 :)
 

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?
 

tiriqs

Cripps Pink
Registriert
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?
 

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.
 

tiriqs

Cripps Pink
Registriert
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...
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
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.

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.
 

tiriqs

Cripps Pink
Registriert
26.06.06
Beiträge
155
natürlich..hab an die security noch gar net gedacht..thx4hint
 

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?
 

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
 

tiriqs

Cripps Pink
Registriert
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'
 

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
 
Zuletzt bearbeitet von einem Moderator:

tiriqs

Cripps Pink
Registriert
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
 

Applefan88

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