[PHP] Utilizzo variabili di sessione [Risolto]

  • Creatore Discussione Creatore Discussione navajo75
  • Data di inizio Data di inizio

navajo75

Utente Attivo
16 Mar 2012
103
1
18
Buonasera,
ho una normalissima pagina PHP, nella quale elenco una serie di nomi come a seguire

HTML:
    <div class="pippo">
        <a href="ins-anni.php" onclick="<?php session_start(); $_SESSION['pippo']='Pippo'; ?>">
          <img src="img/pippo.jpg" />
        </a>
      </div>
      <div class="pluto">
        <a href="ins-anni.php" onclick="<?php session_start(); $_SESSION['pluto']='Pluto'; ?>">
          <img src="img/pluto.jpg" />
        </a> 
      </div>

Vorrei che a seconda del nome su cui clicco, nella pagina ins-anni.php venisse stampato solo ed esclusivamente quel nome.

Ho provato con degli IF, ma chiaramente le varie condizioni sono sempre verificate, perchè le variabili di sessione sono inizializzate e settate.

Qualcuno potrebbe gentilmente darmi indicazioni su come potrei fare ad ottenere ciò che desidero?

Grazie anticipatamente a chiunque vorrà aiutare.
 
Ciao, parto dal fatto che il contesto non è troppo chiaro ma credo tu stia facendo comunque un po' di confusione tra il concetto di esecuzione del codice lato server e quello lato client.
Il tuo PHP viene eseguito a monte (lato server) prima che l'intero HTML arrivi nelle fauci del browser, quindi ciò che hai inserito nell'evento onclick sostanzialmente è già bello che eseguito quando la pagina viene aperta sul browser (lato client). Ha poco senso ciò che hai scritto dentro tale evento, infatti l'evento onclick si aspetta di trovare uno script eseguibile lato client, in parole povere un qualche JavaScript non di certo un PHP (a meno che questo non sia stato messo lì a posta per generare un JavaScript che verrà di conseguenza eseguito lato client; non è il tuo caso).

Vorrei che a seconda del nome su cui clicco, nella pagina ins-anni.php venisse stampato solo ed esclusivamente quel nome.

Fammi capire però, la pagina ins-anni.php è la stessa di partenza che ha stampato il codice HTML che hai postato (cioè la lista di nomi)?

In tal caso, se vuoi semplicemente "nascondere" gli altri elementi (dal momento che sono già tutti presenti sulla pagina), puoi semplicemente farlo attraverso JavaScript; puoi eliminare fisicamente i nodi HTML in questione o nasconderli con un po' di CSS.

Se invece si tratta di due pagine differenti per cui, attraverso PHP, devi rielaborare l'output HTML in base al click effettuato, allora non ho ben chiaro perché hai pensato di usare delle variabili di sessione per una cosa del genere; solitamente si risolve passando piuttosto un parametro in GET, aggiungendolo quindi all'URL, o in POST, magari con un form e un campo hidden. Chiaramente sono i fondamenti del PHP che è possibile apprendere consultando qualche guida di base se dovesse servire; vedi qui ad esempio: https://www.mrw.it/php/variabili-get-post_9489.html

Il passaggio in GET è abbastanza semplice. I tuoi link dovranno essere impostati con una cosa del genere:
HTML:
<a href="ins-anni.php?nome=Pippo">...</a>
<a href="ins-anni.php?nome=Pluto">...</a>
In questo caso sto passando un parametro in GET che ho chiamato "nome" e a cui ho specificato il relativo valore.

Nella tua pagina ins-anni.php dovrai semplicemente recuperare tale valore che userai come meglio credi.
Puoi recuperarlo con la variabile superglobale $_GET.
Un esempio di codice base:
PHP:
echo $_GET['nome'];
Questo ti stamperà il valore del parametro "nome" relativo al link su cui hai cliccato.
Ovviamente questo è un caso banale, sta poi a te impostare il resto del PHP per eventuali controlli, verifiche, analisi, ecc.

Se non è ciò che chiedevi, cerca magari di chiarire meglio il contesto e l'obiettivo che vuoi raggiungere.
 
Ciao,
si tratta di due pagine differenti. Premettendo che, come avrai capito non ho grande dimestichezza con il PHP, quello che dovrei fare è portarmi delle informazioni da una pagina all'altra e per questo ho pensato alle variabili di sessione. L'utente arriva nella pagina in-dip.php e qui sceglie un nome. Da qui finisce nella pagina in-anni.php e sceglie un anno. Da qui va alla pagina in-mese.php e sceglie un mese. Una volta scelto un mese, si troverà davanti una tabella in cui andare a inserire l'orario lavorativo del mese in corso. Quella tabella conterrà un form e tutte le info che in esso verranno immesse, saranno salvate in una tabella di DB. Quindi ciò che vorrei io è che nel momento in cui il dipendente arrivi alla pagina del mese scelto per l'inserimento del suo orario di lavoro, si sia portato dietro, dalle pagine precedenti, che si tratta di Mario Rossi, che ha scelto l'anno 2018 e il mese di agosto. La soluzione che mi hai proposto con il GET o con il POST, credo vada bene per portare le info alla pagina successiva, ma non a più di una avanti. Sbaglio?
Grazie infinite per l'aiuto e per la pazienza.
 
Non so, il sistema di utilizzare più pagine differenti per arrivare comunque a quella utile (col form) mi pare macchinoso. Con le odierne tecnologie andrei a risolvere tutto in maniera più snella con una sola pagina, magari usando un po' di JavaScript e col necessario supporto di AJAX.
Capisco però che la strada potrebbe essere impervia se non si hanno le giuste conoscenze.

Certo, restando sui metodi tradizionali, l'uso di variabili di sessione può essere d'aiuto per trascinare dietro le varie scelte effettuate lungo il percorso sulle varie pagine, ma tali variabili devono essere comunque inizializzate lato server, dopo aver effettuato la scelta/cliccato per saltare alla pagina successiva. In sostanza dovrà essere la pagina (PHP) di arrivo (quella relativa alla scelta effettuata) a doversi occupare di "memorizzare" tali variabili in sessione ed inoltre analizzare le eventuali precedenti già memorizzate per costruire poi il codice HTML; questo significa che dovrai comunque passare (in GET o POST) le scelte fatte man mano... ma a quel punto, se i dati sono relativamente pochi, potresti anche fare a meno delle variabili di sessione e trascinarteli dietro tra le varie pagine.

La soluzione che mi hai proposto con il GET o con il POST, credo vada bene per portare le info alla pagina successiva, ma non a più di una avanti. Sbaglio?
Sbagli, puoi benissimo portare avanti tutti i dati relativi alle scelte effettuate tra le varie pagine ma ovviamente ogni volta, al passaggio tra una pagina e l'altra, dovrai includere man mano i nuovi dati aggiungendoli a quelli precedenti.

Usando il metodo GET dovrai riassemblare opportunamente la QueryString con tutti i parametri necessari (relativi alle scelte effettuate sia per la pagina corrente sia per le precedenti) in modo che siano analizzabili dal tuo script PHP che, di conseguenza, andrà a costruire la relativa pagina.

Di base, valgono le indicazioni del mio precedente post; per le varie pagine dovrai poi costruire opportunamente la relativa QueryString considerando i vari dati scelti.

Ad esempio per saltare alla pagina "in-mese.php" (dopo che magari hai già scelto un nome ed un anno) dovrai costruire la nuova QueryString da agganciare all'URL; potrebbe essere una cosa del genere: "in-mese.php?nome=Pippo&anno=2018&mese=8"

Nel tuo PHP potrai quindi recuperare quei 3 parametri (nome, anno, mese) in $_GET per utilizzarli come meglio credi.

Se poi non vuoi ogni volta ricostruire la QueryString aggiungendo i dati di tutte le scelte effettuate, puoi usare appunto delle variabili di sessione, come avevi pensato. In tal caso andrai a memorizzare man mano i nuovi dati in $_SESSION; come anticipato, è chiaro che dovrai comunque passare questi nuovi dati sempre attraverso GET o POST.

Magari fai qualche prova e vedi cosa riesci a mettere su.
Fai sapere.
 
Ciao,
il problema è esattamente quello che dici tu. Non essendo un programmatore, i miei siti li sviluppo grazie ai CMS; Wordpress e Joomla su tutti. Questa volta però, dopo tanti anni che non scrivo codice, sto facendo un favore a una persona che mi ha chiesto cose che, per quanto semplici per chi sa programmare, non sono realizzabili con il plug-in di un CMS. Quindi con le conoscenze giuste, si tirerebbe giù un'idea e poi si comincerebbe a scrivere codice. Io invece sono partito dall'HTML e dai CSS, che conosco abbastanza bene, creando l'aspetto grafico e non preoccupandomi del PHP, pensando che poi sarebbe stato semplice. Risultato? Mi sono incastrato e come giustamente dici tu, ho tirato fuori una cosa macchinosa. A questo punto però, voglio andare avanti su questa strada e proverò a passare i parametri con il GET, senza utilizzare le variabili di sessione, come da te suggerito. Che ti farò sapere stanne certo; mi sembra il minimo dopo il tempo che mi hai dedicato. L'unica cosa è che proverò la settimana prossima, visto che sono fuori Roma.
Grazie infinite
 
e non preoccupandomi del PHP, pensando che poi sarebbe stato semplice.
Succede. Il problema però non è solo nel metodo di passaggio dei dati scelti tra le varie pagine; da quel che ho capito, dovrebbe essere una sorta di agenda per la quale ogni utente ha una sua "area" riservata che deve poter gestire autonomamente; immagino quindi che tu abbia previsto un sistema di login e in tal caso il passaggio dei dati di accesso potrebbe essere fatto attraverso variabili di sessione, se non con altri metodi. Spero tu abbia già sviluppato o quantomeno previsto questa parte.

A questo punto però, voglio andare avanti su questa strada e proverò a passare i parametri con il GET, senza utilizzare le variabili di sessione, come da te suggerito
Potresti anche utilizzarle, sarebbe bene però valutare i pro e i contro.

Usando solo il GET, tutti i dati (man mano aggiunti) restano sempre visibili nell'URL dei link e quindi nella barra degli indirizzi; ciò può risultare non troppo gradevole a vedersi; la lunghezza dell'URL risulterà estesa in base alla quantità e alla lunghezza stessa dei vari dati; ovviamente questo sistema non è per nulla sicuro se i dati in questione sono sensibili o servono per l'accesso a delle pagine private. In questi casi può essere utile/necessario includere le variabili di sessione, per cui in GET andranno passati solo i dati relativi alle singole pagine.

Di pro, usando solo il GET, dal momento che ad ogni singola pagina sono passati tutti i vari dati fino alla pagina corrente, sarà possibile usare ogni specifico link per accedere direttamente alla relativa pagina senza dover ricompilare le precedenti; ad esempio, se l'utente Pippo era già arrivato all'ultima pagina dopo aver scelto un anno e un mese specifico, potrebbe salvarsi tra i preferiti quello specifico link per riaccedere direttamente nei giorni successivi, saltando quindi i passaggi sulle pagine precedenti che altrimenti dovrebbe eseguire ogni volta.

Chiaro che dietro tutto ciò dovrà comunque esserci un sistema di login.

L'unica cosa è che proverò la settimana prossima, visto che sono fuori Roma.
Grazie infinite
Figurati, buona trasferta allora.
 
Beh direi sacrosante le tue osservazioni e si hai capito quello che devo fare.
So che passare dei valori tramite URL non è il massimo della sicurezza, ma questo è un tema che non mi preoccupa e ti spiego perché.
La persona che mi ha chiesto questa cortesia è un mio amico commercialista che sta usando un Excel con un milione di formule e tante cose che fanno pesare oltre modo il file, che per questo crasha in continuazione. Siccome alla fine della fiera, ciò di cui ha bisogno è inserire gli orari lavorativi dei dipendenti di una società per cui elabora buste paga, più una serie di stupidaggini accessorie, ho pensato di realizzare un piccolo sitarello, che gli darà non solo la possibilità di inserire ciò che gli occorre, ma anche di avere in ogni momento a disposizione le info che vuole con delle semplici query a un DB.
La cosa bella in tutto questo, è che lui riceve i cartellini dei dipendenti e quindi sarà sempre e solo lui a completare gli inserimenti. Quindi non ho bisogno di creare un area ad accesso riservato. Inoltre ho pensato d'installare sul suo PC un WAMP, così che i dati non circolino in rete, facendogli poi vedere come fare i backup del sito, ond'evitare la perdita di dati per lui vitali. Certo il rischio per me è che lo strumento gli piaccia e mi chieda di far in modo che questi benedetti dipendenti s'inseriscano da soli i dati; li si che so cavoli
Grazie ancora per il formidabile supporto.
Appena tornerò, ti aggiornerò
 
Ciao,
è da ieri che sto facendo i conti con la mia poca abilità di programmatore.
Sono nella pagina ins-dip.php e costruisco il link come da te suggerito

HTML:
<a href="ins-anni.php?nome=Pippo">

Vado alla pagina ins-anni.php e...

PHP:
session_start();
$_SESSION=$_GET['nome'];
$nome=$_SESSIONE['nome'];
// stampo solo per vedere se la variabile è valorizzata
echo $nome;

Questo pezzo di codice sta in cima alla pagina e la variabile non è valorizzata. Perchè sto facendo così? La mia idea è quella di salvare il nome scelto in una variabile di sessione. Sempre nella pagina ins-anni.php, costruisco un'altra query string...

HTML:
<a href="ins-mesi.php?anno=2018">

Vorrei poi andare alla pagina ins-mesi.php, registrare in una nuova variabile di sessione l'anno scelto.
Visto che le variabili non si valorizzano, dov'è che sto sbagliando?

Grazie
 
Ciao, bentornato.

Fai attenzione, $_SESSION è un array associativo. Per recuperare o modificare uno qualsiasi dei membri di tale array, devi comunque specificarlo.

In sostanza non devi assegnare il valore in quel modo, direttamente a $_SESSION, ma dovrai comunque specificarne l'elemento che intendi modificare:
Codice:
$_SESSION['nome']=$_GET['nome'];

Oltre questo sarebbe opportuno fare preventivamente dei dovuti controlli per ciò che ti arriva in GET, ad esempio controllare che la variabile $_GET['nome'] esista, che non sia una stringa vuota, che magari corrisponda ad un valore presente nel tuo db, ecc.
 
Oggi me la canto e me la suono ;)
Forse ce l'ho fatta.
Pagina ins-dip.php

PHP:
session_start();
$nome=$_GET['nome'];
$_SESSION['name']=$nome;
$name=$_SESSION['name'];

Pagina ins-anno.php

PHP:
session_start();
$anno=$_GET['anno'];
$name=$_SESSION['name'];
$_SESSION['year']=$anno;
$year=$_SESSION['year'];
echo $name;
echo $year;
 
Bene, occhio qui però
$_SESSION['name']=$nome;
$name=$_SESSION['name'];
l'ultima riga è praticamente inutile, potresti rimuoverla tranquillamente dal momento che $nome era già stata valorizzata.

Ah scordavo la cosa più importante.
Mille grazie a
WmbertSea
Non c'è di che, buon proseguimento :)
 
Perfetto. La rimuoveró allora.
Ancora grazie. Devo chiudere il post, mettendo risolto? È da un po' che non chiedo aiuto su un forum e ricordo che da altre parti si faceva così
 

Discussioni simili