Sessioni e oggetti

 Sessioni e oggetti

Salve a tutti,

ho il seguente problema, chi mi può aiutare?

Vorrei in 4 fasi inserire un progetto in un db.

Per ogni fase lo script richiama la stessa pagina(pagina.php)

e ognuna si differenzia dall'altra attraverso l'utilizzo

della varibile step passata attraverso GET

La soluzione da me scelta è stata quella di creare un oggetto

per ogni progetto. La classe dell'oggetto è del tipo:

Class Progetto {

var $nome;

var $titolo;

var ...

}

La defiinizione della classe è all'inteno del file classe.inc

incluso all'inizio di pagina.php e successivamente richiamo la funziona session_start() (prima di qualsiasi tag html) in modo tale da avviare/richiamare la sessione(utilizzo i cookie per propagare il session id).

la funzione inserisci all'interno di pagina.php è del tipo:

function inserisci() {

// Controllo se esiste e se valido il valore di $step

if ($_GET["step"] == 0) {

$progetto = new Progetto();

$_SESSION['progetto'] = $progetto;

echo "<form ... method=post action=progetti.php?step=1>

<input ... name=nome>

.....

</form>";

}

elseif ($_GET["step"] == 1) {

$progetto = $_SESSION['progetto'];

$progetto->nome = $_POST["nome"];

echo $progetto->nome;

echo "<form ... method=post action=progetti.php?step=2>

<input ... name=titolo>

.....

</form>";

}

elseif ($_GET["step"] == 2) {

$progetto = $_SESSION['progetto'];

$progetto->titolo = $_POST["titolo"];

echo $progetto->nome;

....

e così via

Qual è il PROBLEMA(lo scrivo in maiusciolo per motivi di leggibilità):

Mentre il primo "echo $progetto->nome;" ovviamente funziona

il secondo no, come se il valore della varibile(oggetto) non venisse conservata.

Spero di essere stato chiaro.

Saluti a tutti.

inviato 11 anni fa
merudda
X 0 X

PHP 4 o 5 ? Secondo me 4, vero?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

La soluzione era banalissima, scusate per il post.

Bisognava:

(1) riaggiornare l'oggetto salvato in sessione:

        dopo aver aggiornato i campi di $progetto bisognava  fare un bel $_SESSION['progetto'] = $progetto;

(2) oppure passare attraverso argomenti l'oggetto progetto:

           $progetto = &$_SESSION['progetto'];

E il tutto funziona come si deve!!!

risposto 11 anni fa
merudda
X 0 X

Avevo intuito il problema, che però sussiste solo se stai usando PHP 4.

Infatti per PHP 4 l'istruzione:

$progetto = $_SESSION['progetto'];

significa "copia l'oggetto $_SESSION['progetto'] in $progetto" e pertanto è necessario provvedere ad eventuali aggiornamenti dell'oggetto in sessione oppure ad usare l'assegnazione per riferimento = &

In PHP 5 invece quella stessa istruzione fa si che $progetto e $_SESSION['progetto'] si riferiscano allo stesso oggetto e pertanto se si agisce su $progetto si modifica $_SESSION['progetto'].

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Grazie per la precisazione!!!

Non conoscevo queste novità nella nuova versione di php5,

onestamente non ero a conoscenza di questa nuova versione ;-)

risposto 11 anni fa
merudda
X 0 X

Grazie per la precisazione!!!

Non conoscevo queste novità nella nuova versione di php5,

onestamente non ero a conoscenza di questa nuova versione ;-)

Figurati...

Comunque se sei solito programmare ad oggetti ti consiglio caldamente di passare a PHP 5 che ha introdotto una vera e propria rivoluzione nel suo modello ad oggetti sia in termini di completezza che di prestazioni.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda