Arrayprobleme

sirvival

Erfahrenes Mitglied
Hallo allerseits,

ich habe mal eine kurze Frage zu PHP Arrays.

In einem Formular lasse ich Werte eintragen. Diese Werte landen in einem Array und werden mit $POST übergeben.
Allerdings verhagelt es mir das Arrayformat total.
Hat da jemand eine Idee wie ich das ändern kann?

var_dump $input
array(2) {
["Wert1"]=> array(1) { [0]=> string(4) "1234" }
["Wert2"]=> array(1) { [0]=> string(4) "5678" }
}

var_dump $_POST["$input"]

array(2) {
["Wert1"]=> array(1) { [0]=> array(1) { [0]=> string(4) "1234" } }
["Wert2"]=> array(1) { [0]=> array(1) { [0]=> string(4) "5678" } }
}

Ich habe eigentlich nur vor die eingetragenen Werte in existierendes Array einzutragen, um mit diesem weiter zuarbeiten.


wie immer schon mal DANKE!!
 
Zeig doch mal dein HTML-Formular, und besonders die name-Attribute der Formelemente!

So wie dein Dump aussieht, vermute ich mal: "Wert1[]" bzw. "Wert2[]". Wenn du für Wert1 ohnehin nur einen Wert brauchst, kannst du ja auch "Wert1" schreiben oder Wert[] für alle Werte-Felder.

Die eckigen Klammern bewirken, dass die Werte von PHP als ein Array angesehen werden...
 
So jetzt habe ich selber noch mal geschaut und das Problem erkannt.

Der Ausgangspunkt ist dass ich ein Formular mit folgendem Inhalt habe:
PHP:
$content .="<td>Wert1</td><td align=\"left\" ><input type=\"text\" size=\"50\" maxlength=\"32\" name=\"input[Phone][]\" value=\"".htmlspecialchars($input["Wert1"][0])."\"  class=\"text\" />".$phone_error."</td>\n";

Mein Fehler war nun, dass ich anstelle des Feldes mit dem relevanten Inhalt das ganze Array eingegeben habe.
PHP:
//vorher
htmlspecialchars($input["Wert1"][0][])
//nachher
htmlspecialchars($input["Wert1"][0])

Eigentlich logisch! Ich will ja schließlich nur den Wert ausgeben und nicht das ganze Array mitsammt der Valedierungsflags.




:suspekt:
 
Hallo Dennis,

es kann nur einen Wert geben, aber ich glaube ich poste hier nochmal den
vollständigen Code wenn ich wieder Rechner sitzte.

[EDIT]
also hier nochmal der komplette Code

PHP:
<?
//Funktion zur Validierung
function validateForm($input,$muss)
	{
		foreach ($input as $key =>$val) 
			{
				if(in_array($key, $muss))
					{
						$input[$key][1] = 1;
					}
				else
					{
						$input[$key][1] = 0;
					}
			}
		
		while(list($key,$val)=each($input))
			{
				switch($key)
					{
						case  "Phone":
								if( empty($input[$key][0]) OR (empty($input[$key][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 1;
									}
								else
									{
										$input[$key][2] = 0;
									}
						break;
		
						case  "Mobile":
								if( empty($input[$key][0]) OR (empty($input[$key][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 1;
									}
								else
									{
										$input[$key][2] = 0;
									}
						break;				
		
						case  "Password1":
								if( isset($input[$key][0]) AND ($input[$key][0] == $input["Password2"][0]) OR ( isset($input[$key][0]) AND ($input[$key][0] == $input["Password2"][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 0;
									}
								else
									{
										$input[$key][2] = 1;
									}
						break;
		
						case  "Adress":
								if( empty($input[$key][0]) OR (empty($input[$key][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 0;
									}
								else
									{
										$input[$key][2] = 1;
									}
						break;
						
						case  "Zip":
								if( empty($input[$key][0]) OR (empty($input[$key][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 1;
									}
								else
									{
										$input[$key][2] = 0;
									}
						break;
		
					} //switch
			} //while
			return $input;
	} //function 
	
	
if( empty($_POST['controlflag']))
	{
		// get phone number from the database
		//$sql = "SELECT ....."; 
		//$result = mysql_query ($sql);
		$input["Mobile"][0] = 12345;
		
		// get mobile number from the database
		//$sql = "SELECT ....."; 
		//$result = mysql_query ($sql);
		$input["Phone"][0] = 67890;
		
		// get passwd hash from the database
		//$sql = "SELECT ....."; 
		//$result = mysql_query($sql);
		//$formPhone = @mysql_result($result, 0);
	}

if(isset($_POST["formSubmit"]))
	{
		$required_input=array('Phone','Mobile'); //Felder die gefüllt sein müssen
		$input=$_POST["input"];  // aus dem Formular übergebenes Array
		$input = validateForm($_POST["input"],$required_input);// return Array mit vier Werten

		foreach ($input as $key =>$val) 
			{
				$count += $input[$key][2];
			}
		if($count == 0)
			{
				print "Alle Werte OK";  //Eintrag in die Datenbank
			}
		else
			{
				if($input["Password1"][2] == 1) 
					$pwd_error = "<font color=\"#ff0000\"> Please specify two identical passwords.</font>\n"; 
				if($input["Phone"][2] == 1) 
					$phone_error = "<font color=\"#ff0000\"> Please specify your phone number.</font>\n";
				if($input["Mobile"][2] == 1) 
					$mobile_error = "<font color=\"#ff0000\"> Please specify your cell phone number.</font>\n";
			}
	}

$content .= "<form method=\"POST\" action=\"form.php\">\n";
$content .="<table border=\"0\" width=\"99%\" cellpadding=\"2\" cellspacing=\"0\" class=\"dtable\">\n";
$content .="<tr class=\"theader\">\n";
$content .="<td colspan=\"2\">Benutzerdaten &auml;ndern </td>\n";
$content .="</tr>\n";
$content .="<tr class=\"tbody\">\n";
$content .="<td>Name</td><td align=\"left\">NAME</td>\n";
$content .="</tr>\n";
$content .="<tr class=\"tbody\">\n";
$content .="<td>Vorname</td><td align=\"left\" >VORNAME</td>\n";
$content .="</tr>\n";
$content .="<tr class=\"tbody\">\n";
$content .="<td>Password</td><td align=\"left\" ><input type=\"password\" size=\"50\" maxlength=\"32\" name=\"input[Password1][]\" class=\"text\" /> (Leave blank to stay the same.)";
$content .="</td>\n";
$content .="</tr>\n";
$content .="<tr class=\"tbody\">\n";
$content .="<td>Password (best.)</td><td align=\"left\" ><input type=\"password\" size=\"50\" maxlength=\"32\" name=\"input[Password2][]\" class=\"text\" />".$pwd_error."</td>\n";
$content .="</tr>\n";
$content .="<tr class=\"tbody\">\n";
$content .="<td>E-Mail</td><td align=\"left\" >VORNAME.NACHNAME@PROVIDER.DE</td>\n";
$content .="</tr>\n";
$content .="<tr class=\"tbody\">\n";
$content .="<td>Telefon</td><td align=\"left\" ><input type=\"text\" size=\"50\" maxlength=\"32\" name=\"input[Phone][]\" value=\"".htmlspecialchars($input["Phone"][0])."\"  class=\"text\" />".$phone_error."</td>\n";
$content .="</tr>\n";
$content .="<tr class=\"tbody\">\n";
$content .="<td>Mobil</td><td><input type=\"text\" size=\"50\" maxlength=\"32\" name=\"input[Mobile][]\" value=\"".htmlspecialchars($input["Mobile"][0])."\" class=\"text\" />".$mobile_error."</td>\n";
$content .="</tr>\n";
$content .="<tr class=\"tbody\">\n";
$content .="<td align=\"left\"><input type=\"hidden\" name=\"controlflag\" value=\"control_flag\" /></td><td><input type=\"submit\" name=\"formSubmit\" value=\"ändern\" class=\"button\"/></td>\n";
$content .="</tr>\n";
$content .="</table>\n";
$content .="</form>\n";


	
print $content;	
	
	

?>
 
Zuletzt bearbeitet:
Also wenn es nur je einen Wert fuer Phone, Mobile, etc. gibt, dann sollte es kein Problem sein wie ich es zuvor beschrieben hab.

Siehe hier:
Dennis Wronka hat gesagt.:
Aender mal
Code:
name=\"input[Phone][]\"
in
Code:
name=\"input[Phone]\"
um.
Dann hast Du halt input[Phone], input[Mobile], etc.
Ich seh da kein Problem. Probier es doch einfach mal aus.
 
Zurück