• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

<select><option> mit mehreren werten

gery

New member
Hi jswelter!

Ich habe wiedermal ein kleines problem -.-, nämlich folgendes:
Ich habe ads hier:
PHP:
<select name=select multiple>
 <option value=89>Auswahl 1</option>
 <option value=87>Auswahl 2</option>
 <option value=201>Auswahl 3</option>
</select>

So, nun tu ich das submiten (es ist in ner <form>) und jetzt möchte ich php seitig diese werte verarbeiten, am liebsten hätte ich, dass wenn eines selecktiert ist, zb "Auswahl 1", dass dann der wert 89 daher kommt, oder wenn ich "Auswahl 1" & "Auswahl 3", dass die werte 89 und 201 zurückkommen... tut es aber nicht! ich bekomme nur immer eine Zahl (und zwar die höchste) und diese Zahl beschreibt die Position der Option, sprich bei "Auswahl 2" bekomme ich den wert 2 zurück, wenn ich "Auswahl 3" & "Auswahl 1" anklicke, dann kommt nur die zahl 3 zurück!

Kann mir da jemand weiterhelfen?

gruss

gEry
 
Moin!

Leider sieht PHP da etwas vor, das nicht erlaubt ist: '[]' an den Feldnamen hängen. Hier ein Beispiel wie es auch ohne die eckigen Klammern geht.

Ahoi - Pit
 
Hi!
womstar schrieb:
Warum ist das nicht erlaubt?
Von W3C nicht?
Warum weiß ich nicht, es ist aber so: kuckst Du... Ich fand's immer schon bescheuert, da sich ja mit den '[]' an Feldnamen die Arrays in PHP quasi automatisch ergeben. Die Trickserei, sich die Arrays selbst zu basteln finde ich an sich auch überflüssig. Aber bin nunmal Pedant. :D

Ahoi - Pit
 
hi pit-r,

danke für deinen code... ich muss ihn jedoch noch wenig ändern (alles ein code, ohne funktion):
PHP:
$daten = $_POST;
	$muell="&".file_get_contents("php://input");
	
	while(list($schluessel,$wert)=each($daten))
	{
		$pos=preg_match_all("/&".$schluessel."=([^&]*)/i",$muell,$regs,PREG_PATTERN_ORDER);
		
		if((!is_array($wert))&&($pos>1))
		{
			$saubereDaten[$schluessel]=array();
			
			for($i=0;$i<$pos;$i++)
			{
				$saubereDaten[$schluessel][$i]=urldecode($regs[1][$i]);
			}
		}
		else
		{
			$saubereDaten[$schluessel]=$wert;
		}
	}
	//var_dump($saubereDaten);
	
	$_POST = $saubereDaten;
	
	foreach($_POST as $name => $wert)
	{
		if(is_array($wert))
		{
			for ($i=0;$i<count($wert);$i++)
			{
				echo "Feldname: $name"."[".$i."]; Wert: $wert[$i]<br>";
			}
		}
		else
		{
			echo "Feldname: $name; Wert: $wert<br>";
		}
	}
JEdoch wird nicht der richtige $wert zurückgegeben... siehst du gleich nen Fehler?

gruss

gEry
 
Moin!
gery schrieb:
JEdoch wird nicht der richtige $wert zurückgegeben... siehst du gleich nen Fehler?
Ich sehe nix, was da Müll verursachen könnte. Was kriegst denn Du für Werte?

Ahoi - Pit

PS - @womstar: validieren tut es.
 
@womstar hehe danke.... aber ich mache dieses ganze "geschiss" um möglichst übersichtlich zu coden, da es ein grooosses projekt ist :) (echt scheisse für sowas zeit zu verlieren müssen)

@pit-r: genau auch wieder wie vorher, von dem was ich ganz zuerst gepostet habe, erste auswahlt $wert=1, dritte auswahl, $wert=3....
 
@gery
Wo ist das Problem?
Ist doch übersichtlich:

Code:
<select name="select[]" size="20" multiple>

PHP:
foreach($_POST["select"] AS $daten) {
	print $daten;
}

@pit
Sorry, das ich jetzt doch mit dem komme.
 
@womstar: so nicht, aber so wie die von dem link, welche so ca 15 IF's gemacht haben^^

hier ist noch etwas mehr code, vllt sieht so jemand das problem:

erstellen des select:
PHP:
<select name="select_group" size="7" multiple='multiple' class="dropdown">
				  <?php
						if((count($msg)-1) > 0)
						{
							for($i = 0; $i <= count($msg)-1; $i++)
							{
								echo("<option value=".$msg[$i]['group_id'].">".$msg[$i]['group_name']."</option>");
							}
						}
						else
						{
							echo("<option value=9999>No user group found</option>");
						} 
				 
				  
				  ?>
				</select>
und:
PHP:
	$daten = $_POST;
	$muell="&".file_get_contents("php://input");
	
	while(list($schluessel,$wert)=each($daten))
	{
		$pos=preg_match_all("/&".$schluessel."=([^&]*)/i",$muell,$regs,PREG_PATTERN_ORDER);
		
		if((!is_array($wert))&&($pos>1))
		{
			$saubereDaten[$schluessel]=array();
			
			for($i=0;$i<$pos;$i++)
			{
				$saubereDaten[$schluessel][$i]=urldecode($regs[1][$i]);
			}
		}
		else
		{
			$saubereDaten[$schluessel]=$wert;
		}
	}
	var_dump($saubereDaten);
	
	$_POST = $saubereDaten;
	
	foreach($_POST as $name => $wert)
	{
		if(is_array($wert))
		{
			for ($i=0;$i<count($wert);$i++)
			{
				echo "Feldname: $name"."[".$i."]; Wert: $wert[$i]<br>";
			}
		}
		else
		{
			echo "Feldname: $name; Wert: $wert<br>";
		}
	}
sieht auch niemand so nen doofen fehler, wie was falsch benannt oder so? ich blicke grad gar nicht mehr durch, und ich würde es schon gerne so machen -.-
 
Vllt hilft das noch:

Wenn ich auf den submit Button klicke und ein var_dump($_POST); machen, dann kommt folgender Output:
Code:
array(2) { ["select_group"]=> string(1) "5" ["submit_button"]=> string(6) "Update" }
Und die Ausgabe der Schleife gibt folgendes aus:
Code:
Feldname: select_group; Wert: 5
Feldname: submit_button; Wert: Update
Es gibt den Wert (value=) des submit Buttons aus und nicht den Wert, welche zu einer <option> gehört!

Aber ich weiss nicht, ich sehe einfach keinen Fehler, ich denke, dass ich wieder mal zu müde bin (schon wieder 00.40 am hier :))
Ich hoffem dass nun jemand gleich die Lösung sieht!

gruss

gEry
 
Gery,
ich sehe überhaupt nicht wo jetzt Dein Problem ist.
Deine Ausgabe ist doch vollkommen korrekt.
Code:
array(2) { ["select_group"]=> string(1) "5" ["submit_button"]=> string(6) "Update" }
Und wie Du mehrere Werte auslesen kannst, wenn Du mehrere angewählt hast, hab ich Dir gezeigt.

Grüße Robert
 
hier ist das problem:

array(2) { ["select_group"]=> string(1) "5"


es gibt als wert 5 aus, weil es an der 5ten stelle ist (5te option)... aber es spukt mir nicht den value= wert aus, welchen ich da bei der <option> gesetzt habe. mit allem rest bin ich zufrieden :)

cheers

gEry
 
Fünf ist hier wahrscheinlich nicht die 5. Stelle, sondern die ID.
$msg[$i]['group_id']

Willst Du den Wert ID ($msg[$i]['group_id']) oder diesen Wert $msg[$i]['group_name'] ?

Grüße Robert
 
Hi womstar!

Ich hätte gerne Wert ID ($msg[$i]['group_id']) gehabt... da ich aber unter Zeitdruck stehe, weil die Website bald fertig sein muss, habe ich es mit checkboxen gemacht... hat "komischer" weise geklappt... es sollte, doch aber genau das selbe sein, oder nicht!?
 
Zurück
Oben