PHP Bedingung in Ausgabeschleife einbauen - wie?

mikelsdump

Cadet 4th Year
Registriert
Aug. 2008
Beiträge
117
Hallo,

es geht wieder um mein SELECT-Feld.

Ich hatte ja ein SELECT-Feld, dessen ausgewählter Wert übergeben wird. Im verarbeitenden Formular möchte ich nun, die eingegebenen Daten anzeigen, allerdings nicht über einfache Ausgabe, sondern nach wie vor als SELECT-Feld, bei dem die ausgewählte OPTION vorselektiert ist (was mit selected funktioniert).

Das Problem für mich ist, dass die Werte für die OPTIONen durch eine Schleife aus der DB ausgelesen werden. Ich weiß einfach nicht WO oder WIE ich diese Überprüfungskomponente ("Wenn $row['ID']==zuvor ausgewählter Wert, dann schreibe ein 'Selected' in diesen einen Punkt der Schleife") anbringen kann. Ich müsste ja quasi in den HTML-Tag reinschreiben...

Kann mir jemand helfen?

Mein Code bisher:
PHP:
//Optionsfeld "Areitsschritt"
echo "<td class=\"AB\"><select name=\"intarbsch[]\"><option value=\"\"></option>";

//Wähle von der Tabelle iankanposstma die spalte stückzahl wo ian & pos den variablen entsprechen
 $sql = "SELECT Arbeitsschritt FROM `einzelschritt` WHERE `IAN` = $IAN AND `POS` = $POS"; 
 $query = mysql_query($sql) OR die(mysql_error()); 
 //liste die ergebnisse der vorigen abfrage in die variable $result
 list ($result) = mysql_fetch_row($query);
 if ($row['ID']==$result) echo "selected";

 $sql = "SELECT * FROM intarbsch ORDER by Arbeitsschritt"; 
 $result = mysql_query($sql) OR die(mysql_error()); 
 while($row = mysql_fetch_array($result)) { 
  echo "<option value=".$row['ID'].">" . $row['Arbeitsschritt'] . "</option>"; 
 }
echo "</select></td>";
Geht das überhaupt mit PHP oder brauche ich da JavaScript (von dem ich absolut keine Ahnung habe)?
 
PHP:
function admin_table_status($id){
  $infos = array();
  $res = mysql_query("SELECT * FROM status WHERE id > 0");
  while($bla = mysql_fetch_array($res)) $infos[$bla['status']] = $bla['title'];
  $out = '<select name="status" size="1">';
    foreach($infos as $a => $v){
      if($a == $id){
        $out .= '<option selected value="'.$a.'">'.$v.'</option>';
      } else {
        $out .= '<option value="'.$a.'">'.$v.'</option>';
      }
    }
  $out .= '</select>';
  return $out;
}

Du musst nur deine querys anpassen, dann sollte alles passen. :)
 
In der Ausgabe prüfen, ob die ID zum ausgewählten Wert passt und dann eben selektieren oder nicht:
PHP:
echo "<option value=".$row['ID'];

echo ($row['ID']==zuvor ausgewählter Wert) ? " selected=selected" : "";

echo ">" . $row['Arbeitsschritt'] . "</option>";
 
Zuletzt bearbeitet:
Hmm... In Zeile 14:

PHP:
 echo "<option value=".$row['ID']." ".(row['ID']==$result ? "selected=\"selected\"" : "\"\"").">" . $row['Arbeitsschritt'] . "</option>";

PS: Das "Ding" da drin ist der Ternäroperator. Kann ab und zu sehr nützlich sein ;)
 
Zuletzt bearbeitet:
@Adam:
Vielen Dank für den ausführlichen Code, aber ich habe mich zwecks Wahrung der Übersichtlichkeit (und die kann bei 'nem Anfänger schon mal schneller verloren gehen) gegen diesen Code entschieden. Danke aber nochmal :)

@Faltermayer:

Danke dir, der Code schaut super aus, aber irgendwie funktioniert er nicht...:( die Fehlermeldung lautet "Parse error: syntax error, unexpected '[' in C:\xampp\htdocs\PPV\AB3.php on line 97"

@Back2Robots:
Auch vielen Dank. Deinen Code habe ich auch ausprobiert. Die Seite lädt sich komplett, aber die zuvor gewählte Option wird leider nicht ausgewählt. EDIT: Leider habe ich mich getäuscht. Der Code funktioniert tatsächlich nicht. :( Und es kommt nichtmal eine Fehlermeldung. Die Seite lädt sich komplett.

Nochmal EDIT:
wtf? Jetzt funktioniert der Code doch. Habe zwar im Code seit dem letzten Versuch nichts verändert, aber Tatsache. Danke :) :)
 
Zuletzt bearbeitet:
Was ist denn bitte an meinem Code unübersichtlich?

Hier nochmal, etwas "übersichtlicher":
PHP:
function admin_table_status($id){
  $infos = array();
  $res = mysql_query("SELECT * FROM status WHERE id > 0");
  while($bla = mysql_fetch_array($res)) $infos[$bla['status']] = $bla['title'];
  // Nun hat man (array) infos mit id = title
  
  $out = '<select name="status" size="1">';
  
    foreach($infos as $a => $v){
      // jede id von infos wird mit dem parameter id verglichen
      if($a == $id){
        $out .= '<option selected value="'.$a.'">'.$v.'</option>';
      } else {
        $out .= '<option value="'.$a.'">'.$v.'</option>';
      }
    }
  
  $out .= '</select>';
  
  return $out;
}
 
Zuletzt bearbeitet:
Sorry, das war nicht als Affront gemeint. :)
Was ich meinte ist, dass es für mich als Anfänger leichter ist, meinen eigenen Code zu behalten und diesem lediglich eine bzw. drei Zeilen Fremdcode hinzuzufügen, anstatt einen komplett anderen Fremdcode zu nehmen (z.B. foreach-Schleife statt while). :)
 
Zurück
Oben