2009-12-04 16 views
8

Sono un novizio PHP e sto avendo un problema con la variabile POST talvolta essere vuoto quando li presento. La parte che rende questo difficile per me capire è che questo non accade ogni volta, e di solito riesco a ottenere i dati del post nel mio programma PHP semplicemente aggiornando la pagina. A volte ci vorranno alcune volte, ma una volta che i dati sono passati una volta, continueranno a venire bene.

Altre applicazioni PHP (Wordpress e altri) funzionano bene e non danno mai errori, quindi sono abbastanza sicuro che c'è un problema con la mia app php.

ho PHP 4.2.9 installato su un server CentOS 5.2, e hanno KeepAliveTimeout impostato su 1.

Il codice per l'applicazione in cui elaborare i dati presentati:

<?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); 
?> 

Qualsiasi aiuto tutto sarebbe apprezzato

Modifica: Ho trovato una differenza tra le richieste di post di lavoro e quelle che falliscono. Firebug mi dice che quando il post fallisce, lo stato è un reindirizzamento 302 invece di 200 ok. Non sono davvero sicuro di cosa possa causarlo, ma ho il controllo della cache dell'intestazione nel modulo di invio proprio come appare nello snippet di codice sopra.

Qualche idea?

+0

Come funziona il modulo di guardare come si sta postando con? –

+0

Succede in tutti i browser? – DisgruntledGoat

+0

puoi anche controllare la variabile $ _REQUEST che contiene i vasi e ottenere i dati – NDM

risposta

0

È possibile controllare la variabile $ _REQUEST che è una combinazione di array $ _POST e $ _GET. Se le variabili non sono presenti, non sono state inviate e il problema è probabilmente sul lato client.

È possibile utilizzare strumenti di analisi di rete di traffico ad esempio Scheda Net di Firebug per vedere cosa è stato effettivamente inviato al server.

+0

Ho controllato la variabile REQUEST e il risultato è lo stesso. Ho anche controllato la richiesta di post con Firebug, e le variabili sono sempre passate correttamente. È solo l'app php che non li sta ricevendo. – Marc

+1

Sembra che l'app PHP stia cambiando le variabili al suo interno. Effettuerei anche un controllo al punto di ingresso - le variabili dovrebbero essere OK lì - e quindi capire quale parte del codice è "sbarazzarsi" di loro. –

+0

Ho provato a farlo, tuttavia il problema si verifica ancora quando l'unica cosa che ho nel mio codice php è var_dump ($ _ POST); – Marc

0

La variabile $_POST è compilata dal motore PHP, non da alcuna applicazione. Quindi, se è vuota, è solo vuota e il codice deve tenerne conto, allo stesso modo come già fate per le variabili $_SESSION e $_SERVER.

7

Hai dimenticato il parametro name = sul tuo tag INPUT.

<input type="text" id="xyz" name="xyz" value="123"/> 
+0

Questa risposta dovrebbe essere contrassegnata come la causa più probabile per un principiante. Ho appena avuto esattamente quel problema - lavorando in javascript avevo tutti i tag "id" specificati e stavano funzionando, ma quando la pagina è stata inviata al server mi aspettavo che il valore $ _POST fosse l'id. Aggiungendo i tag "nome" è stato risolto immediatamente. – Bill

0
header('Location: ./login.php'); 

Per impostazione predefinita Questo invierà il codice di stato 302 pure. La maggior parte dei browser richiede la destinazione di un 302 con una richiesta GET, indipendentemente dal tipo di richiesta originale. Se si desidera che entrambe le richieste per contenere i dati POST allora si potrebbe provare una 307:

header('Location: ./login.php', true, 307); 

Ma si potrebbe questo non funziona in tutti i browser (dovrebbe funzionare in qualsiasi cosa non antica). Potresti voler riesaminare la tua logica qui, tuttavia, non è normale richiedere ai clienti un doppio POST.

Inoltre, sei a conoscenza del fatto che hai letto $_SESSION['username'] ma sembra che non ci scriva mai?

Problemi correlati