Hallo Katzefutter,
ich sehe gerade, dass die geschweiften Klammern in deinem Snippet unpaarig sind. Ist das ein Kopierfehler oder ist das der Grund für dein Problem?
Sicherlich hat Deine Tabelle nicht so viele Spalten, dass Du sie generisch in einer foreach-Schleife rausrotzen musst. Natürlich gewinnst Du damit Flexibilität (Spalte in der Datenbank dazu und Schwups ist sie in der Liste), aber eigentlich sollte man die Oberfläche nicht mit der Stahlkette ans die DB koppeln. Daher schließe ich mich mal meinen Vorrednern an und füge noch was hinzu...
- Finger weg von SELECT *
- Verwende MYSQLI_ASSOC als zweiten Parameter für mysqli_fetch_all, so dass deine Rows mit Feldnamen indexiert werden und nicht mit Zahlen
- Gib die Spalten, die Du ausgeben willst, explizit aus. Das geht eigentlich mit einer Zeile pro Spalte:
echo "<td>{$row['Name']}</td>";
. Auf diese Weise gelingt es auch, Spalten wie "id" aus der Tabelle fernzuhalten, die da nicht reingehören. - Alternativ kannst Du auch die komplette Row per HereDoc raushauen. Z.B. so:
echo <<<EOL
<tr>
<td>{$row['Name']}<td>
<td>{$row['Preis']}<td>
<td>{$row['Einkaufspreis']}<td>
<td><a href="edit.php?id={$row['id']}">Bearbeiten</a></td>
<td><a href="delete.php?id={$row['id']}">Löschen</a></td>
</tr>
EOL;
Ich habe deine Methode, Aktionen per A Tag auszulösen, stehen gelassen. Dafür ist A aber eigentlich nicht gemacht. Für Aktionen auf einer Seite verwendet man eigentlich das button Tag, was aber einiges an Folgeaufwand bedeutet. Du musst die Tabelle dann in eine Form setzen und bist dann mit dem Problem konfrontiert, dass Form-Anzeige, Edit und Delete alle über die gleiche URL laufen. Oder Du nutzt das neue formaction Attribut des Buttons, aber das läuft nicht in jedem Browser. Deswegen würde ich es nicht nutzen wollen und statt dessen EIN Script verwenden, das zwischen Anzeige, EDIT-Start, EDIT-Submit, DELETE-Request und DELETE-Bestätigung unterscheidet und die nötigen HTML-Seiten für diese 5 Szenarien erzeugt. Damit das gut funktioniert, muss man ein bisschen Engineering betreiben und den Code ordentlich auf Funktionen oder Klassen verteilen - das ist alles etwas viel für den Anfang. Kannst ja mal drüber nachdenken.
Rolf