Probleme mit Mehrdimensionalen Arrays

Gray

Erfahrenes Mitglied
Erstmal der Quellcode

PHP:
<?php
include "../kontrolle.php";
?><!doctype HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<link href="../include/css.css" rel="stylesheet" type="text/css">
</head>
<body>
<FORM action="formular.php" method=post>
<input type="hidden" name="session" value="<?php echo $session; ?>">
<table border=0 align=center width="80%" cellspacing=0 cellpadding=0>
	<tr>
			<td width="50%"><p>
			<input type=image name="f_input" src="../grafik/buttons/input.jpg">
			<input type="submit" name="f_input" value="einfügen">
			</p></td>
			<td width="50%"><p>Eingabefeld hinzufügen.</p></td>
	</tr>
	<tr>
			<td><p>
			<input type=image name="absenden1" src="../grafik/buttons/passwort.jpg">
			</p></td>
			<td><p>Passwortfeld hinzufügen.</p></td>
	</tr>
	<tr>
			<td><p>
			<input type=image name="absenden1" src="../grafik/buttons/checkbox.jpg">
			</p></td>
			<td><p>Checkbox hinzufügen.</p></td>
	</tr>
	<tr>
			<td><p>
			<input type=image name="absenden1" src="../grafik/buttons/radiobutton.jpg">
			</p></td>
			<td><p>Radiobutton hinzufügen.</p></td>
	</tr>
	<tr>
			<td><p>
			<input type=image name="absenden1" src="../grafik/buttons/hidden.jpg">
			</p></td>
			<td><p>Verstecktes Feld hinzufügen.</p></td>
	</tr>
	<tr>
			<td><p>
			<input type=image name="absenden1" src="../grafik/buttons/select.jpg">
			</p></td>
			<td><p>Auswahlmenue hinzufügen.</p></td>
	</tr>
	<tr>
			<td><p>
			<input type=image name="absenden1" src="../grafik/buttons/textarea.jpg">
			</p></td>
			<td><p>Textfeld hinzufügen.</p></td>
	</tr>
</table>
<br>
<table border=1 align=center width="80%" cellspacing=0 cellpadding=0>
<?php
if(!$felder){

	$felder = array();

}


if(isset($f_input)){

$num = (count($felder) + 1);

$feld = array(

							"key" => "$num",
							"typ" => "input",
							"text" => "Name",
							"feldname" => "feld",
							"feldwert" => "wert"

							);

array_push($felder,$feld);

}

	$nr = 0;

	foreach($felder as $v) {
	
			if($v[typ] == "input"){
				echo "<tr>
								<td><p><input type=\"text\" name=\"text$nr\" value=\"$v[text]\"></p></td>
								<td><p><input type=\"text\" name=\"feldname$nr\" value=\"$v[feldname]\"></p></td>
								<td><p><input type=\"text\" name=\"feldwert$nr\" value=\"$v[feldwert]\"></p></td>
							</tr>";
			}
					
		$nr++;
	
	}

?>
<input type="hidden" name="felder" value="<?php echo $felder; ?>">
</table>
</form>
</body>
</html>

es soll ein Formular erstllt werden dynamisch, mein Problem ist nachdem ich auf einfügen klicke kommt folgende Fehlermeldung:

Code:
Warning: array_push(): First argument should be an array in /home/www/web1/html/ssl/user/scripte/formular.php on line 80

Warning: Invalid argument supplied for foreach() in /home/www/web1/html/ssl/user/scripte/formular.php on line 86

wenn ich jedoch das hidden Feld welches das Array felder enthält weglasse, kann ich das Array problemlos pushen, aber ebend nur einmal da ja der vorhergehende Stand nicht übertragen wird.

Line 80 ist diese Zeile:

PHP:
array_push($felder,$feld);
 
Zuletzt bearbeitet:
Hm also aufjedenfall ist eines deiner Parameter kein Array.

Ist vielleicht irgendwie ein RegisterGlobals Problem, da eines deiner Hiddenfelder "felder" heißt, was dann als $felder angesprochen werden kann (schlechte php.ini einstellungen ;)) und somit KEIN array ist, aber existiert, deshalb bringt deine if() auch nicht viel.
Das heißt, du kannst keine Arrayfunktionen darauf anwenden bzw es durch eine foreach() laufen lassen, weil es eben kein Array ist

Verstanden?

Edit: Also mach mal Register_Globals auf off, dann sollten die Fehlermeldungen zumindest weg sein.
 
OK verstanden hab ich es, aber ich hab da denoch ein Problem, wenn ich Register Globals änder, funktioniert sogut wie garnichts mehr ;)
das ist ein zu hoher aufwand als das es sich lohnen würde.
Wiekann ich bei eingeschaltetem Register Globals ein Array übertragen?
 
Wie ein Array übertragen?
Meinst du von einem Formular?
Kommt doch automatisch, ist in $_POST.

Und du weißt schon, dass Register Globals on sehr unsauber und unsicher ist?
Also raten kann man dazu nicht ...
 
Ja das Array wird per Formular übertragen.

$_POST gibt aber das gleiche Problem

ich konnte das Problem teillösen indem ich die Funktion serialize und unserialize verwendet hab, es sieht jetzt so aus:

PHP:
<?php

	$felder = unserialize($felder);

if(!$felder){

	$felder = array();

}


if(isset($f_input)){

$num = (count($felder) + 1);

$feld = array(

							"key" => "$num",
							"typ" => "input",
							"text" => "Name",
							"feldname" => "feld",
							"feldwert" => "wert"

							);

array_push($felder,$feld);

}

	$nr = 0;

	foreach($felder as $v) {
	
			if($v[typ] == "input"){
				echo "<tr>
								<td><p><input type=\"text\" name=\"text$nr\" value=\"$v[text]\"></p></td>
								<td><p><input type=\"text\" name=\"feldname$nr\" value=\"$v[feldname]\"></p></td>
								<td><p><input type=\"text\" name=\"feldwert$nr\" value=\"$v[feldwert]\"></p></td>
							</tr>";
			}
					
		$nr++;
	
	}
	
	$felder = serialize($felder);

?>

Allerdings wird das Array nur einmal gepusht, es behält immer nur einen Wert.
 
Zurück