Seite 1 von 1

php: erschachteltes array per post uebertragen

Verfasst: 06.03.2007, 09:42
von nerd
hallo,

ich versuch hier ein verschachteltes array in einem formular zu editieren, allerdings habe ich keine ahnung wie ich alle diese werte adressieren muss. hier mal ein beispiel:

Code: Alles auswählen

<?
$data = array&#40;
	"name"=>"this guy",
	"address"=>array&#40;
		"street" => "s. mile",
		"zip"=>"123",
		"city"=>"mooflake town"&#41;,
	"email"=>"spam@hotmail.com"
&#41;;

echo '<pre>';
print_r&#40;$data&#41;;
echo '</pre>';

echo '<form action="" method="POST">';
echo edit&#40;$data, "data"&#41;;
echo '<input type="reset">';

echo '<pre>';
print_r&#40;$_POST&#41;;
echo '</pre>';



function edit&#40;$array, $name=""&#41; &#123;
	$bf = "<ul>"."\n";
	foreach&#40;$array as $key=>$value&#41; &#123;
		//$key = '&#91;'.$name.'&#93;&#91;'.$key.'&#93;';
		if&#40;is_array&#40;$value&#41;&#41; &#123;
			$bf .= edit&#40;$value, $key&#41;;
		&#125;
		else &#123;
			$bf .= '<li><input name="'.$key.'&#91;&#93;" value="'.$value.'"></li>'."\n";
		&#125;
	&#125;
	$bf .= '</ul>'."\n";
	return $bf;
&#125;
?>
was muss ich aendern, damit ich nach einem klick auf den submit-button das selbe array (mit den werten aus dem formular natuerlich) wieder angezeigt bekomme?

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 06.03.2007, 10:12
von sfancy

Code: Alles auswählen

$bf .= '<li><input name="'.$key.'&#91;&#93;" value="'.$value.'"></li>'."\n";
Probiers mal mit:

Code: Alles auswählen

$bf .= '<li><input name="foo&#91;'.$key.'&#93;" value="'.$value.'"></li>'."\n";
In $_POST["foo"] sollte dann dein Array zu finden sein.

Verfasst: 06.03.2007, 11:15
von nerd
nahe dran, bringt mich aber bei meinem richtigen problem nicht weiter. dort sind die arrays bis zu 3 ebenen tief, ich weiss einfach nicht wie ich die adressieren muss.

hier bekomme ich sowas raus wie
[data] => Array
(
[name] => ffff
[email] => spam@hotmail.gggg
)

[address] => Array
(
[street] => s. mile
[zip] => 123
[city] => mooflake town
)

woher weiss ich denn da das "address" in "data" gehoert - hier geht mir ja eine ebene verloren...?

Verfasst: 06.03.2007, 11:39
von alpening

Code: Alles auswählen

$data&#91;name&#93; = ...;
$data&#91;email&#93; = ...;
$data&#91;address&#93;&#91;street&#93; = ...;
$data&#91;address&#93;&#91;plz&#93; = ...;
$data&#91;dingsbums&#93;&#91;dingsbums2&#93;&#91;dingsbums3&#93; = ...;
geht das in deine richtung

Verfasst: 06.03.2007, 12:56
von Southmedia
Öhm, dafür gibt es eigentlich folgende Funktion: https://www.php.net/serialize

Verfasst: 06.03.2007, 20:48
von nerd
danke, ich werde mal versuchen die loesung von alpening umzusetzen.
serialize nuetzt mir hier nix; ich will ja den inhalt in einem formular bearbeiten - serialize brauch ich erst wenn ich das ergebniss dann irgendwo speichern will.

Verfasst: 06.03.2007, 22:03
von nerd
eigentlich ganz simpel wenn man erstmal rausbekommen hat wie es geht:

Code: Alles auswählen

   function edit&#40;$array, $root&#41; &#123;
       $bf = "<ul>"."\n";
       foreach&#40;$array as $key=>$value&#41; &#123;
           $key = $root.'&#58;&#58;'.$key;
           if&#40;is_array&#40;$value&#41;&#41; &#123;
               $bf .= edit&#40;$value, $key&#41;;
           &#125;
           else &#123;
               $name = fieldname&#40;$key&#41;;
               $bf .= '<li><input name="'.$name.'" value="'.$value.'">'.$key.'</li>'."\n";
           &#125;
       &#125;
       $bf .= '</ul>'."\n";
       return $bf;
   &#125;
 
   function fieldname&#40;$address&#41; &#123;
       //build correct form address
       $data = explode&#40;"&#58;&#58;", $address&#41;;
        $formname = "";
       foreach&#40;$data as $level=>$address&#41; &#123;
           if&#40;$level==0&#41; &#123;
               $formname = $address;
           &#125;
           else &#123;
               $formname .= '&#91;'.$address.'&#93;';
           &#125;
       &#125;
       return $formname;
   &#125;
:D :D :D

Verfasst: 07.03.2007, 10:13
von Southmedia
Oh, ich sollte wohl genauere lesen. Sorry.