Ich habe folgende HTML / PHP Seite:
<?php
if(empty($_SERVER['CONTENT_TYPE'])) {
$type = "application/x-www-form-urlencoded";
$_SERVER['CONTENT_TYPE'] = $type;
}
echo "<pre>";
var_dump($_POST);
var_dump(file_get_contents("php://input"));
echo "</pre>";
?>
<form method="post" action="test.php">
<input type="text" name="test[1]" />
<input type="text" name="test[2]" />
<input type="text" name="test[3]" />
<input type="submit" name="action" value="Go" />
</form>
Wie Sie sehen, wird das Formular gesendet und die erwartete Ausgabe ist ein POST-Array mit einem Array, das die ausgefüllten Werte enthält, und einem Eintrag "action" mit dem Wert "Go" (Schaltfläche). Egal welche Werte ich in die Felder eingebe; das ergebnis ist immer:
array(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
Irgendwie wird das Array mit dem Namen test geleert, die Variable "action" schafft es durch.
Ich habe die Live HTTP Headers-Erweiterung für Firefox verwendet, um zu überprüfen, ob die POST-Felder gesendet werden, und sie tun es. Die relevanten Informationen aus Live-HTTP-Headern (mit a, b und c als Werte in den Textfeldern):
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
test%5B1%5D=a&test%5B2%5D=b&test%5B3%5D=c&action=Go
Hat jemand eine Ahnung, warum das passiert? Ich bin total am ausflippen, es hat mich schon so viel Zeit gekostet ...
Aktualisieren:
Wir haben dies auf verschiedenen Servern versucht, auf Windows-Boxen funktioniert es, auf dem Ubuntu-Server mit PHP Version 5.2.4 (mit Suhosin) nicht. Es funktioniert sogar auf einem anderen Server, auch mit Ubuntu und der gleichen PHP-Version, auch mit Suhosin.
Ich habe die beiden Dateien unterschieden, dies ist die Ausgabe ( diff php.ini phps.ini
):
270c270
< memory_limit = 32M
---
> memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)
415c415
< variables_order = "EGCSP"
---
> variables_order = "EGPCS"
491d490
< include_path = ".:"
1253a1253,1254
> extension=mcrypt.so
>
In dieser Datei ist phps.ini der Server, auf dem es läuft, und php.ini ist der aktuelle Server. Sieht so aus, als gäbe es hier keine Probleme, oder?
Antworten:
Funktioniert es ohne die expliziten Indizes? Versuchen:
quelle
Es gibt eine Reihe von möglichen Gründen, warum das Post-Array leer sein könnte - es kann sein, dass es zu Fehlern von Menschen / Entwicklern kommt. Ich habe genau dieses Problem beim Upgrade von PHP 5.2 auf 5.4 festgestellt. Es war einfach, aber die Fehlersuche dauerte Stunden. In unserer config.php-Datei hatten wir die folgende Anweisung, um $ _POST-Arrays zu verarbeiten:
Magic Quotes war einmal aktiviert und in PHP-Versionen bis 5.2 funktionierte das oben Genannte einwandfrei, aber alles über Version 5.2 wird nicht verarbeitet und ein leeres Array wird zurückgegeben.
Wenn Sie nicht eingeschaltet haben,
error_reporting()
schlagen wir vor, dass Sie dies tun, und ich bin sicher, dass Sie in der Lage sind, das Problem zu beheben.Sie sollten auch nach veralteten Systemfunktionen "
magic_quotes
" suchen, da deren Verwendung einfach keine Ergebnisse liefert. Ich hoffe das hilft. Viel Glück. JCS :)quelle
Es gibt Fehlerberichte zu diesem oder ähnlichen Problemen im Bugtracker von PHP:
Leider wird keine Lösung erwähnt, aber Sie können versuchen, einen anderen CONTENT_TYPE oder gar keinen Inhaltstyp festzulegen.
quelle
Hatte ein ganz ähnliches Problem. Nun, zuallererst habe ich eine ganze Weile gebraucht, um zu diesem Beitrag zu gelangen. Um den Namen meines Problems herauszufinden, musste ich die PHP-Konsole installieren und herausfinden, wie ich sie verwenden soll. Debuggen Sie den Code, von dem ich nichts wusste. Gehen Sie dem Problem auf den Grund und bleiben Sie verwirrt.
Die Lösung war eigentlich ziemlich einfach. Drücken Sie in Chrome F12, um zu den Entwicklertools zu gelangen, wählen Sie "Netzwerk" und versuchen Sie, Ihr Formular zu veröffentlichen. Verfolgen Sie die Post-Anfrage und sehen Sie sich den Status an. Wenn es 301 ist (oder etwas anderes als 200) - Sie haben genau dasselbe Problem, das ich bis vor kurzem hatte!
Mein neuer Host-Provider leitete http://my_site.com auf http://www.my_site.com um . Ich musste lediglich einige Einstellungen im Rahmen meines CMS ändern (deins ist möglicherweise anders, aber in gewisser Weise ähnlich) als
zu
Und voila, die Magie und die Regenbogen und die Einhörner und meine Seite funktionieren endlich!
PS: Messing mit Ihren Hosting-Einstellungen könnte auch Ihr Problem lösen ... Wenn Ihr Problem meinem natürlich ähnlich ist ...
quelle
Ich bin mir nicht sicher, aber ich habe
usw. kann PHP verwirren. Ich würde die Eingabenamen in test_1, test_2 ändern und sehen, was passiert.
quelle
In Basis-PHP fällt mir nur eine Konfigurationsoption ein, die dies verhindern könnte:
post_max_size
Überprüfen Sie Ihre php.ini und die zugehörigen Dateien, um sicherzustellen, dass dieser Wert korrekt ist und nicht auf Null oder einen ungültigen Wert wie ein alphabetisches Zeichen gesetzt ist .Suhosin ermöglicht das Blockieren von Post-Variablen unter einer Vielzahl von Bedingungen, einschließlich der Array-Länge und der Länge des Variablennamens. Durchsuchen Sie Ihre php.ini-Dateien nach "suhosin", um festzustellen, ob Einstellungen vorhanden sind, insbesondere, wenn diese mit "suhosin.post" beginnen. ( Weitere Informationen zu den Parametern, an die ich denke, finden Sie unter http://www.hardened-php.net/suhosin/configuration.html#suhosin.post.max_array_depth .)
Abgesehen von einem großen Fehler in der Konfiguration, bei dem ein Wert auf eins oder null gesetzt wurde, sind Ihr Code (und Ihre Variablen) leider kurz genug, so dass dies ein langer Weg ist. Wenn das leer bleibt, ist mein nächster Vorschlag, die Apache- und PHP-Konfigurationen zu sichern, die Verzeichnisse zu bereinigen, die Pakete neu zu installieren und die Konfigurations-Chunks wieder einzurichten, bis der Code wieder funktioniert (alternativ: Aktualisieren Sie diesen Server Das funktioniert mit Configs vom nicht funktionierenden Server, bis beide kaputt sind. Da der gleiche-OS-gleiche-PHP-Server ordnungsgemäß funktioniert, ist dies mit ziemlicher Sicherheit ein Konfigurationsfehler auf dem fehlerhaften Server, aber das ist ein ziemlich großer Heuhaufen, den Sie durchsuchen müssen.
Versionskontrolle von / etc wird dringend empfohlen, bevor Sie damit beginnen - schauen Sie sich das etckeeper-Paket an. (Eigentlich empfehle ich seine Verwendung, Punkt. Erhebliche Schonung der geistigen Gesundheit, insbesondere auf einem Computer, auf dem mehr als eine Person Root-Zugriff hat.)
quelle
Ich habe überall Formulareingabefehler, seit ich von "stable" auf Debian "testing" umgestiegen bin. Es scheint, dass Apache2 oder PHP5 nicht mehrere Elemente in der Übermittlung mit demselben Namen verarbeitet. Beispielsweise; Ihr Formular hat zwei Eingaben mit dem Namen "mo". In der Vergangenheit hat es nur einer der Werte für "mo" geschafft. Jetzt scheint das Formular alle Daten nach dem ersten Auftreten eines doppelten Schlüssels zu löschen. Noch nicht sicher. Ich versuche immer noch, es herauszufinden.
quelle
Versuchen Sie, die php.ini von dem Server, der auf diesem Server läuft, zu kopieren (sichern Sie jedoch zuerst die php.ini des nicht funktionierenden Servers). Wenn dies der Fall ist, ist etwas drin (vielleicht die Variablen_Ordnung oder möglicherweise Speicher, beides ist jedoch unwahrscheinlich).
quelle
Versuchen Sie, Ihre Senden-Schaltfläche umzubenennen. Ich hatte in der Vergangenheit einige Probleme damit. Eine Eingabe mit dem Namen 'action' scheint das Problem zu sein.
quelle
Das Folgende sollte dir NICHT helfen. Es widerspricht allem, was ich über die PHP-Konfiguration weiß:
Dieser ist auf mich gesprungen. Ihre Superglobalen werden in verschiedenen Reihenfolgen registriert. Dies sollte kein Problem sein, da Sie keine
register_globals
Variablen verwenden und sich nicht darauf verlassen, sollte es kein Problem sein, die Reihenfolge zu ändern, in der die Variablen verarbeitet werden.Aber Sie sollten es definitiv versuchen und die Reihenfolge der Variablen ändern.
quelle
Sogar dieses OP ist ziemlich alt, aber heute bin ich auf ein ähnliches Problem gestoßen.
Nachdem wir einige Stunden damit verbracht hatten, immer wieder Millionen verschiedener Dinge zu überprüfen, stellten wir schließlich fest, dass nach dem letzten Update auf die PHP 5.6.17- Version in unserem cPanel unter den PHP-Standardeinstellungen das http nicht ausgewählt war.
Und nach dem Setzen auf ausgewählt - alles wieder normal :-)
Hoffe, es hilft allen zukünftigen Lesern
quelle
Wenn dies jemand anderem helfen kann ... Ich habe nur Stunden damit verbracht, ein ähnliches Problem zu beheben, und das Problem war das Limit von max_input_vars = "1000" für php.ini. Stellen Sie sicher, dass Sie die php.ini-Werte für upload_max_filesize, post_max_size und max_input_vars überprüfen. Ein Überschreiten führt zu einem leeren $ _POST-Array.
quelle