Rolf b: php mysql

Beitrag lesen

Gut, dass ich grad eine Weile nicht am PC war, dein Codebeispiel macht schonmal teilweise klar, was Du möchtest.

Du erzeugst also eine <select> Element und bestückst die <option>s dazu aus deiner Tabelle der Mitgliedschaftsarten.

In deinem Beispiel zeigst Du dem Anwender in der Dropdownliste in jeder Zeile die ID und die Art an, willst Du das wirklich? Ich hätte es vermutlich so gemacht (ohne Kommentare)

while ($row_ma = mysql_fetch_array($result_ma))
{
   $mga_id = $row_ma[0];
   $mga_bezeichnung = htmlspecialchars($row_ma[1]);
   echo '<option value="$mga_id">$mga_bezeichnung</option>';
}

Erklärung:

  • die IDs ins Value-Feld, und nur die IDs. Ob Du die ID auch im Optionstext haben willst, ist Deine Entscheidung. Kannst jederzeit ein $mga_id vor die Bezeichnung schreiben
  • Die Bezeichnung mit htmlspecialchars aufbereiten, falls darin zufällig eine spitze Klammer steht oder ein & Zeichen
  • Die ID musst Du nicht aufbereiten. Es ist ein auto-inkrement Feld, also numerisch.
  • Ich verwende das PHP Feature "string parsing", um die Akrobatik mit der Stringverketterei zu vermeiden

Wenn aus diesem HTML jetzt die Antwort zurückkommt, solltest Du in der $_POST Variablen mga_bezeichnung die ausgewählte ID finden (oder nix wenn der Anwender nichts ausgewählt hat).

Eins noch: mysql(i)_fetch_array liefert Dir nicht nur die Spalten nach Spaltennummer, sondern auch noch nach Name. Wenn deine Tabelle also die Spalten mga_id und mga_bezeichnung enthält, dann findest Du in einer mga_row vier Einträge:

mga_row[0] = ID
mga_row[1] = Bezeichnung
mga_row['mga_id'] = ID
mga_row['mga_bezeichnung'] = Bezeichnung

Wenn Du nur die Einträge mit 0 und 1 als Schlüssel haben willst, kannst Du mysql(i)_fetch_row verwenden, oder mysql(i)_fetch_array($result_ma, MYSQL_NUM). Mit mysql(i)_fetch_assoc bzw. mysql(i)_fetch_array($result_ma, MYSQL_ASSOC) bekommst Du nur die Einträge mit den Spaltennamen als Schlüssel.

Und wo ich das gerade schon erwähne: Die Kombination von SELECT * und Zugriff auf die Row mit Spaltennummern ist ein Lottospiel. Entweder schreibst Du SELECT mga_id, mga_bezeichnung FROM ..., dann weißt Du, an welcher Position welches Feld ist, oder du nimmst zum SELECT * die namentlichen Schlüssel für den Zugriff in der Row. Es ist aber eigentlich gute Praxis, SELECT * nicht in Programmen zu verwenden, sondern immer explizit hinzuschreiben, welche Spalten man haben will.

Rolf