Dynamisch erzeugte Hidden Fields

sh0x

Erfahrenes Mitglied
Hallo PHP Profis,

ich brauche mal eure Hilfe.

erzeuge mit
Code:
for($i=1;$i<=count($files);$i++) {
              $name = "mod_file".$i; 
              $this->form_header .= "<input type=\"hidden\" name=\"$name\" value=\"\" />";          
            }
dynamisch Hidden Fields. Das brauche ich, weil in dem Array $files[] unterschiedlich viele Dateien sind zu denen ich Infos zur nächsten Seite schleppen möchte. Also lasse ich dynamisch Hidden Fields erstellen. Klappt aber nicht. Nur das erste Hidden Field mit dem Namen "mod_file1" wird erstellt und über $_POST übergeben. Auch wenn ich 10 Dateien habe wird nur das "mod_file1" erstellt.
Ich suche mir schon einen Wolf, finde den Fehler einfach nicht. Vielleicht fällt euch ja was ins Auge ;)

Über jeden Tipp bin ich dankbar!
sh0x
 
Assoziiere die Felder doch direkt mit den Elementen des Arrays:
PHP:
<?php

	$arrayKey = array_keys($files);
	foreach( $arrayKeys as $key ) {
		$this->form_header .= '<input type="hidden" name="mod_file['.var_export($key, true).']" value="" />';
	}

?>
Damit befinden sich die Informationen zur $file[foobar]-Arrayelement parallel im $mod_file[foobar]-Arrayelement.

Alternativ solltest du vielleicht noch über die serverseitige Speicherung dieser Daten nachdenken, etwa mithilfe von PHP-Sitzungen.
 
Das funktioniert leider auch nicht.

Das ist die HTML-Ausgabe meiner Hidden Fields:
Code:
<input type="hidden" name="MAX_FILE_SIZE" value="5000000" />
            <input type="hidden" name="sendfiles" value="1" />
            <input type="hidden" name="postfiles" value="YTo1OntzOjU6ImZpbGUxIjthOjQ6e3M6NDoibmFtZSI7czoyMjoiYXNka2xmYXNkZl92My4wX2VuLnBkZiI7czo0OiJzaXplIjtpOjEMDtzOjg6InRlbXBuYW1lIjtzOjE0OiIvdG1wL3BocGc4Y1F5VCI7czo2OiJmZWhsZXIiO3M6ODE6ImFzZGZhc2RmX3YzMy4zMzMzX2VuLnR4dCBpc3QgS0VJTkUgUERGLURhdGVpIHVuZWUgbXUmc3psaWc7IGdyJm91bWw7JnN6bGlnO2VyIGFscyAxMDAgQnl0ZXMgdW5kIGtsZWluZXIgYWxzIDUwMDAwMDAgTUIgc2VpbiEiO319" />
<input type="hidden" name="mod_file1" value="" />
<input type="hidden" name="mod_file2" value="" />
<input type="hidden" name="mod_file3" value="" />
<input type="hidden" name="mod_file4" value="" />
<input type="hidden" name="mod_file5" value="" />

Und das ist die Fehlerausgabe von PHP:
Code:
Notice: Undefined index: mod_file2 in /var/www/http01/docs/upload.inc.php on line 167

Notice: Undefined index: mod_file3 in /var/www/http01/docs/upload.inc.php on line 167

Notice: Undefined index: mod_file4 in /var/www/http01/docs/upload.inc.php on line 167

Notice: Undefined index: mod_file5 in /var/www/http01/docs/upload.inc.php on line 167

Das verstehe ich nun garnicht, da mir ja das HTML zeigt, dass das Hidden Feld gesetzt ist. Und das erste Feld, mod_file1 erscheint ja auch und es gibt keine Fehlermeldung. Woran könnte das liegen?
 
Hast du meinen Vorschlag probiert? Denn damit könntest du die übertragenen Daten wie folgt verarbeiten:
PHP:
$arrayKeys = array_keys($_POST['file']);
foreach( $arrayKeys as $key ) {
	var_dump( $_POST['file'][$key] );
	var_dump( $_POST['mod_file'][$key] );
}
 
Gumbo hat gesagt.:
Hast du meinen Vorschlag probiert? Denn damit könntest du die übertragenen Daten wie folgt verarbeiten:
PHP:
$arrayKeys = array_keys($_POST['file']);
foreach( $arrayKeys as $key ) {
	var_dump( $_POST['file'][$key] );
	var_dump( $_POST['mod_file'][$key] );
}

Sorry, ich verstehe nicht ganz, wie das meine Fehlermeldungen verhindern soll. Ich habe meinen Fehler nun gefunden, er lag wo ganz anders und ich habe stundenlang im Dunkeln getappt. Kennst du nebenbei ein Tool, mit dem ich meinen PHP Code besser strukturieren oder evtl visualisieren kann? Ich mache nämlich viele Fehler und weiß nicht, wie ich mir einen besseren Programmierstil aneignen kann.
Ist es eigentlich besser, wenn man mehrere Klassen und eine index.php hat, die die Klassen instanziert, dass man dann alle POST-Variablen auch in der index setze, also etwa so:

PHP:
// Spracheingrenzung
$language = isset($_POST['language']) && $_POST['language']!='' ? trim($_POST['language']) : '';
// Blätterfunktion
$browse = isset($_POST['browse']) && $_POST['browse']!='' ? trim($_POST['browse']) : '1';
$actualpage = isset($_POST['actualpage']) && $_POST['actualpage']!='' ? trim($_POST['actualpage']) : '1';
// Sortierfunktion
$column = (isset($_POST['column']) && $_POST['column']!='') ? $_POST['column'] : '';
$direction = (isset($_POST['direction']) && $_POST['direction']!='') ? $_POST['direction'] : '';
Das hätte ja den Nachteil, dass mans in jeder Funktion globalisieren müsste, oder?

Oder ist das totaler Quatsch und macht man das innerhalb der Klassen mit $this->variable = .... ?

Dann hätte man die Post-Variablen aber nicht so schön beieinander stehen, was unübersichtlicher wäre, oder?

Naja, ich brauche irgendwie noch viele Tipps, um zu einem guten Programmierstil zu kommen. Vielleicht weißt du ja, was ich ändern kann.

Gruß
 
Zurück