PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Id ermitteln und Reihe löschen


Don Colleone
19.09.2006, 22:01:18
Guten Abend liebe Mitprogrammierer,

ich habe folgendes Problem bei meinem ersten Skript.

Zunächst lese ich eine Datenbank (MySQL) aus und gebe sie dann in einer Tabelle per Skript wieder aus. Für jeden Datensatz aus der Datenbank eine Reihe auf der Ausgabeseite.

Soweit so gut, das funktioniert auch wunderbar. Jetzt möchte ich hinter jeder Reihe ein x fürs Löschen genau dieser Reihe haben (oder irgeinanderes Symbol, das tut nix zur Sache).

Mit welchem Befehl ich die Reihe an sich löschen kann ist kein Problem, aber wie stelle ich mit dem Skript fest, dass nur ausgerechnet diese Reihe gelöscht werden soll?

Mfg Don Colleone

PS: Ich hoffe das ist noch eine Anfängerfrage und keine für fortgeschrittene PHP-Programmierer.

Opendix
19.09.2006, 22:05:55
du must jedem link der angeklickt werden kann zum löschen die id mitgeben... z.b.

<a href="delete.php?id=5">Löschen</a>


dann kannst du nun einfach mit $_GET['id'] die ID des datensatzes abfragen der gelöscht werden soll :)

Don Colleone
19.09.2006, 22:09:16
die id wird ja aber nicht versendet, sondern nur in der Reihe mit ausgegeben.

Oder wird für jede generierte Reihe die passende id abgefragt?

Opendix
19.09.2006, 22:15:25
ja wie gibst du den diese tabelle aus?

ich nehm an irgendwie so:

while($daten = mysql_fetch_assoc($insert))
{
echo "<tr><td>";
echo $daten['name'];
echo "</td><td><a href='deelete.php?id=" .$daten['id'] . "'";
echo "</td></tr>";
}


somit hast du ne tabelle die sieht so aus:
name 1 [loeschlink 1]
name 2 [loeschlink 2]

wenn du nun auf den loeschlink klickst dann ruftst du also die seite:
delete.php?id=x
wobei x die ID ist die gelöscht werden soll...

//ID
$id = $_GET['id'];
//Query definieren
$query = "DELETE FROM tabelle WHERE id = '$id' LIMIT 1";


somit soltle das gehen... vergiss aber nicht den übergebenen Wert auf richtigkeit zu prüfen! (http://de.wikipedia.org/wiki/SQL-Injektion)

Don Colleone
19.09.2006, 22:22:10
nee ich mach das so:

$lesen = mysql_query("select*from $tisch ");
$zaehlen = mysql_num_rows($lesen);
print "<table border=1 bordercolor=$tabfarb cellpadding=3 cellspacing=0><TR>
<TH>id</TH>
<TH>Koordinaten</TH>
<TH>Spielername</TH>
<TH>Kommentar</TH>
<TH>Eingetragen am/um</TH>
<th>Spezialzustand*</th>
<th>Author</th>
</TR></tr>";
while ($reihe = mysql_fetch_row($lesen) )
{
print "<tr>\n";
foreach($reihe as $feld){
print "\t<td>".stripslashes($feld)."</td>\n";
}
print "</tr>\n";
}
print "<tr><th><i>$zaehlen Koordinaten gefunden</i></th></table>\n";
mysql_close ($verbindung);

Opendix
19.09.2006, 23:09:12
und wo ist der link zum löschen?

Don Colleone
20.09.2006, 09:32:07
Ja noch nirgends, weil ich nicht weiß wie man den anbringt.

Opendix
21.09.2006, 10:31:28
du hat das da oben selbst gemacht und ewist nicht wie du einen link erstellst?

nun einen Link definierst du in HTML so:

<a href="zielseite.php">Dein Link</a>


nun willst du ja deine delete.php oder was auch immer aufrufen und dieser Seite als Parameter die ID des Datensatzes übergeben.

Die Frage ist nun, welche Spalt ein deiner Tabelle als PrimaryKey definiert ist. Sprich welche einen eindeutigen Wert hat um einen Datensatz zu identifizieren.
Bei mir heisst diese Spalt eimmer ID und ist als PrimaryKey und auto-increment definiert.

Wenn du nun als so eine Abfrage hast:

SELECT id, name, irgendwas, anders, von, deiner, tabelle FROM tabelle


dann kriegst du als nun n datensaätze zurück!
diese kannst du mit einer While (wie du es hast) auswerten...


//Öffnen Tag der Tabelle ausgeben
echo "<table>";

//Abfrage machen
$query = "Hier das obige query..";
$insert = mysql_query($query);
while($datensatz = mysql_fetch_assoc($insert))
{
//Hier willst du nun die Tabelle ausgeben
//Also erst eine neue Zeile machen:
echo "<tr>";

//Hier deine Ausgabe:
foreach($datensatz as $key => $value)
{
print "\t<td>".stripslashes($value)."</td>\n";
}

//Nun noch einen Löschen Link in die letzte Spalte einfügen
echo "<td><a href='delete.php?id={$datensatz['id']}'>Loeschen</a></td>";
//Zeile schliessen
echo "</tr>";
}

//Schliessen Tag der Tabelle ausgeben
echo "</table>";


Nun müssen wir nur noch die delete.php erstellen...
In dieser Datei wollen wir ja einen Datensatz löschen...

sprich prüfen wir erst, ob eine ID übergeben wurde:


//Prüfen ob ID angegeben wurde...
if($_GET['id'] == '')
{
//... wenn nicht Script abbrechen
die('Keine ID angegeben!');
}

//Nun die übergebene ID überprüfen
$id = hhtmlentities(strip_tags($_GET['id']), ENT_QUOTES);

//... ansonsten hier den Datensatz löschen
$query = "DELETE FROM tabelle WHERE id = '$id' LIMIT 1";
$insert = mysql_query($query);

//Prüfen ob löschen erfolgreich --> mysql_query() gibt false zurück im Fehlerfall
if(!$insert)
{
die('Löschvorgang fehlgeschlagen: ' . mysql_error());
}

echo "Der Eintrag mit der ID $id wurde erfolgreich gelöscht!";



Hoffe die Frage ist nun geklärt..
btw. der Obige code hab ich nur schnell hier in der "Schnellantworten"-box geschrieben also kann er einige Syntax-Fehler haben... geteste hab ich ihn auch net :P

und weiter schau dir mal die folgenden seiten an:
http://tut.php-q.net/
http://www.selfphp.de/praxisbuch/index.php

KTB
21.09.2006, 11:02:00
Ich würd empfehlen dass du uns mal deine Tabellenstruktur zeigst.

Don Colleone
21.09.2006, 22:20:37
Kommt alles am Wochenende, weil dann wieder Zeit zum Programmieren habe, dann teile ich hier meine Testergebnisse mit.

Ich danke die Opendix, dass du dir so viel Mühe mit deiner Antwort gemacht hast.