Newsgroup: it.comp.www.php
Titolo: passare un array di pagina in pagina

Come si fa a passare un array di pagina in pagina con un hiddenfield?
L'operazione che faccio abitualmente con le variabili non mi riesce con
tutto un array...
Grazie


Devi scrivere tutti gli hidden di seguito con
<input type="hidden" name="array[]">
<input type="hidden" name="array[]">
<input type="hidden" name="array[]">
Stefano

...

http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&th=7f92887edaf955&seekm=I11d9.142658%24lu5.3547862

grazie, ora provo...
Marcello

 Marcello
meglio cosi:
<? #File prova1.php
$a = array("elemento1", "elemento2", "elemento3", "elemento4");
echo "<a href="prova2.php?b=" . base64_encode(serialize($a)) .
"">Link</a>";
?>
<? #File prova2.php
$a = unserialize(base64_decode($b));
while(list($y,$x) = each($a))
   echo "$y - $x<br>";
?>

 Come si fa a passare un array di pagina in pagina con un hiddenfield?
Soluzione 1: si scrive l'array in un file temporaneo e nel campo hidden
metti il nome file. Un po' di lavoro da fare, ma efficiente e scalabile.
Soluzione 2: usi il meccanismo delle sessioni di PHP. Facile, ma richiede
cookie o altro parametro di GET per conservare la sessione.
Soluzione 3: scrivi <input type=hidden name=a value=<? echo( rawurlencode(
serialize( unarray ) ) ?> >. Facile, ma se l'array e' grande tutti i
dati vanno avanti e indietro tra server e client, e inoltre devi
sempre controllare che i dati che ti ritornano dal client non siano
stati modificati maliziosamente.
Ciao,
// Umberto Salsi
//
// 
http://digilander.libero.it/salsi
  --  GnuPG Key ID = BE2C F6CD 77E9 29AE

 
questa soluzione e' interessante.
vorrei chiedere una cosa che non mi e' chiara:
se 2 client richiedono lo stesso file php nello stesso
momento ci possono essere dei conflitti con la lettura
e scrittura del file temporaneo ?
per ogni "richiesta" e' proprio necessario creare file
temporanei con nomi diversi ?
grazie
davide

 temporanei con nomi diversi ?
Devi creare un file temporaneo dal nome univoco, per esempio:
$f = md5( uniqid( rand(), 1 ) );
echo("<input type=hidden name=f value=$f>\n");
# Scrivere l'array "a" nel file "/tmp/mioscript-$f", eventualmente
# ricorrendo al solito serialize().
Se i dati sono piu' d'uno, nulla vieta di creare una directory invece di
un semplice file, per cui l'array "a" va nel file "/tmp/mioscript-$f/a",
il dato "b" va nel file "/tmp/mioscript-$f/b", ecc.
Quando $f ti viene ritornato dal client, devi controllare che non sia stato
manomesso:
$f = $_POST['f'];
if( ! ereg("^[0-9a-fA-F]{32}$", $f) || ! file_exists( "/tmp/mioscript-$f" ) ){
    # $f non valido: allarmi!
}
Notare che $f contiene solo un pezzo del nome file per semplificare il
parsing ed evitare di inviare al client dati non necessari.
La pulizia dei file temporanei avviene di solito automaticamente se
questi li metti nell'apposita dir. dei file temporanei.
Due client diversi non potranno mai indovinare lo stesso file. Per
evitare l'intercettazione dei dati (e quindi anche di $f) devi usare SSL.
Se i dati sono riservati, allora meglio trasmettere $f come cookie con
scadenza, cosi' da evitare che sul client rimanga traccia.
Fin qui operiamo a basso livello, smanazzando direttamente con la
codifica dei dati, operando sui file, ecc. L'evoluzione successiva di
questi meccanismi potrebbe prevedere di passare al client sempre e solo
la chiave di sessione, e tenere sul lato server i dati della sessione
*e* lo stato di esecuzione del programma tra una invocazione e l'altra,
in modo da operare a un livello di astrazione superiore. Non c'e' limite
alla fantasia.
