Per MySQL/PHP konkrete DB-Einträge löschen

NeoNeMeSiS

Grünschnabel
Hallo,

ich programmiere gerade für eine größere Einrichtung ein SW-Management System als Webinterface nun habe ich ein Problem (eher von logischer Struktur her - als programmiertechnisch)

hier der Code bei dem ich nicht weiterweiß
PHP:
<form action="admin.php">
	<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>
		
			<? 
				//Verb. mit DB-Server
				mysql_connect("localhost","root","") or die("Verbindung fehlgeschlagen");

				//DB auswählen
				mysql_select_db("msdnaa") or die("Datenbankauswahl fehlgeschlagen");

				$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' 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>";
			
					if(isset($delete))
					{
						mysql_query("delete from software where $line[0] = SNr limit 1");
						header("Location: index.php?show=admin");
					}
				}
			?>
	</TABLE>
</form>

mein Problem ist nun die Abfrage

PHP:
if(isset($delete))
{
        mysql_query("delete from software where SNr = $line[0] limit 1");
        header("Location: index.php?show=admin");
}

denn sobald man den Button zum löschen eines Eintrages drückt, werden da sich diese Abfrage (notgedrungen wegen $line[0] darin) in der While-Schleife befindet alle Einträge der DB gelöscht, obwohl nur einer nämlich der bei dem SNr = der nummer des Eintrages bei dem der Knopf gedrückt wurde

Vielleicht kann ja einer von euch helfen. (Bei Hilfe bitte Variablen-Namen/-Definitionen beibehalten)
 
Leider musste ich ein paar Variablen verändern weil ich zu faul war die richtigen Felder einzugeben.

Aber hier mein Versucht mit Erklärung

PHP:
<?
//Verb. mit DB-Server
mysql_connect("localhost","root","") or die("Verbindung fehlgeschlagen");

//DB auswählen
mysql_select_db("blub") or die("Datenbankauswahl fehlgeschlagen");

Ganz an anfang steht der datenbank aufbau :)

PHP:
//Wenn das Formular abgeschickt wurde wird der entsprechende Eintrag gelöscht
if(isset($_POST['submit']) AND $_POST['submit'] == "Eintrag löschen")
{

$snr = $_POST['Snr'];
//Hier kann jede Variable stehn.
//Sie sollte aber nur einmal vorkommen ;)
mysql_query("DELETE FROM software WHERE SNr = '$snr' ") OR die(mysql_error());
echo "Eintrag gelöscht";


}

So aber hier wirds anders.
Ich teile meinen Script in zwei Teile durch eine if Schleife auf.
Im ersten Teil wird überprüft ob ein Formular abgesendet wird und ob der Absende Button auch der richtige ist, also nicht leer ist. Somit ist es möglich auch mehrere Formulare voneinander zu untescheiden falls du das machen möchtest. Hier ist es aber eigentlich nicht nötig.
Wenn also ein Formular abgeschickt wurde wird der Entsprechende eintrag geschlöscht.
Dieser wird anhand einer Variable aus dem Formular ermittelt und genau bestimmt.

Zweiter Teill

PHP:
else
{
//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");

echo "<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>";

                while($line = mysql_fetch_row($sw))
                {
?>
<tr><td>
<form action="test.php" method="POST">




<!-- damit die Variable ausgewählt werden kann sollten alle input Felder mit einem
Namen versehen werden anhand derer man die Felder auswählen kann.
Es reicht aber nur das Feld zu nehmen welche die Entscheidene Variable beinhaltet.
Hier in diesem Beispiel dien die $line[1] als indentifikation.
Es handelt sich hier um die Seriennummer. -->
<pre>
SNR.:   <input name='Snr' type='text' value='<?=$line[1];?>' style="border: thin solid; border-color: black; border-width: 1px;">
Titel:     <input type='text' value='<?=$line[2]?>' style="border: thin solid; border-color: black; border-width: 1px;">
Kategorie: <input type='text' value='<?=$line[3]?>' 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[4]?></textarea>
<center><input type='submit' name='submit' value='Eintrag löschen'></center>
</pre><br>


</form>

</td>
</tr>
<?
}

echo "</table>";
}



            ?>

Ich habe die Formulare jeweils einzelt gemacht somit werden nicht mehrere Daten mit POST übergeben.

Viel Spass noch.

Bei Fragen bitte piosten.
Hoffe ich hab es aussreichend kommentiert.

MfG

Ecthelion
 
Ich danke dir. Musste zwar etwas ändern da ich das mit dem IF/ELSE nicht brauchte nur auf die idee mit dem namen und der var bin ich nicht gekommen nochmals danke, tja manchmal sind die einfachsten Sachen doch die Besten.
 
Zurück