Selectfeld aus Db verliert Wert bei Fehlerprüfung

inspiron8

Mitglied
Hallo,
in meinem Formular werden beim versenden die Inputfelder auf Inhalt geprüft und darauf hingewiesen wenn ein oder mehrere Felder nicht ausgefüllt wurden.
Der Inhalt dieses Selectfeldes wird aus einer DB geladen. Tritt nach einer Auswahl beim versenden ein Fehler auf, wechselt die Anzeige im Selectfeld auf den ersten DB-Eintrag (Bitte auswählen!) aber im $_POST['ort'] ist der ausgewählte Wert noch vorhanden.
Was ist in der letzten Zeile falsch? Ich finde den Fehler einfach nicht! :-(

Gruß

PHP:
<div id="reihe_4">
            <label  <?php if(isset($errorFelder['ort'])) echo 'class="error"'; ?>>Ort</label>
            <div>
<select class="select_mac" name="ort" id="ort" >

<?php
 
    $sql = "SELECT * FROM dropdown_ort "; 
    $result = mysql_query($sql); 
        // für jeden Eintrag ein Option-Tag erstellen                 
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
        //echo '<option value="'.$row['ort'].'"'.$_POST['ort'].'>'.$row['ort'].'</option>';
        echo '<option value="'.$row['ort'].''.$_POST['ort'].'selected="selected"'.'>'.$row['ort'].'</option>';
        }
?>
     	</select>
            </div>
        </div>
 
Versuch es mal so:

PHP:
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $selected='';
                if( $row['ort'] == $_POST['ort'] )
                        $selected = ' selected="selected"';
                echo '<option value="' . $row['ort'] . '"' . $selected . '>' . $row['ort'] . '</option>';
        }
 
rrrrrrr!
Genau das war es.

Dankeschön

...eine Frage hätte ich noch, für die Selectfelder sind in der DB Tabelle einige "*" (siehe Bsp.) zur optischen Trennung gespeichert.
Kann man beim Auslesen diese Einträge einem Optgroup zuweisen damit diese nicht anwählbar sind.
Gruß

Bitte auswählen!
PP1.1
PP1.2
PP1.3
*
PP2.1
PP2.2
PP2.3
*
FW3.1
FW3.2
 
OptGroups haben meist einen Namen. Woher kommt dieser, also wie kann man diesen ermitteln? Ansonsten ist es natürlich möglich, so etwas zu realisieren, man müsste eben nur wissen, wie du dies in deinem speziellen Fällen speicherst.
 
...na das Sternchen ist doch der Name!

Hallo,
ich habe mal was versucht, das Ergebnis geht schon in die richtige Richtung. Es wird jetzt ein neues Sternchen eingefügt wenn er eines beim Auslesen findet. Wie muß ich es schreiben das das ausgelesene Sternchen als Optgroup Label gesetzt wird?

Gruß
Bildschirmfoto 2013-02-09 um 08.55.51.png

Bitte auswählen!
PP1.1
PP1.2
PP1.3
* <--------- Optgroup-Sternchen
*
PP2.1
PP2.2
PP2.3
* <--------- Optgroup-Sternchen
*
FW3.1
FW3.2

PHP:
<select class="select_mac" name="ort" id="ort" >
			<optgroup label="Ort">
			<?php
			 
    		$sql = "SELECT * FROM dropdown_ort "; 
    		$result = mysql_query($sql); 
        	// für jeden Eintrag ein Option-Tag erstellen                 
        	        	
        	while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $selected='';
                if( $row['ort'] == $_POST['ort'] )
                        $selected = ' selected="selected"';
                
                if($row['ort'] == "*")
                        echo '<optgroup label="*">';
                echo '<option value="' . $row['ort'] . '"' . $selected . '>' . $row['ort'] . '</option>';
        	}
			?>
			</optgroup> 
     		</select>
 
Geht aber bestimmt noch besser:

PHP:
<?php
$eintrag = array("PP1.1", "PP1.2", "PP1.3", "*", "PP2.1", "PP2.2", "PP2.3", "*", "FW3.1", "FW3.2");
?>
<select name="auswahl">
	<optgroup label="*">
    <?php
	for ($a = 0; $a < count($eintrag); $a++){
		if ($eintrag[$a] == "*"){
			echo '<optgroup label="*">';
		} else {
			echo '<option value="' . $eintrag[$a] . '">' . $eintrag[$a] . '</option>';
		}

		if (($a + 1) < count($eintrag) && $eintrag[$a + 1] == "*"){
			echo '</optgroup>';
		}
    }
	?>
	</optgroup>
</select>
 
Danke,
ich glaube da hast du etwas übersehen, denn ich bekomme die Werte aus der Datenbank!
Wie kann ich das denn jetzt an meine Bedürfnisse anpassen?
Gruß
 
Zuletzt bearbeitet:
Übersehen habe ich das nicht. Ich habe es als Lösungsvorschlag nur so geschrieben das ich es gleichzeitig bei mir auch testen konnte und es sollte zeigen wie man es machen könnte.

Ungetestet sollte es mit Datenbank in etwa so aussehen:

PHP:
<select class="select_mac" name="ort" id="ort" >
    <optgroup label="*">
	<?php
    $sql = "SELECT * FROM dropdown_ort ";
    $result = mysql_query($sql);

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    	$selected = '';
        if( $row['ort'] == $_POST['ort'] )
        	$selected = ' selected = "selected"';

            if($row['ort'] == "*") {
                echo '<optgroup label="*">';
			} else {
                echo '<option value="' . $row['ort'] . '"' . $selected . '>' . $row['ort'] . '</option>';
			}
	}
	?>
    </optgroup>
</select>
 
...ich traue mich gar nicht mehr zu fragen. :(
Kannst du mir bitte noch einmal helfen?
Dieses Selectfeld soll solange wie die Seite geöffnet ist und die Formulardaten versendet werden, die Auswahl beibehalten. Nur funktioniert das mit dem optgroup dort nicht. Wo ist da das Problem?
Gruß

PHP:
<select class="select_mac" name="ort" id="ort" >
<optgroup label="Ort">
<?php
   
        $sql = "SELECT ort FROM dropdown_ort "; 
    	$result = mysql_query($sql); 
       	// für jeden Eintrag ein Option-Tag erstellen                 
        while ($arrort = mysql_fetch_array($result, MYSQL_ASSOC)) { 
        	    
            foreach ($arrort as $zeile) { 
              $sel = isselected($zeile, $_POST['ort']);
              
              if($arrort['ort'] == "*") {
                echo '<optgroup label="*">';
              } else {
 
              echo '<option value="'.$zeile.'"'.$sel .'>'.$zeile.'</option>'; 
              }
              } 
            }
?>
</optgroup>
</select>
 
Zuletzt bearbeitet:
Zurück