2009-03-24 13 views
7

La ricerca non ha trovato una domanda simile, quindi: come passare i dati POST utilizzati da PHP per generare una pagina da quella pagina a un'altra pagina generata da PHP? Ho:Passare i dati POST da una pagina web a un'altra con PHP

  • Un modulo a pagina 1 che invia i dati a uno script PHP tramite POST.
  • Pagina 2 viene generato da quello script e mostra uno o più grafici generati da un programma esterno utilizzando le voci a pagina 1 e il database back-end. Questa pagina ha anche un altro modulo con le opzioni per rigenerare i grafici con nuove opzioni (ad esempio ingrandire o troncare i grafici).
  • Se richiesto, la pagina 3 verrà generata con lo stesso script PHP utilizzando i dati POST incollati insieme dalle pagine 1 e 2. Tranne i grafici, l'aspetto di base sarà lo stesso della pagina 2.
  • Pagine 4, 5 , 6 ... dovrebbe essere generato come nella pagina 3.

Quindi, come posso inserire i dati POST utilizzati per generare la pagina 2 nei dati POST per pagina 3?

MODIFICA: A causa della politica aziendale, i cookie non possono essere utilizzati (quindi le sessioni non sono fattibili). GET non è desiderabile perché non vogliamo che l'input venga mostrato nell'URL.

risposta

13

Mi ricordo di aver lottato con questo problema molto tempo fa, chiedendomi perché non potessi semplicemente reindirizzare con un'intestazione POST modificata. Il motivo è che un reindirizzamento è in realtà considerato un GET.

Indipendentemente da ciò, è necessario memorizzare le variabili di post nei campi nascosti.

<input type="hidden" name="someValueFromPageOne" value="blah"> 

lo consiglio prefisso tutti i nomi dei campi di ogni modulo in modo che la sua facile distinguerli durante la fase di consolidamento alla fine.

<input type="hidden" name="pageOne_firstName" value="Joe"> 
<input type="hidden" name="pageTwo_streetNumber" value="22"> 

Edit: Come altri hanno detto, persistendo dati utilizzando le sessioni è una possibilità, ma questo diventa una questione molto complessa di mantenere stato temporaneo che cose come aggiornamenti di pagina o utilizzando il pulsante indietro possono rendere difficile da mantenere. A meno che non ti trovi di fronte a un caso estremo, è molto più semplice conservare i dati utilizzando i campi poiché sopravvivono più facilmente agli aggiornamenti e agli altri browser.

+0

Grazie! Mi sento come se avessi dovuto pensarci, ma non ho mai usato campi nascosti prima, e stavo fissando una soluzione in PHP, invece di usare l'HTML. – PTBNL

+0

Credimi, lo so, ci sono stato più di una volta. Non dimenticare di convalidare tutti i tuoi input sui moduli E quando unisci i dati per evitare attacchi di iniezione !!! – Soviut

2

Utilizzare GET.

A mio parere, le richieste POST dovrebbero modificare qualcosa (ad esempio aggiungere record a un database). Le richieste GET dovrebbero recuperare qualcosa (ad esempio i risultati di una query di ricerca).

Se si desidera utilizzare il POST in ogni caso, esaminare le sessioni di PHP.

+2

Esiste tuttavia un limite di dimensioni ovvio (e basso) sui dati GET. – cletus

+0

@cletus, lo so, ma l'OP non ha dato alcuna indicazione su quanto è necessario inviare i dati tra le richieste di pagina. – strager

2

Le sessioni sono un problema e, se ne avessi avuto bisogno, le avresti già implementate.

Come detto in precedenza da @Soviut, i campi di input nascosti sono probabilmente la soluzione giusta.

+0

Concordato, le sessioni sono valide, ma fastidiose per mantenere lo stato corretto per la pagina corretta. Per non parlare delle risorse molto affamate sul lato server con tanti dati in giro. – Soviut

0

Se si decide di interrompere la sessione con l'opzione dbms, ho avuto fortuna progettando una classe di stato per contenere questo materiale e serializzando un oggetto utilizzando JSON in un unico campo grande nel record di sessione.

2

Wez Furlong ha scritto di recente la versione PHP5 sul suo blog (HTTP post intitolato da PHP, senza cURL):

function do_post_request($url, $data, $optional_headers = null) 
{ 
$params = array('http' => array(
'method' => 'post', 
'content' => $data 
)); 
if ($optional_headers!== null) { 
$params['http']['header'] = $optional_headers; 
} 
$ctx = stream_context_create($params); 
$fp = @fopen($url, 'rb', false, $ctx); 
if (!$fp) { 
throw new Exception("Problem with $url, $php_errormsg"); 
} 
$response = @stream_get_contents($fp); 
if ($response === false) { 
throw new Exception("Problem reading data from $url, $php_errormsg"); 
} 
return $response; 
} 

Nel post accenna che ha sempre per cercare come fare questo. Divertente perché è uno degli sviluppatori principali!

+0

Supponendo che tu intenda questo: http://netevil.org/blog/2006/nov/http-post-from-php-without-curl sembra promettente, grazie (anche se il 2006 non è "di recente" per me! :-p) Forse è la mia mancanza di esperienza con PHP, ma non l'ho fatto funzionare, e non vedo come manderebbe i dati POST da una pagina all'altra. – PTBNL

+0

Che tipo di informazioni ci si aspetta da dati $? – dangel

Problemi correlati