PHP und Mysql Daten

Hi,

mir ist kein besseres Titel eingefallen und ich hoffe ich kann mein Problem etwas vernünftig erklären.

Also, ich habe eine Tabelle mit Daten :

Code:
CREATE TABLE waren
(
     id     BIGINT         unsigned auto_increment,
    ware varchar(30),
    primary key(id)
);

In dieser befinden sich nun z.B. 100 Waren. oder 200 oder aber auch nur 25. Nun erstellt ich mittels PHP und MySQL eine Seite, wo ich per Button Waren löschen möchte.

Code:
echo "<form name="shop" action="delete.php" >
$sql = "SELECT * from waren;
$res = mysql_query($sql);
while($row = mysql_fetch_assoc($res))
{
      echo "Ware ".$row['ware']." Löschen";
     echo  "<input type="submit" name=".$row['id']." value=".$row['ware']." >";
     echp "<br>";
}
echo "</form>";

Ich habe nun eine Liste mit dem Namen der Ware und daneben einen Button zum löschen. Bestätige ich nun einen von den Button komme ich zu einer anderen php Seite, wo das Löschen statt findet.

Mein Problem ist nun, woher weiß ich, welche Knopf gedrückt wurde. Ich bräuchte irgendwie die ID von der Ware, die ich löschen möchte.

Ich würde nun z.B. per
Code:
 $sql = "DELETE FROM waren WHERE id = ".$_POST['id']."
eine Ware löschen, wie komme ich aber an die ID von der Ware wo der Knopf gedrückt wurde ?
 
Warum machst du das per Formular?
Mach doch einfach eine Liste mittels <ul> oder <ol> und pro Ware ein Listenelement.

Wuerde etwa so aussehen:
Code:
<ul>
  <li><a href='delete.php?id=1'>Ware 1</a></li>
  <li><a href='delete.php?id=2'>Ware 2</a></li>
</ul>

-> $_GET['id']
Nachteil: GET-Parameter sind durch blosses Aendern des Zahlenwertes editierbar, man koennte Waren loeschen, die nicht in der Liste stehen, wenn du den Wert nicht gegenpruefst.

Wenn du es mit einem Formular machst gibt es mehrere Moeglichkeiten:
Code:
<form action='delete.php' method='POST'>
  <select name='id'>
    <option value='1'>Ware 1</option>
    <option value='2'>Ware 2</option>
  </select>
</form>

-> $_POST['id']
Nachteil: Auch POST-Parameter sind editierbar, wenn auch nicht so einfach wie die von GET.

Wie auch immer du es loest, pruefe genau, wo der User etwas unerwartetes angeben kann und stell sicher, dass er kein unerwartetes Ergebnis hervorrufen kann.
In deinem Fall koennte man ein intval($_POST['id']) benutzen, da du ja wirklich nur eine Zahl haben willst. Zusaetzlich koennte man den Zahlenraum noch eingrenzen, falls es Waren gibt, die nicht geloescht werden duerfen.

mfg
snoggo
 
Oder du gibst dem submit button noch einen etwas eindeutigeren Namen. Z.B.
PHP:
echo  "<input type=\"submit\" name=\"id_".$row['id']."\" value=\"".$row['ware']." löschen\" >";

// und dann...

foreach($_POST as $k => $v){
 if(substr($k, 0, 2) === "id_"){
  $k = mysql_real_escape_string($k);
  mysql_query( "DELETE FROM waren WHERE id = ".substr($k, 3)." LIMIT 1;"); // evtl auf Fehler testen
 }
}
 
Zurück
Oben