Ich bin ein PHP-Neuling und habe ein Problem mit der POST-Variablen, die manchmal leer ist, wenn ich sie einschicke. Der Teil, der es für mich schwierig macht herauszufinden, ist, dass dies nicht jedes Mal passiert, und ich kann die Post-Daten in meinem PHP-Programm normalerweise durch einfaches Aktualisieren der Seite erhalten. Manchmal wird es ein paar Mal dauern, aber sobald die Daten einmal durchgelaufen sind, wird es weiterhin gut durchkommen.
Andere PHP-Anwendungen (Wordpress und andere) funktionieren gut und geben keine Fehler, daher bin ich ziemlich sicher, dass es ein Problem mit meiner PHP-App gibt.
Ich habe PHP 4.2.9 auf einem CentOS 5.2 Server installiert und KeepAliveTimeout auf 1 gesetzt.
Der Code für die App, in der ich die übermittelten Daten verarbeite:
%Vor%Jede Hilfe wäre willkommen
Bearbeiten: Ich habe einen Unterschied zwischen den Postanforderungen und den fehlgeschlagenen gefunden. Firebug sagt mir, dass, wenn der Beitrag fehlschlägt, der Status eine 302-Weiterleitung statt 200 ok ist. Ich bin nicht wirklich sicher, was das verursachen kann, aber ich habe das Header-Cache-Steuerelement im Formular senden, so wie es im obigen Code-Snippet erscheint.
Irgendwelche Ideen?
Sie haben den Parameter name = auf Ihrem INPUT-Tag vergessen.
%Vor%Sie könnten die Variable $ _REQUEST überprüfen, die eine Kombination aus $ _POST- und $ _GET-Arrays ist. Wenn die Variablen nicht vorhanden sind, wurden sie nicht gesendet und das Problem liegt wahrscheinlich auf der Client-Seite.
Sie können Tools zum Analysieren des Netzwerkverkehrs verwenden, z. Firebugs Net Tab, um zu sehen, was tatsächlich an den Server gesendet wurde.
Die Variable $_POST
wird von der PHP-Engine und nicht von irgendeiner Anwendung gefüllt. Also, wenn es leer ist, ist es einfach leer und Ihr Code muss dies berücksichtigen, genauso wie Sie es bereits für die Variablen $_SESSION
und $_SERVER
tun.
Standardmäßig wird auch der Statuscode 302 gesendet. Die meisten Browser fordern das Ziel eines 302 mit einer GET-Anfrage an, unabhängig vom ursprünglichen Anfragetyp. Wenn Sie möchten, dass beide Anfragen die POST-Daten enthalten, können Sie eine 307 versuchen:
%Vor%Aber vielleicht funktioniert das nicht in allen Browsern (es sollte in etwas nicht altem funktionieren). Vielleicht möchten Sie Ihre Logik hier noch einmal überprüfen, aber es ist nicht normal, dass Clients doppeltes POST erfordern.
Ist Ihnen auch bekannt, dass Sie $_SESSION['username']
gelesen haben, aber nicht darauf zu schreiben scheinen?