Newsgroup: it.comp.www.php
Titolo: [sessioni] Questo script non funziona, perchè?

Ho fatto 3 pagine php per esercitarmi nelle sessioni e riuscire a passare 
variabili da 2 pagine alla terza, eccole riassunte:
### pag1.php
<?php
session_start();
session_register("ord");
?>
<HTML>
<FORM  action="pag2.php" method="POST">
ALFA <INPUT TYPE="TEXT"  name="ord[alfa]"><br>
BETA <INPUT TYPE="TEXT"  name="ord[beta]"><br>
GAMMA <INPUT TYPE="TEXT"  name="ord[gamma]"><br>
<INPUT TYPE="SUBMIT"  value="invia">
</FORM>
</HTML>
### pag2.php
<?php
session_start();
?>
<HTML>
<FORM  action="pag3.php" method="POST">
DELTA <INPUT TYPE="TEXT"  name="ord[delta]"><br>
EPSILON <INPUT TYPE="TEXT"  name="ord[epsilon]"><br>
OMEGA <INPUT TYPE="TEXT"  name="ord[omega]"><br>
<INPUT TYPE="SUBMIT"  value="invia">
</FORM>
</HTML>
### pag3.php
<?php
session_start();
echo "Hai ordinato : <br><br>";
foreach ($ord as $prodotto => $quantita)
     {
     if (($quantita != 0) && ($quantita != ""))
          echo "$quantita $prodotto<br>";
     }
session_unset();
session_destroy();
?>
### PROBLEMA
Io nella prima pagina scelgo 2 ALFA e 1 BETA, nella seconda pagina scelgo 4 
ESPILON.
Alla processazione della pagina "pag3.php" mi vengono elencati i prodotti 
scelti nella prima pagina ma non quelli scelti nella seconda pagina.
DOVE SBAGLIO?
-- 
»» TEHO ««
"se solo tu potessi vedere ciò che ho visto io con questi tuoi occhi"
(BLADE RUNNER)

 DOVE SBAGLIO?
Ci sono almeno due errori nella teoria dell' implementazione.
Analisi:
Sicuramente la pag1 passa alla pag2 i valori, e' questi li ritrovi nella
variabile "di sessione" $ord della pagina2. Quando pero' la pagina2 passa
alla pagina3 altri valori nell' array $ord questi non vengono aggiornati
perche' c'e' gia' la "variabile di sessione" $ord che ha la precedenza !
Cosi' ti trovi i valori della pagina 1.
Inoltre  anche se avesse aggiornato $ord con i dati passati dalla pagina2
sarebbero pero' stati sovrascritti quelli della pagina1 !
E' come se fai:
$arr1[a] = 1;
$arr2[b] = 2;
$arr2 = $arr1;
print $arr2[b]; (chiaramente non stampa niente, avrebbe dovuto secondo te
stampare 2)
Soluzione:
Intanto bisogna fare in modo che la variabile di sessione si aggiorni con i
dati passati tramite il metodo POST, quindi: $ord = $HTTP_POST_VARS[ord];
Cosi' pero' l' array si inizializzera' sempre con gli ultimi valori passati,
quindi e' necessario tenere di conto i dati che sono gia' nella sessione e
aggiungerci quelli passati dal metodo post (dalla form): $ord =
array_merge($ord, $HTTP_POST_VARS[ord]);
Invece di usare array_merge potresti fare un ciclo con dentro qualche if,
cosi' da evitare che i dati non vengano sovrascritti quando ci sono valori
nulli, ovvero non venga digitato niente nella form.
In conclusione bisogna aggiungere in tutte le pagine questo comando:
$ord = array_merge($ord, $HTTP_POST_VARS[ord]);
dopo chiaramente le funzioni sulle sessioni.
--
Damiano Trisciani - 
dam...@tnx.it
Webmaster & Sysadmin of:
http://www.tnx.it
 - The Network Xperience - Web Design & Programming
http://www.astrofili.org
 - Il portale per l' astronomia in Italia

Ammazza che casino, non penso di essere in grado al momento di fare una 
cosa simile, cercherò una soluzione diversa.
Grazie cmq per il chiarimento :)
