2011-09-01 16 views
5

Sto sviluppando uno script php che contiene un modulo html.La funzione php "header()" non imposta le variabili globali?

Se non tutti i campi sono riempiti in modo corretto lo script segnalerà un errore e reindirizzare indietro alla stessa pagina con la funzione di intestazione impostando una variabile errore di sì con il metodo get:

header("Location: registration_page.php?error_empty=yes"); 

mia lo script ha un errore nella gestione della parte in cui evidenzia i campi contenenti un errore, ma vorrei mantenere il valore dei campi correttamente compilato.

sto L'implementazione di questa caratteristica come ho trovato in quest'altra domanda:

How can I keep a value in a text input after a submit occurs?

ma il problema è che quando la pagina riapre le forme non conterranno i vecchi valori.

La mia domanda è: qualcuno sa se la funzione di intestazione annulla le variabili globali nell'array $ _REQUEST?

E sai che tipo di soluzione posso adottare? Forse sessioni?

Grazie in anticipo,

Matteo!

risposta

8

$_COOKIES rimarrà impostato, ma $_POST & $_GET verrà distrutto, mentre il client si sta spostando su una nuova pagina. Se devono essere conservati, devono prima essere archiviati in $_SESSION prima di chiamare il reindirizzamento.

session_start(); 
$_SESSION['last_post'] = $_POST; 
header("Location: http://example.com"); 
exit(); 

// On the redirected page, use the stored POST values and unset them in $_SESSION 
session_start(); 
if (empty($_POST) && isset($_SESSION['last_post'])) { 
    $post = $_SESSION['last_post']; 
    unset($_SESSION['last_post']); 
} 
else $post = $_POST; 
+0

dopo l'avvio della sessione quando dovrei distruggerlo? quando i campi sono stati tutti compilati con successo? – Matteo

+1

@Matteo 'session_destroy()' viene chiamato implicitamente al termine dell'esecuzione dello script. Non è necessario chiamarlo a meno che non si abbia un motivo per chiudere la sessione prima che lo script venga eseguito. 'session_destroy()' _does_ remove the session variables. Ho appena disconnesso lo script corrente dalla sessione. –

+0

@Matteo si veda l'aggiunta sopra di disinserire il post memorizzato '$ _SESSION' dopo averlo utilizzato –

3

Qualcuno sa se la funzione di intestazione annulla le variabili globali nell'array $ _REQUEST?

No, non è così. I cookie ($_COOKIE) rimarranno.

Ovviamente $_GET conterrà tutto ciò che avete nel reindirizzamento (ad esempio: $_GET['error_empty'] = 'yes') and $ _POST` sarà vuoto perché si sta scrivendo non

Così $_REQUEST sarà una combinazione di $_COOKIE ei nuovi $_GET parametri. set.


probabilmente non dovrebbe usare $_REQUEST comunque. specificare esattamente dove ci si aspetta i tuoi parametri di richiesta per essere ...

2

Non lo fa, ma fa una nuova richiesta. Una nuova richiesta indica un nuovo $_REQUEST che non ha necessariamente tutti i vecchi dati. $_COOKIE sarà ancora lì ma $_GET e $_POST sarà un nuovo significato che rispetterà quello $_REQUEST. ($_FILES sarà anche vuoto e mentre non è in `$ _REQUEST, sarà ripristinato un altro valore fornito dall'utente).

Se si desidera ripristinare il modulo, è necessario o mettere tutte le variabili nell'URL nell'intestazione, o utilizzare $_SESSION o setcookie e quindi ripristinare dal $_GET, $_SESSION o $_COOKIES.

+0

così vecchi valori non saranno accessibili più è per questo che se un uso il comando ? il risultato sarà vuoto? – Matteo

+0

'$ _FILES' è stato rimosso da' $ _REQUEST' molto tempo fa. – NullUserException

+1

Esatto. Poiché '$ _REQUEST' dipende dall'input del browser, se il browser fa una nuova richiesta, allora' $ _REQUEST' viene svuotato. – cwallenpoole