PHP Form HTML Array Keys gehen verloren

NickD

bekommt Übersicht
Hallo,

ich habe ein Problem mit Arrays in Formularen bzw. dem vergeben von Array-Keys.

Beispiel:

HTML:
<form action="" method="post">
<input type="text" name="meinArray[meinKey]" value="meinValue">
<input type="hidden" name="hiddenArr[2]" value="meinValue">
<input type="submit" name="submit" value="senden">
</form>

Wenn ich dieses sende, sollte per Post folgendes verschickt werden:

meinArray[meinKey] = meinValue
hiddenArr[2] = meinValue

jedoch verändern sich die Keys:

meinArray[0] = meinValue
hiddenArr[0] = meinValue

Ich habe dazu mal ein Test-Script online gestellt, welches folgendes Formular enthält:

HTML:
<form action="" method="POST">
<input type="hidden" name="foo[bar]" value="true">
<input type="submit" name="senden" value="senden mit POST">
</form>

gesendet wird dort fälschlicherweise:

PHP:
array(2) {
  ["foo"]=>
  array(1) {
    [0]=>
    string(4) "true"
  }
  ["senden"]=>
  string(15) "senden mit POST"
}

und so sollte es sein:

PHP:
array(2) {
  ["foo"]=>
  array(1) {
    ["bar"]=>
    string(4) "true"
  }
  ["senden"]=>
  string(15) "senden mit POST"
}

hier gehts zum Script

Meine PHP-Version ist 5.2.6 (ohne Suhosin).
Über Hilfe würde ich mich riesig freuen....sitze an dem Problem schon ca. eine Woche und über Google lässt sich nichts finden.

LG
 
Noch zur Info das gesamte Dokument inkl. Doctype:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
    	<title>Test</title>
    </head>
   	<body>
<form action="" method="POST">
<input type="hidden" name="foo[bar]" value="true">
<input type="submit" name="senden" value="senden mit POST">
</form>
	</body>

</html>
 
Bedenke das Du ein Array in einem Array hast.
Variablen die Du über Post sendest werden in dem Array $_POST gespeichert.

Teste mal folgenden Zugriff auf "foo[bar]".

$_POST[foo][bar]

ich habe einmal folgendes Formular getestet:
HTML:
<form action="" method="POST">
<input type="hidden" name="foo[one]" value="true">
<input type="hidden" name="foo[two]" value="bla">
<input type="submit" name="senden" value="senden mit POST">
</form>

Und bekomme mit "print_r($_POST)" folgendes Ergebniss.
Array ( [foo] => Array ( [one] => true [two] => bla ) [senden] => senden mit POST )

Vielleicht hilft Dir das ja weiter.
 
Bedenke das Du ein Array in einem Array hast.
Variablen die Du über Post sendest werden in dem Array $_POST gespeichert.
.

Das habe ich bedacht, dass ich ein Array im Array zurück bekomme....auf meinem lokalen Server ist das auch der Fall, nur nicht online. $_POST[foo][bar] bleibt bei mir online leer.....hattest du mal mein Test-Script getestet? (hier) Dort habe ich ein var_dump($_POST) eingebunden und man sieht das gesamte POST-Array nach dem absenden und auch, dass der Key "bar" nicht vorhanden ist und durch [0] ersetzt wurde. Das passiert auch, wenn ich in einer durchlaufenden Nummerierung eine Nummer weglasse. In diesem Fall rücken die nächsten dann nach....
 
Zuletzt bearbeitet von einem Moderator:
Seltsam.
Könnte es an Deinen Servereinstellungen liegen?

Ich habe mal ein Testscript auf meinen Server hochgeladen. klick

So sieht mein Script aus:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
    	<title>Test</title>
    </head>
   	<body>
<form action="" method="POST">
<input type="hidden" name="foo[one]" value="true">
<input type="hidden" name="foo[two]" value="bla">
<input type="submit" name="senden" value="senden mit POST">
</form>
	</body>

</html>
<?PHP
print_r($_POST);
?>

Dort wird alles korrekt übertragen.

Wenn Du magst, dann kannst Du mal Dein komplettes Script hier anhängen.
Dann lade ich es mal bei mir hoch.

Damit könnten wir dann zumindest Scriptfehler ausschließen.
 
Ich habe nun ein Ansatzpunkt....folgendes:

Ich miete meine Domain über united-domains und mache eine versteckte Weiterleitung zu meinem Server. Wenn ich die Serveradresse nehme und das Script aufrufe, wird alles korrekt gemacht....wenn ich über die versteckte Weiterleitung gehe, gehen die Keys verloren.

Merkwürdig ist:

Ich nutze für Firefox das Plugin Firebug. Damit kann man die Post-Daten sehen. Firefug zeigt mir das Post-Array korrekt (also mit dem Key "bar") und var_dump nicht (Key "0").
 
Ich kann mir zwar nicht vorstellen warum, aber Deiner Beschreibung nach kann es nur an der Weiterleitung liegen.

Was passiert wenn Du den Pfad im Form-Tag angibst?

<form action="deine_domain.de" method="POST">
 
Ich kann mir zwar nicht vorstellen warum, aber Deiner Beschreibung nach kann es nur an der Weiterleitung liegen.

Was passiert wenn Du den Pfad im Form-Tag angibst?

<form action="deine_domain.de" method="POST">

Dann werden die Post-Daten richtig übermittelt, nur befinde ich mich nicht mehr auf meiner Wunsch-Domain, sondern auf der Server-Domain.
 
Also mal langsam:
Dein Testscript führt mich zur Domain http://www.undertunes.de/.

Diese Domain (undertunes) hast Du bei einem Domaindienst gemietet und wird auf einen anderen Server umgeleitet, auf welchem Dein Script liegt.

Deinen Form-Tag hast Du demzufolge in "<form action="http://www.undertunes.de/test.php" method="POST">" geändert.

Habe ich das soweit richtig verstanden?

P.S.
Ach übrigens:
Herzlich willkommen im abgefahrensten Forum nördlich des Polarkreises.;):)
 
Ich habe eine Domain gemietet (undertunes.de) und diese leite ich versteckt auf meine Server-Domain (meineServerDomain.de). Wenn ich meineServerDomain.de/test.php aufrufe, funktioniert alles bestens. Wenn ich über undertunes.de/test.php gehe, gehen die Keys verloren.
Wenn ich im Formular das action ändere:

HTML:
<form action="meineServerDomain.de/test.php" method="post">
[...]
</form>

und dann über undertunes.de/test.php das Formular absende, wird alles richtig übergeben, jedoch befinde ich mich nach dem Senden nicht mehr auf undertunes.de/test.php, sondern auf meineSeverDomain.de/test.php.

Ich hoffe ich habe mich verständlich ausgedrückt :)

P.S.: Ich freue mich Mitglied dieses abgefahrenen Forums zu sein^
 
Ich hoffe ich habe mich verständlich ausgedrückt :)

Jo, hast Du.:)
Ich wollte nur sicher gehen ob ICH alles verstanden habe.
Das Alter halt....:rolleyes:lol

Wenn Du im Formtag nur den Dokumentnamen, also
HTML:
<form action="test.php" method="post">
[...]
</form>
angibst, landest Du dann bei undertunes.de?

Oder hast Du das Ganze einmal mit Deiner "Wunsch-Domain" getestet.

HTML:
<form action="http://www.undertunes.de/test.php" method="post">
[...]
</form>
Grundsätzlich gehen ja nur die Keys verloren, was das Ganze etwas seltsam erscheinen läßt.

Wenn alles nichts hilft, dann solltest Du einmal Deinen Domain-Dienst kontaktieren.
 

Meinen Provider habe ich bereits kontaktiert und warte geduldig auf eine Antwort....

Dokumentnamen: Ich bleibe zwar bei meiner Wunschdomain, jedoch bringt es keine Veränderung.

Wunsch-Domain: selbes Ergebnis, mit dem selben Fehler :(

Merkwürg finde ich, dass das Plugin Firebug die Post-werte korrekt anzeigt.....da frag ich mich, woher er die holt....
 
Zuletzt bearbeitet von einem Moderator:
Merkwürg finde ich, dass das Plugin Firebug die Post-werte korrekt anzeigt.....da frag ich mich, woher er die holt....
Vom Browser.;)

Du könntest vielleicht mal testweise das Formular per "GET" versenden und dann in der Adressleiste schauen, was an Daten zurückkommt.

Ich weiß jetzt ja nicht, wofür Du an dieser Stelle ausgerechnet ein Array benötigst, aber vielleicht ist es ja möglich die gewünschten Daten irgendwie anders zu bekommen.

Habe gerade bei United-Domains was interessantes gefunden (Das rot geschriebene).
Diese Weiterleitungsart "simuliert" einen Webserver. Es ist auf den ersten Blick NICHT zu erkennen, bei welchem Provider die eigentliche Site liegt. Einzelne Unterverzeichnisse können direkt angesprochen werden (z.B. united-domains.de - Support). Die eigentlich weitergeleitete Domain erscheint dann also wie der echte Server. Auch Scriptbefehle, Formulare, htaccess usw. werden weitergegeben. Nachteile dieser Weiterleitung: Der Seitenaufbau wird je nach Serverstandort verlangsamt, da alle Dateien zuerst zu unserem Server übertragen werden, und von dort aus weitergereicht werden. Außerdem können Daten nur via http übertragen werden, auf FTP- oder https-Ressourcen kann leider nicht zugegriffen werden. Bei dieser Weiterleitungsart können Sie auch ganz einfach Ihre IP-Adresse eintragen - der Besucher Ihrer Website wird nichts merken.

VORSICHT: Im Formular zur Aktivierung der Funktion keine HTML oder sonstigen Dateien angeben. URL-Hiding funktioniert nur, wenn im Formular ein Verzeichnis eingetragen wurde.

Richtig:
http://freewebspaceprovider.de/kunde02

Falsch:
http://freewebspaceprovider.de/kunde02/index.html

Vielleicht musst Du erst ein Verzeichniss erstellen und darin Dein Script als index.php ablegen.
 
Per Get wird alles wunderbar versendet....ist nur nicht immer das beste für alle Daten.
Das war nur ein Beispiel um die Problematik zu zeigen...
 
Hast Du das mit dem Verzeichniss mal getestet?

(Ich habe meinen Beitrag oben gerade editiert und weiß nicht, ob Du das bereits gelesen hast.)
 
Eine weitere Möglichkeit wäre über einen Nameserver weiterzuleiten....dafür muss ich mich mal mit dem Thema DNS beschäftigen. Man kann bei UD einen Nameserver angeben oder einen a-/Cname Eintrag erstellen....
 
Ich habe nun ein A-Name Eintrag zu der IP meines Servers eingerichtet....und siehe da, es funktioniert (erstmal mit einer anderen Domain gestestet). Die Umstellung kann bis zu 24 Stunden dauern.

Erstmal vielen Dank für die tolle Hilfe!
Ich werde das Forum auf jeden Fall weiterempfehlen und vielleicht kann ich mal jemandem weiterhelfen :)
 
Oben