$_POST & multiple select

jenno

Erfahrenes Mitglied
Seufz,

ich habe in einer meiner Formularseiten ein Multiselect Feld:

PHP:
<select multiple size="7" name="tage">
		<option>Montag</option>
		<option>Dienstag</option>
		<option>Mittwoch</option>
		<option>Donnerstag</option>
		<option>Freitag</option>
		<option>Samstag</option>
		<option>Sonntag</option>
	</select>

Wenn ich auf der nächsten php-Seite die selektierten Werte abfrage, dann wird mir nur der letzte selektierte Tag angezeigt und nicht alle! Wie komme ich an ALLE selektierten Einträge ran

PHP:
foreach($_POST as $sFeldName=>$sFeldValue) {
	echo "Felname: ".$sFeldName."  ";
	echo "Value: ".$sFeldValue."<br>";
}
 
PHP:
<select multiple size="7" name="tage[]">
        <option>Montag</option>
        <option>Dienstag</option>
        <option>Mittwoch</option>
        <option>Donnerstag</option>
        <option>Freitag</option>
        <option>Samstag</option>
        <option>Sonntag</option>
    </select>

name="variable[]"
Dann wird die Variable als Array betrachtet
 
Ist es dann vielleicht auch noch möglich, dass jede Option über eine eigene Variable, wenn möglich nicht über einen Arrayindex, ansprechbar ist?
 
Du kannst doch bei Bedarf die Variablen wieder verteilen ..

PHP:
$monat = $array[0];
$dienstag = $array[1];

Ob Sinn macht sei dahin gestellt ...
Grüße, Ronin
 
Original geschrieben von ronin
Du kannst doch bei Bedarf die Variablen wieder verteilen ..

PHP:
$monat = $array[0];
$dienstag = $array[1];


Ob Sinn macht sei dahin gestellt ...
Grüße, Ronin

Das macht leider nicht all zu viel Sinn, da dass Array immer nur soviele Elemente enthält, wie Einträge aus der Select Box ausgewählt wurden. Eine statische Zuweisung, dass $dienstag also immer $array[1] ist, ist daher wenig praktikabel bis vollkommender Humbug ;).

Wo im allgemeinen der Sinn stecken soll, von den numerischen Indizes wegzukommen, kann ich allerdings auch nicht so recht nachvollziehen. Ich bitte das mal näher auszuführen.
 
Ich habe mehrere Formularseiten und von den ausgefüllten Formularen müssen alle Werte in eine Datenbank geschrieben werden bzw. werden die Formulare auch mit den Werten aus der Datenbank gefüllt.

Für das Multiselect in diesem Falle muss ich in der Datenbank auch sieben Spalten anlegen, damit ich für den Fall, das wirklich alle sieben Optionen markiert werden, alles in meine db schreiben kann.

Und da ich das schreiben der Datenbank immer über dieselbe Methode erledige, habe ich alle Datenbankfelder so bezeichnet wie die Elementnamen meiner Formulare. Auf diese Weise muss ich all die Updates nicht ausformulieren, sondern stelle mir den nötigen sql-String zusammen.

Mit oben genanntem Problem hab ich mir jetzt erstmal weitergeholfen, auch wenns mir nicht so dolle gefällt. Naja.

Hier mal der Code:

PHP:
$i = 0;
$j = 0;

$sql = "UPDATE aangifte SET ";

foreach($_POST as $fName=>$fValue) {
	//ignore hidden field name=next
	if($fName != 'next') {
		//for multiselect
		if(count($fValue) > 1) {
			foreach($fValue as $val) {
				//not nice, but for now...
				if($val=="Montag") {
					$j=1;
				} else if($val=="Dienstag") {
					$j=2;
				}else if($val=="Mittwoch") {
					$j=3;
				}else if($val=="Donnerstag") {
					$j=4;
				}else if($val=="Freitag") {
					$j=5;
				}else if($val=="Samstag") {
					$j=6;
				}else if($val=="Sonntag") {
					$j=7;
				}

				if($i>0) {
					$sql = $sql.", ";
				}
				$sql = $sql.$fName."_".$j."=";
				$sql = $sql."'".$val."' ";
				$i++;
				$j++;
			}
		} else {
			if($i>0) {
				$sql = $sql.", ";
			}
			$sql = $sql.$fName."=";
			$sql = $sql."'".$fValue."' ";
			$i++;
		}
	}
}

$sql = $sql."WHERE aangifteID=".$aangifte_id;

$result = mysql_query($sql);

Es funktioniert soweit erstmal, aber wenn jemand noch eine schönere Idee hat...ich bin für alles offen. Und schliesslich: je länger man auf den selben Salat schaut, desto blinder kann man davon werden ;)
 
Zurück