PHP $_POST-Variablen sind manchmal leer
Ich bin ein PHP-Neuling und ich habe ein problem mit POST-Variablen, die einen manchmal leer, wenn ich zu senden. Das Teil, das macht das schwierig für mich, herauszufinden, ist, dass dies nicht passiert jedes mal, und ich kann in der Regel erhalten die post-Daten in mein PHP-Programm, indem Sie einfach die Aktualisierung der Seite. Manchmal dauert es ein paar mal, aber wenn die Daten gekommen ist, einmal durch, es kommen weiterhin gut durch.
Anderen PHP-Applikationen (WordPress und andere) funktionieren gut und geben nie Fehler, also ich bin ziemlich sicher, dass es ein problem mit meinem php-app.
Habe ich PHP 4.2.9 Installation auf einem CentOS 5.2 server, und KeepAliveTimeout auf 1 gesetzt.
Den code für die app, in der ich mit den übermittelten Daten:
<?php
session_start();
if (isset($_SESSION['username'])) {
$expire = time() + (60*60*24*30);
setcookie("username", $_SESSION['username'], $expire);
}
header("Cache-control: no-cache");
if (!isset($_SESSION['username'])) {
header('Location: ./login.php');
die();
}
if(empty($_SERVER['CONTENT_TYPE'])){
$type = "application/x-www-form-urlencoded";
$_SERVER['CONTENT_TYPE'] = $type;
}
var_dump($_POST);
echo "\n";
var_dump($_SERVER);
?>
Jede Hilfe würde geschätzt
Edit: ich habe festgestellt, ein Unterschied zwischen der Arbeit von post-requests und diejenigen, die scheitern. Firebug sagt mir, dass, wenn der post fehlschlägt, wird der status ist eine 302-Umleitung statt der 200 ok.
Im nicht wirklich sicher, was verursachen kann, aber ich habe die header cache-control senden Formular nur, wie es in dem obigen code-snippet.
Irgendwelche Ideen?
- Wie wirkt die form so Aussehen, wie Sie Buchen mit?
- Passiert das in allen Browsern?
- Sie könnte auch überprüfen Sie die $_REQUEST Variablen, die hält Töpfe und abrufen von Daten
- Pekka - Es passiert mit allen Formen, und ich habe Sie viele Male. Ich glaube nicht, dass Sie im Unrecht sind hier. DisgruntledGoat - ich verwende FireFox, aber es passiert auch mit IE und Chrome. Nicky De Maeyer - ich habe versucht, mit der REQUEST-variable mit dem gleichen Ergebnis.
- Irgendeiner Weise können wir sehen, die form, die Sie zu tun? Ein zweites paar Augen auf, es kann helfen.
- Gonzofish - ich würde ein Formular anzeigen, aber ich glaube nicht, dass es wichtig sein würde. Ich habe versucht, ganz wenige Formen, keine Arbeit, wenn Sie den obigen code.
- Update: ich habe festgestellt, dass einige andere Leute auf dem Netz haben, hatten ähnliche Probleme wie ich hatte, wo eine 302-Umleitung bewirkt, dass der browser für die Ausführung eines GET anstatt POST. Eine Antwort war, dass die post_max_size eingestellt war, 10MB, mit B anstelle von nur 10M. Der andere chap hatte das problem, wenn der Content-Type war leer oder ungültig. Beides nicht mein problem, aber hoffentlich ist jemand schlauer als ich kann man eine Ahnung davon, und mir sagen, wohin ich gehe falsch gemacht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie vergessen, das name= - parameter auf Ihre INPUT-tag.
Könnten Sie überprüfen die $_REQUEST Variablen, die eine Kombination aus $_POST und $_GET arrays. Wenn die Variablen nicht gibt, die Sie noch nicht gesendet wurden und das problem ist wahrscheinlich auf der client-Seite.
Können Sie Netzwerk-traffic-Analyse-tools wie z.B. Firebug Net-Registerkarte, um zu sehen, was tatsächlich an den server gesendet.
Den
$_POST
variable gefüllt ist, die von der PHP-engine, die nicht von jeder Anwendung. Also, wenn es leer ist, es ist einfach leer und muss der code, die berücksichtigen, in der gleichen Weise, wie Sie bereits für die$_SESSION
und$_SERVER
Variablen.Standardmäßig sendet den status code 302 als gut. Die meisten Browser-Anfrage das Ziel, einen 302 mit einer GET-Anforderung, unabhängig vom ursprünglichen Typ der Anfrage. Wenn Sie möchten, dass beide Anträge enthalten die POST-Daten, dann könnten Sie versuchen, einen 307:
Aber Sie könnten dies funktioniert nicht in allen Browsern (es sollte in etwas nicht-alten). Möchten Sie vielleicht, um erneut zu prüfen, Ihre Logik hier, aber, es ist nicht normal, dass clients Doppel-POST.
Zudem, sind Sie sich bewusst, dass Sie Lesen
$_SESSION['username']
aber nicht angezeigt, um überhaupt schreiben zu können?