DropDown Liste "selected"

syntax

Mitglied
Hallo Leute ich habe eine Dropdown-Liste, diese liest Werte aus der Tabelle Status aus (Neu / Vorführer / Gebraucht / Unfall / Schrott ).
Diese Dropdown-Liste habe ich in die Ausgabe meiner SQL-Abfrage gebaut, damit ich wenn ich den Status der Autos ändern will einheitliche Werte habe, was auch funktioniert!
Jetzt ist es so das wenn ich meine Abfrage starte die Dropdown-Liste immer den ersten Wert anzeigt (Neu),ich will aber das die Dropdown-Liste immer den Wert anzeigt der in fahrzeug.status steht.

Ich habe das schon mit einer If-Abfrage probiert, bin da aber überhaupt nicht weitergekommen. Würde mich freuen wenn ihr mir mal wieder helft.
Danke und Schöne Ostern :)

PHP:
<?php
include("../php/connect.php");

    $status_liste = '';
    $statusauswahl = mysql_query("SELECT id, status FROM zustand");
    while ($status_result = mysql_fetch_array($statusnauswahl))
    {
        $status_liste .= 
    '<option value="' . $status_result['status'] . '">
    ' . $status_result['status'] . '
     </option>';
    }
    ?>

    <form action="<? $_SERVER["SCRIPT_NAME"]  ?>" method="post">
    <table>
    <?

    $abfrageergebnis = mysql_query("SELECT id, auto, kunde, status FROM fahrzeug");
    while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
    {
echo <<<HTML
    <tr>
    <td>{$datensatz['id']}</td>
    <td>{$datensatz['auto']}</td>
    <td>{$datensatz['kunde']}</td>
    <td><select name="statusauswahl">{$status_liste}</select></td>
   <tr>
HTML;
    }
    ?>
    <td style="width:15px"><input type="submit" value="Senden" name="submit"></td>
    </table>
    </form>
?>
 
Zuletzt bearbeitet:
Hi,
also ich würde die stati erstmal alle nur in ein Array schreiben:

PHP:
$status_liste = array();
    $statusauswahl = mysql_query("SELECT id, status FROM zustand");
    while ($status_result = mysql_fetch_array($statusnauswahl))
    {
        $status_liste[] = $status_result['status'];
    }

Geht auch performanter, aber das ist erstmal ok.

Dann:
PHP:
<form action="<? $_SERVER["SCRIPT_NAME"]  ?>" method="post">
    <table>
    <?
    $tabelleninhalt = '';
    $abfrageergebnis = mysql_query("SELECT id, auto, kunde, status FROM fahrzeug");
    while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
    {
    $tabelleninhalt .= '<tr>
    <td>{$datensatz['id']}</td>
    <td>{$datensatz['auto']}</td>
    <td>{$datensatz['kunde']}</td><td><select name="statusauswahl">';
    foreach($status_liste as $status){
       $tabelleninhalt .= '<option value="' . $status . '"';
       $tabelleninhalt .= $status == $datensatz['status'] ? ' selected="selected"' : '';
       $tabelleninhalt .= '>'.$status.'</option>';
    }
   
$tabelleninhalt .= '</select></td><tr>';

echo $tabelleninhalt;
    }
    ?>
    <td style="width:15px"><input type="submit" value="Senden" name="submit"></td>
    </table>
    </form>


Habe es jetzt nicht ausprobiert und kann auch sein, dass noch n Fehler drin ist. Vom Prinzip her würde ich es aber so machen. Falls Du die Kurzschreibweise mit dem ? und dem : nicht kennst kannst Du die Zeile auch so schreiben und lesen:

PHP:
//aus 
// $tabelleninhalt .= $status == $datensatz['status'] ? ' selected="selected"' : '';

//wird:
if($status == $datensatz['status']){
    $tabelleninhalt .= ' selected="selected"';
}else{
    $tabelleninhalt .= '';
}

LG noeden

PS: Finde das so immer unübersichtlich, wenn der PHP-Code in HTML-Dateien steht, würde die ganze Seite nur in eine Variable schreiben und nachher ausgeben, ist aber sicherlich Geschmackssache.
 
Hallo Noeden, danke für deine unkomplizierte Hilfe.
Das Script klappt soweit. Ich habe aber noch einen eigenartigen Fehler, den ich nicht so ganz nachvollziehen kann.

Mein erster Datensatz wird immer doppelt ausgegeben.

Ich habe das Script auch schon auf das nötigste gekürzt um den Fehler zu finden, allerdings vergeblich :(

Vielleicht seht Ihr das Problem auf anhieb.

Danke

PHP:
    <?
    $status_liste = array();
    $statusauswahl = mysql_query("SELECT status FROM zustand");
    while ($status_result = mysql_fetch_array($statusauswahl))
    {
    $status_liste[] = $status_result['status'];
    }
    ?>

    <form action="<? $_SERVER["SCRIPT_NAME"]  ?>" method="post">
    <table>

    <?
    $tabelleninhalt = '';
    $abfrageergebnis = mysql_query("SELECT status FROM fahrzeug");
    while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
    {
    $tabelleninhalt .=
    '<td><select name="statusauswahl">';
    foreach($status_liste as $status){
       $tabelleninhalt .= '<option value="' . $status . '"';
       $tabelleninhalt .= $status == $datensatz['status'] ? 'selected="selected"' : '';
       $tabelleninhalt .= '>'.$status.'</option>';
    }

$tabelleninhalt .= '</select></td>';

echo $tabelleninhalt;
    }
    ?>
    
   <td style="width:15px"><input type="submit" value="Senden" name="submit"></td>
    </table>
    </form>
 
Zuletzt bearbeitet:
Als mit dem doppelten Datensatz meinst Du jetzt einen von den stati? Oder von den Autos? Denn die Autos sind in deinem letzten Codeabschnitt ja gar nicht mehr dabei.

Also bei Dir wird jetzt anstatt von:
HTML:
  3 <select name="statusauswahl">
  4   <option value="neu">
  5     neu
  6   </option>
  7   <option value="vorfuehrer">
  8     vorfuehrer
  9   </option>
 10   <option value="gebraucht">
 11     gebraucht
 12   </option>
 13   <option value="unfall">
 14     unfall
 15   </option>
 16   <option value="schrott">
 17     schrott
 18   </option>
 19 </select>

das hier ausgegeben:
HTML:
  3 <select name="statusauswahl">
  4   <option value="neu">
  5     neu
  6   </option>
  7   <option value="neu">
  8     neu
  9   </option>
 10   <option value="vorfuehrer">
 11     vorfuehrer
 12   </option>
 13   <option value="gebraucht">
 14     gebraucht
 15   </option>
 16   <option value="unfall">
 17     unfall
 18   </option>
 19   <option value="schrott">
 20     schrott
 21   </option>
 22 </select>

Wenn das der Fall sein sollte fangen wir doch mal mit dem Debug an. In der Foreach-Schleife wird ja das Array durchlaufen. Gibt das Array dann doch mal mit:

PHP:
var_dump($status_liste);

aus. Mal schauen ob der Eintrag da schon doppelt drin ist. Danach würde man gucken ob er in der Datenbank vllt zweimal vorkommt. Ich sehe in dem Code hier leider keinen Fehler, der das auslösen könnt.

Noeden
 
Zuletzt bearbeitet:
Zurück