Visualizzazione risultati 1 fino 21 di 21

Discussione: sessione con array

  1. #1
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Red face sessione con array

    Salve a tutti.
    Ho bisogno di recuperare alcuni dati che scrivo in una tabella.
    Per questo ho usato la sessione in questo modo:
    Codice PHP:
    $_SESSION = array('id_el' =>$idEl, 'orario'=>'ora_u' );
    Poi cerco di recuperare i dati in un altro file, così:
    Codice PHP:
    foreach($_SESSION['id_el'] as $key => $value)
    echo
    $key.' - '.$value."";
    Qui dovrebbe visualizzare almeno gli id_el, ma attualmente non visualizza niente.

    Spiego meglio cosa sono i vari dati. Il primo valore che carico nella sessione è l'ID di un elenco (mi serve come riferimento), mentre il secondo valore proviene da un form e dev'essere un orario (poi tramite l'ID dovrò inserire nel db l'orario).
    Come dovrei fare ? Grazie

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    $_SESSION['id_el'] non è un array, non puoi fare un foreach.

  3. #3
    Guest

    Predefinito

    Codice PHP:
    foreach($_SESSION as $key => $value)
    echo
    $key.' - '.$value."";

  4. #4
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Grazie per le risposte e per la rapidità.

    Spiego meglio il problema con un esempio.
    Ho l'utente 1, con id_el = 162, al quale devo inserire un'orario.
    Poi l'utente 2, con id_el = 123 al quale devo inserire un'orario.
    Poi l'utente 3, con id_el = 368 al quale devo inserire un'orario.
    E così via.
    Per questo ho bisogno di memorizzare i dati in un array, altrimenti come potrei fare ?
    Non sono molti, ma spesso più di 1.

    Volevo quindi memorizzare in una sessione l'array dell'id utente con l'orario inserito (tramite form), per mandarli ad un file d'aggiornamento.
    Con il suggerimento di vplaza, però mi carica solo l'ultimo valore in elenco nella tabella, in questo modo:
    id_el - 368 orario - ora_u

    Quindi visualizza solo id_el 368, che è l'ultimo dato inserito per l'utente.
    L'orario non lo recupera. Forse sbaglio qualcosa anche nel form.
    L'importante per me, adesso, è recuperare tutti i valori. (Poi vedrò di aggiustare anche il form.)
    Grazie per la pazienza.

  5. #5
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,573

    Predefinito

    Prova così:

    Codice PHP:

    /*
    Array
    (
    [id] => id_el
    [orari] => Array
    (
    [0] => 162
    [1] => 148
    [2] => 184
    )
    )
    */
    $_SESSION['dati']['id'] = ''id_el'';
    $_SESSION['dati']['orari'] = array(162, 148, 184);
    Quando vuoi stampare i dati, quindi, dovresti fare una cosa del tipo:
    Codice PHP:
    <?php
    echo 'id: '.$_SESSION['dati']['id'].PHP_EOL;

    echo
    'Orari: ';
    foreach(
    $_SESSION['dati']['orari'] as $orario)
    echo
    $orario.' ';
    ?>
    p.s: fare una bella classe e quindi istanziare un oggetto e salvarlo nella sessione non sarebbe per niente male .

    Ciao!
    Ultima modifica di alemoppo : 23-09-2014 alle ore 11.11.47

  6. #6
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Grazie alemoppo.
    Non ho capito bene come poter utilizzare il tuo esempio nel mio caso.
    I dati li prelevo dal db e li intabello con un ciclo.
    Codice PHP:
    echo '
    <tr style="background-color: '
    .$colore.'">
    <td style="background-color: #e0e04e;" align="right">'
    . $cont++ . '</td>
    <td style="border-bottom: 1px solid #000000" align="left">'
    . $cognome . '</td>
    <td style="border-bottom: 1px solid #000000" align="left">'
    . $nome . '</td>
    <td style="border-bottom: 1px solid #000000" align="center">'
    . $entra . '</td>

    <td style="border-bottom: 1px solid #000000" align="center"><fieldset><input type="text" size="15" maxlength="8" name="ora_u" value="'
    .$elenco.'"> </fieldset></td>

    <td style="border-bottom: 1px solid #000000" align="right">'
    . $idEl . '</td>

    </tr>'
    ;
    $_SESSION = array('id_el' =>$idEl, 'orario'=>'ora_u' );
    Come vedi in fondo al listato ci sono i valori che mi servono. (ora_u e $id_El)
    Avevo provato ad usare una sessione per salvarmi questi dati.
    Però se mi dici che è più comodo farlo con una classe, cambio idea.
    Come dovrei procedere ? Grazie ancora

  7. #7
    L'avatar di zerobruno
    zerobruno non è connesso Utente
    Data registrazione
    03-10-2013
    Messaggi
    192

    Predefinito

    Citazione Originalmente inviato da portier Visualizza messaggio
    Grazie alemoppo.
    Codice PHP:
    $_SESSION = array('id_el' =>$idEl, 'orario'=>'ora_u' );
    Gli altri utenti (messaggio 1 e 2) sono stati cattivissimi e non te l'hanno detto; ma guarda che quando definisci l'array, devi assegnarlo a $_SESSION['id_el], e non a $_SESSION.

    Comunque bella l'idea dell'array nella sessione, non c'avevo mai pensato, quindi continuavo a creare infinite sessioni, una per ogni dato.
    Ultima modifica di zerobruno : 23-09-2014 alle ore 16.05.52 Motivo: Opzionale

  8. #8
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Grazie a tutti, ma non riesco a far funzionare l'arrary. Mi mostra solo l'ultimo dato.

  9. #9
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,573

    Predefinito

    Non hai fatto come ti ho suggerito. Rileggi il mio messaggio.


    Citazione Originalmente inviato da portier
    Codice PHP:
    $_SESSION = array('id_el' =>$idEl, 'orario'=>'ora_u' );
    Non mi sembra come questo:
    Citazione Originalmente inviato da alemoppo
    Codice PHP:
    $_SESSION['dati']['id'] = ''id_el'';
    $_SESSION['dati']['orari'] = array(162, 148, 184);
    Ciao!
    Ultima modifica di alemoppo : 23-09-2014 alle ore 22.42.40

  10. #10
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Si, ho provato alemoppo. Ma non funziona.
    Ottengo solo:
    id: id_el Orari: 162 148 184

    Nella riga
    Codice PHP:
    $_SESSION['dati']['id'] = ''id_el'';
    ho tolto un apice perchè avevo un errore.
    Corregendo così
    Codice PHP:
    $_SESSION['dati']['id'] = 'id_el';

  11. #11
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Ad ogni id associato un orario:
    Codice PHP:
    $_SESSION['dati'] = array(162 => 'orario1', 123 => 'orario2', 368 => 'orario3');
    richiamato con (ad es.)
    Codice PHP:
    foreach($_SESSION['dati'] as $idEl => $ora_u)
    echo
    $idEl." : ".$ora_u."<br>\n";
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  12. #12
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,573

    Predefinito

    Per gli apici hai ragione, ho messo due volte i singoli apici invece dei doppi apici.
    Però a questo punto non ho capito il problema, nel senso che per ogni utente devi salvare soltanto i propri orari e il proprio id, giusto? Non devi quindi salvare i dati degli altri utenti, quindi come soluzione mi viene in mente ancora quella che ti ho indicato, a parte il fatto che invece dei numeri, ci vanno gli orari. (sbadatamente non mi son accorto che i numeri rappresentavano gli id e non gli orari ).

    Aggiorno quindi il codice che ti avevo proposto:

    Codice PHP:
    $_SESSION['dati']['id'] = 168; //qui l'id dell'utente
    $_SESSION['dati']['orari'] = array('13:45', '12:09', '17:14', '5:10'); //qui gli orari dell'utente
    Per visualizzare i dati (identico a prima):
    Codice PHP:
    <?php
    echo 'id: '.$_SESSION['dati']['id'].PHP_EOL;

    echo
    'Orari: ';
    foreach(
    $_SESSION['dati']['orari'] as $orario)
    echo
    $orario.' ';
    ?>
    Se invece vuoi salvare gli orari di tutti gli utenti, allora il codice postato da Luffio dovrebbe andare, anche se io farei una cosa del tipo:

    Codice PHP:
    $_SESSION['dati'] = array(
    array(
    'id_utente'=>184, 'orari'=>array('18:07', '15:09')),
    array(
    'id_utente'=>125, 'orari'=>array('15:17', '12:11')),
    array(
    'id_utente'=>187, 'orari'=>array('1:45', '13:23', '20:09')),
    array(
    'id_utente'=>199, 'orari'=>array('00:00', '05:37'))
    );
    p.s: ovviamente facendo una classe e salvando i vari oggetti il tutto verrebbe molto più naturale. Così diciamo che è uguale ma più a "basso livello".

    Ciao!
    Ultima modifica di alemoppo : 24-09-2014 alle ore 11.54.17

  13. #13
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Ringrazio ovviamente tutti dell'aiuto, ma ancora non ci sono arrivato.
    alemoppo se vuoi aiutarmi ha fare una classe, te ne sarei grato.

    Intanto provo a spiegarmi meglio per far capire meglio l'utilizzo che devo realizzare.
    Ho una tabella con elencati degli utenti. A questi utenti devo inserire un'orario, che corrisponde all'orario di uscita.
    Quindi un utente, un orario.
    Ad esempio posso avere Piero che esce alle 22:15:02, Aldo che esce alle 23:12:03, ecc. ecc.

    Quello che devo fare è: recuperare l'id dell'utente in elenco (che conosco) e l'orario di uscita che inserisco tramite un form.
    Questi due valori nella tabella ci sono, quindi basta recuperarli e salvarli nuovamente sul db.
    Per l' utente ho usato la variabile $id_el (che è l'id della presenza all'evento salvato nella tabella del db) e per il form il name "ora_u".

    Non posso quindi mettere
    Codice PHP:
    $_SESSION['dati']['id'] = 168;
    Ma forse qualcosa del tipo
    Codice PHP:
    $_SESSION['dati']['id'] = array ($id_el); //per avere l'elenco degli utenti.
    Idem per l'orario.
    Codice PHP:
    $_SESSION['dati']['orari'] = array('ora_u');
    O sbaglio ?

    Evidentemente si, perchè non funziona.
    Ultima modifica di portier : 24-09-2014 alle ore 15.58.15

  14. #14
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Se $id_el è sempre uno e un solo elemento, tanto vale scrivere
    Codice PHP:
    $_SESSION['dati']['id'] = $id_el;
    Se il form ha action=post allora a ora_u accedi tramite $_POST['ora_u'], altrimenti attraverso $_GET['ora_u']; come hai scritto tu, invece, semplice metti una stringa di valore 'ora_u' all'interno di array.
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  15. #15
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Ho provato a fare così:
    Codice PHP:
    $_SESSION['dati']['id'] = $id_el;
    $_SESSION['dati']['orari'] = $_POST['ora_u'];
    Ma con il modello di alemoppo adesso mi scrive solo
    id:
    Orari:

    Cioè senza valori e sempre 1 volta solo.

  16. #16
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Come definisci $id_el? Com'è fatto il tuo form?
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  17. #17
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Spiego quello che devo fare e come ho ragionato.
    Faccio una ricerca degli utenti per un determinato giorno ai quali devo poter modificare l'orario perchè mancante.

    La prima parte l'ho realizzata. Quindi tramite un ciclo while intabello gli utenti ricercati, i quali hanno un ID univoco per quel giorno. Questo è l'ID che potrei usare di riferimento per correggere l'ora. L'ora la correggo tramite form.

    Avevo così pensato che se mettevo nel ciclo while una sessione per i dati, potevo poi recuperarli.
    Però così forse non può funzionare, perchè i dati del form ancora non ci sono.
    Almeno però poteva salvarmi in un array i dati dei vari ID ?

  18. #18
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    La teoria è chiara, però noi non abbiamo a disposizione il codice dove fai quello che dici, e dove probabilmente sono tutte le imperfezioni. Puoi postare il tuo listato (=codice) ?

    Poi, ti conviene -dove non sei sicuro- inserire un bel po' di echo e print_r seguite da un bell' exit per capire se fino a un certo punto il programma fa quello che vuoi tu.
    Ultima modifica di Luffio : 25-09-2014 alle ore 16.09.32
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  19. #19
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Ho cambiato tecnica.
    Prima volevo dare la possibilità di fare tutte le correzioni possibili e poi premere su INVIO.
    Adesso invece per ogni riga di valori caricata ho messo il bottone aggiorna.
    In questo modo funziona. Cioè mandando all'update una riga per volta.

    Volevo però a questo punto fare una finezza.
    Far ricaricare la pagina di ricerca, aggiornata.

    Per far questo, dopo l'update, rimando alla pagina in questione. E fino a qui ci sono.
    Funziona, però mi carica la pagina di default (diciamo così) cioè quella con la data odierna e i campi vuoti.
    Spero sia chiara la spiegazione.

    Per far questo avevo usato questa tecnica:
    Codice PHP:
    $datatop = $_SESSION['datag']; // recupero la data impostata per la ricerca
    if(empty($_POST['miadata'])and($datatop))
    In pratica ricarico la data della ricerca e la metto nella variabile $datatop. (Questo valore c'è, l'ho verificato con un echo a video.)
    Poi faccio una verifica.
    Se le variabili miadata (proveniente da form) e $datatop sono vuote (quindi non esistono), mi inserisce la data odierna, altrimenti dovrebbe caricare la mia tabella del giorno richiesto.
    Questo però non avviene. Carica sempre la tabella vuota con la data odierna. Ovviamente se inserisco la data nel form e premo su invia, funziona.

    Inoltre nella parte fatta dall'else mi carica la data proveniente dal form di ricerca, vedi codice
    [PHP] else { $miadata = $_POST['miadata'];
    ecc. ecc./[PHP]
    mentre invece dovrei anche qui mettere la data recuperata, oltre a quella del form.

    Un bell'inghippo. Non so se sono stato abbastanza chiaro.
    Ultima modifica di portier : 26-09-2014 alle ore 06.55.03

  20. #20
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    La riga
    Codice PHP:
    if(empty($_POST['miadata'])and($datatop))
    dice che 'miadata' proveniente dal form è vuota e $datatop non lo è. Se vuoi che entrambe siano vuote, devi scrivere
    Codice PHP:
    if(empty($_POST['miadata']) and empty($datatop))
    PS: Rivedendo tutto il codice che hai postato, non ho trovato da nessuna parte la chiamata session_start(), senza la quale la sessione non viene creata: la stai usando?
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  21. #21
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Grazie Luffio,
    con la tua indicazione ho risolto e ho completato il progetto.

    P.S. tanto per rispondere alla tua ultima domanda. Si, certo che avevo aperto la sessione. Grazie a tutti

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •