DB-Einträge mit der Hilfe der jeweiligen ID löschen...?

NeoNeMeSiS

Grünschnabel
Hallo ich habe folgendes Problem - wie im Anhang erkenntlich - und zwar soll der User einen beliebigen Eintrag aus der DB löschen.

Bisher ist diese Funktion von mir nur so gelöst, dass immer der zuerst in die DB eingetragene Eintrag gelöscht wird, egal auf welchen "Löschen-Button" man drückt.

Ich möchte nun das der Button unter dem jeweiligen Eintrag auch nur genau diesen Eintrag löscht.

P.S.: Das "Löschen" steht ganz am Ende des Quellcodes [ if(isset($_POST['delete']) AND $_POST['delete'] == "Eintrag löschen") ]

Nun folgt der Code:
PHP:
<?
//Verbindung zum MySQL-Server
mysql_connect() or die("Verbindung fehlgeschlagen");
//wenn nichts angegeben, wird localhost, root ohne passwort genommen

//DB auswählen
mysql_select_db("msdnaa") or die ("DB nicht gefunden");

$sql = "SELECT ".
"id, nickname, password ".
"FROM ".
"users ".
"WHERE ".
"(nickname like '".$u_nick."') AND ".
"(password = '".md5 ($u_pw)."')";

$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
	// Benutzerdaten in ein Array auslesen.
	mysql_fetch_array ($result);
}
else
{
	header("Location: index.php?fehler=1");
}
?>
<?
	// Datenbankverbindung aufbauen
	$db = mysql_connect ("localhost", "root", "");
	mysql_select_db("msdnaa", $db) or  die ("Keine Verbindung zur Datenbank");
?>

	<form action="admin.php">
	<pre>
	Softwarekategorie:      <input type="text" name="swkat" style="border: thin solid; border-color: black; border-width: 1px;">
	 
	Softwaretitel:          <input type="text" name="swtitel" style="border: thin solid; border-color: black; border-width: 1px;">
	 
	Softwarebeschreibung:   <textarea name="eintrag" cols="50" rows="3" style="border: thin solid; border-color: black; border-width: 1px;"></textarea>
	                        <input type="submit" name="ok" value="Senden" style="border: thin solid; border-color: black; border-width: 1px;"><input type="reset" style="border: thin solid; border-color: black; border-width: 1px;">
	</pre>
	</form>

<?
if(isset($ok))
{
	$query = "insert into software(SNr,SInhalt,SKat,STitel) values('','$eintrag','$swkat','$swtitel')";
	$result = mysql_query($query) or die("Einfügen fehlgeschlagen");
	header("Location: index.php?show=admin");
}
;?>
<form action="admin.php" method="POST">
	<TABLE style="border: thin solid; border-color: red; border-width: 1px;">
		<tr>
			<td style="border: thin solid; border-color: blue; border-width: 1px;">Vorhandene DB-Einträge: </td>
		</tr>
			<?
				//Wenn das Formular abgeschickt wurde wird der entsprechende Eintrag gelöscht
				//Hier werden die Formulare Ausgegeben.
				//Jedes Produkt erhält aber sein eigenes Formular.

				$sw  = mysql_query("SELECT * FROM software order by SNr DESC") or die ("Anfrage fehlgeschlagen");

				while($line = mysql_fetch_row($sw))
				{
					echo "<tr><td style='text-align:top'>";
			?>
<pre>
Lfd-Nr.:   <input type='text' name='snr' value='<?=$line[0]?>' style="border: thin solid; border-color: black; border-width: 1px;">
Titel:     <input type='text' value='<?=$line[3]?>' style="border: thin solid; border-color: black; border-width: 1px;">
Kategorie: <input type='text' value='<?=$line[2]?>' style="border: thin solid; border-color: black; border-width: 1px;">
Inhalt:    <textarea cols='50' rows='5' style="border: thin solid; border-color: black; border-width: 1px;"><?=$line[1]?></textarea>
<center><input type='submit' name='delete' value='Eintrag löschen'></center>
</pre><br>
			<?
					echo "</td></tr>";
				}
			?>
	</TABLE>
</form>
<?
					if(isset($_POST['delete']) AND $_POST['delete'] == "Eintrag löschen")
					{
						$s_nr = $_POST['snr'];
						
						//Hier kann jede Variable stehen.
						//Sie sollte aber nur einmal vorkommen ;)
						
									
						mysql_query("delete from software where SNr = $s_nr limit 1");
						header("Location: index.php?show=admin");
						//echo "Löschen erfolgreich!";
					}

//Freigeben der Ergebnis-Ressource
mysql_free_result($result);

//Verbindung schließen
mysql_close();
?>

Für Vorschläge wäre ich sehr dankbar.
(!)Wichtig(!) Allerdings sind keine Funktionen die diese Datei "admin.php" nocheinmal mit Parametern wie "admin.php?action=delete&id=$var" aufrufen möglich da eine Vorgeschaltete Abfrage nach korrektem Usernamen und PW das verhindert.
Sollte auch dafür jemand eine Idee haben ich habe immer ein offenes Ohr!
 

Anhänge

  • msdnaa_small.jpg
    msdnaa_small.jpg
    48,6 KB · Aufrufe: 47
Hmm irgendwie verstehe ich dein Problem nicht du löscht doch den Eintrag der die SNR $Snr hat und wenn es nach der Id geschehen soll denn nimmst einfach die ID als WHERE Klausel oder dazu. :)

Edit: Hmm da hat wohl jemand das Gleiche gedacht wie ich. :)
 
Ihr versteht es wirklich nicht... Es wird zwar ein Eintrag mit einer ID gelöscht aber ihr seht doch auf dem Bild das jeder einzelne Eintrag einen löschen Knopf besitzt aber egal welcher gedrückt in der ID die jedem Button zugeordnet ist steht immer die ID vom zuerst eingegebenen Eintrag in $s_nr.
 
Ahso... :-)

Du hast ein einziges Formular für alle Einträge... dadurch werden auch immer alle Felder übermittelt.
Verwende für jeden Eintrag einen eigenen <form>-Tag...dann wird jeweils nur der eine Eintrag übermittelt.
 
Danke Sven ich probiere mal ob ich das bei meinem Problem so lösen kann... da ja jedes <form> eigentlich dynamisch durch eine schleife erstrellt wird die Aufgrund der DB Einträge läuft.

Mal schauen...
 
Vielen Dank! Man ich hatte ein Brett vorm Kopf... :suchen: :suspekt:

@Sven you are my Hero!

Aber eine andere Frage ihr seht ja das aus den Einträgen ein Menue am oberen Teil des Fensters gebildet wird und habt ihr eine idee wie ich es anstelle das wenn sobald jemand einen Eintrag auswählt eine neue Seite mit index.php?show=info&id=id_des_ausgewählten_eintrages aufruft, ich denke da muss man Javascript zu nutzen aber ich kenne mich mit Javascript und PHP gleichzeitig nicht so aus kann mir da einer mal einen Quellcode-Tipp geben ;)
 
Zuletzt bearbeitet:
Zurück