Newsgroup: it.comp.www.php
Titolo: Passaggio GET di Array

Scusate se è una banalità ma non mi è mai capitato di dover passare un
array tramite GET.
Ho fatto per ora così:
tramite un while ed un BD creo un array $dati[]
poi lo passo via url script.php?d=$dati
e in script.php
$dato_passato=$_GET['d'];
Mi aiutate ad avere i dati corretti in $dato_passato?
-- 
Amministratore
www.amiciamici.com
Giornalismo dal basso sull'amicizia e sul turismo
"Pronto Chi Bussa" il primo podcast di Parma e provincia?

 
Dai un'occhiata a 
http://it.php.net/manual/it/function.serialize.php
e ricorda il limite della lunghezza della query string.
Luigi

LuigiZ ha scritto:

Per il limite non credo di aver problemi visto che si tratta di 10
numeri di, al massimo 3 cifre.
Il problema è che se passo script.php?d=".serialize($dati)."
e in script.php $dato_passato=unserializa($_GET['d']);
Ottengo tutti valori nulli.
Non è che si trova online un esempio concreto?


 Non è che si trova online un esempio concreto?
Non saprei... bisognerebbe provare a cercare ...
Hai qualche messaggio di errore ?
Hai codificato l'url ?
Ciao.
Luigi

> Torakiki

 Hai codificato l'url ?
Ora provo.


 
Niente.
Ma online non esistono guide o script che hanno utilizzato questo metodo?


 Niente.
Dopo aver serializzato l'array, prova a usare le funzioni
utf8_encode() e utf8_decode() oppure base64_encode() e
base64_decode(). Per esempio:
<?php
$arr = array(1,2,3,4,5,6,7,8,9,10);
$get = utf8_encode(serialize($arr));
if (isset($_GET['d'])) {
    echo '<pre>';
    print_r(unserialize(utf8_decode($_GET['d'])));
    echo '</pre>';
}
?>
<a href="<?php echo $_SERVER['PHP_SELF'].'?d='.$get ?>">Clicca</a>
Altrimenti, visto che i dati contenuti nell'array saranno solo numeri
interi potresti scrivere una semplice funzione per trasformarlo in
una stringa adatta ad essere passata via get (e viceversa), per
esempio:
<?php
function mySerialize($array)
{
    return implode(':', $array);
}
function myUnserialize($string)
{
    return explode(':', $string);
}
$arr = array(1,2,3,4,5,6,7,8,9,10);
$get = mySerialize($arr);
if (isset($_GET['d'])) {
    echo '<pre>';
    print_r(myUnserialize($_GET['d']));
    echo '</pre>';
}
?>
<a href="<?php echo $_SERVER['PHP_SELF'].'?d='.$get; ?>">Clicca</a>
Oppure puoi passare direttamente i valori dell'array nell'url, per
esempio: script.php?d[0]=1&d[1]=2&d[2]=3&d[3]=4&...
Ciao.
-- 
Federico

 
Secondo me dovresti provare a fare un po' di debug, senza fermarti alla
prima difficoltà.
Il metodo suggerito da me e Torakiki è valido, basta seguire quello che
succede:
$array = array('uno', 'due', 'tre'=>'stella');
echo serialize($array);
echo $d = urlencode(serialize($array));
echo "<a href=\"pagina.php?d=$d\" > Prova ora </a>";
e nello script pagina.php
$d = $_GET['d'];
echo $d;
echo $dec = urldecode($d);
$uns = unserialize( $dec );
print_r($uns);
Così facendo potrai vedere qual'è il passaggio che crea il problema e
risolverlo.
Nel mio caso si trattava di rimuovere gli slash aggiunti a protezione
dei parametri passati nella url:
$dec = stripslashes(urldecode($_GET['d']));
$uns = unserialize( $dec );
print_r($uns);
A volte meglio studiare un po' quello che succede invece che perdere
tanto tempo a cercare quello che serve esattamente a te.
Spero ti sia utile.
Ciao.
Luigi

Grazie a tutti per i consigli.
In questo fine settimana che ho un po' di tempo cerco di sbrogliare la
situazione.


 array tramite GET.
Potresti pensare di usare le sessioni, invece che il GET.