Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Problemi con indicizzazione, session e array.

    Ciao a tutti,
    ho un problema con questo codice :

    <?php

    $sql1= "SELECT rischio FROM esposizione_rischi_qualifica WHERE tipo_qualifica='$qualifica'";
    $sql2= "SELECT rischio FROM esposizione_rischi_uo WHERE unita_operativa='$uo' AND codice_struttura='$c'";

    $res1 =executeQuery($sql1);
    $res2 =executeQuery($sql2);



    while($riga = mysql_fetch_array($res2,MYSQL_NUM)){

    $rischi_uo[] = $riga[0];

    }

    $i=0;

    while($rig = mysql_fetch_array($res1,MYSQL_NUM)){
    if(in_array($rig[0],$rischi_uo)) {
    $pres="SI";
    }
    else
    $pres="NO";


    ?>
    <form action="prova.php" method="post">
    <?php
    echo "
    <div class=\"riga\" style=\"height:4%\">
    <div class=\"rl\" style=\"font-weight:bold;\"> $rig[0] </div>
    <div class=\"rc\"style=\"font-weight:bold;text-align:center;\"> $pres </div>
    <div class=\"rr\" style=\"margin-left:49%;\">";
    include 'lista_rischi_individuali.php';
    echo
    "</div>
    </div>";

    session_register("$f[$i]");
    $_SESSION['$f[$i]'] = $rig[0];
    session_register("$p[$i]");
    $_SESSION['$p[$i]'] = $pres;
    session_register("$t[$i]");
    $_SESSION['$t[$i]'] = $rischioind[$i];

    $i+1;

    echo" <div style=\"width:33%;height:5%;margin-left:33%;margin-right:33%;\">";
    ?>


    <input type="submit" style="width:30%;height:100%;float:left;" name="Convalida" value="Convalida"/>
    </form>
    }
    In pratica sto cercando di memorizzare in diversi array f[i], p[i], t[i] le informazioni relative a $rig[0], $pres e $rischioind[i], per ogni iterazione del while.

    Premendo il Convalida si arriva in una pagina successiva "prova.php" nella quale voglio stampare a video le variabili con un echo.

    L'ultima variabile che ho menzionato ($rischioind) è stata dichiarata nel file incluso lista_rischi_individuali.php come
    <select name="rischioind<?php $i ?>"style="width:80%;">
    <option value ="Esposto">Esposto</option>
    <option value ="Non esposto">Non esposto</option>
    </select
    Ora io non capisco come riutilizzare il menù a selezione richiamandolo e differenziandolo riga per riga nel while con l'indice i (qui ci ho provato così name="rischioind<?php $i ?> ).

    Come riuso il codice html della select grazie all'indicizzazione fatta in php sull'etichetta(cioè il name) della select stessa !?

    Il secondo problema è che non riesco a passare con metodo SESSION le altre due variabili ($rig[0] e $pres).
    In pratica una volta cliccato su conferma nella pagina di prova vengono stampati solo gli ultimi valori e non tutto l'array. I valori stampati fra l'altro sono quelli associati all'ultimo valore dell'indice, cioè se ad esempio il while si itera per 6 volte l'indice assumerà come ultimo valore i=6 e il valore degli "array" (a una dimensione) p[6] f[6] t[6] saranno gli unici valori passati alla pagina prova.php quando verrà premuto Conferma..

    Come posso passare alla pagina successiva (quella reindirizzata dal convalida) le informazioni relative a quelle tre righe (rig[0],pres,rischioind) ?
    Forse sbaglio ad utilizzare proprio la variabile session ?

  2. #2
    Ammetto di non aver letto tutto il codice, ma di sicuro mancano un echo e, perché no, un ;

    name="rischioind<?php echo $i; ?>"
    Michele
    King Of The Kill

  3. #3
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    il punto e virgola non è indispensabile ma l'echo si

    P.S.
    se nel tag php c'è una sola istruzione non è necessario il ; anche se consiglio di metterlo ugualmente

  4. #4
    Grazie mille !!!!! Non lo avevo proprio visto...

    Per quanto riguarda la faccenda degli array in session invece ?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    570
    è meglio abituarsi ad una sintassi corretta... volendo avrebbe pure potuto fare questo:

    Codice PHP:
    <?= $i ?>
    ma è meglio evitare certe estrosità

  6. #6
    Sì, giusto. Tieni comunque conto che gli short tags non sempre sono abilitati...

    Per poter sfruttare le sessioni, comunque, ogni tua pagina dovrebbe iniziare con session_start();
    Se riesci, inoltre, per gli array (come $_SESSION, ad esempio) ti conviene utilizzare delle chiavi un po' più "umane" (non robe tipo '$p[$i]', anche perché così non credo funzioni...).

    Codice PHP:
    <?php
    session_start
    ();

    # ... resto del codice

    $i 0;

    while ( ... ) {

        
    # ... operazioni varie

        
    $_SESSION['f'][$i] = $rig[0];
        
    $_SESSION['p'][$i] = $pres;
        
    $_SESSION['t'][$i] = $rischioind[$i];

        
    # incrementi $i
        
    $i++;       # oppure $i=$i+1 ... non come avevi scritto tu: $i+1
    }
    ?>
    Michele
    King Of The Kill

  7. #7
    Si certo avevo tralasciato il session start senza il quale non avrebbero senso le variabili di sessione.
    Grazie KingOfTheKill sei stato chiarissimo.
    Solo una cosa.. nella pagina prova.php in questo modo però prendo tutte e tre come SESSION e non rig[0] e pres come SESSION e ricercaind come POST.. cambia qualcosa con il form ?

    Le variabili sono di test e assolutamente temporanee poi le cambio.

    Nella pagina prova.php invece per ricevere i tre array

    Codice PHP:
    <?php

       session_start
    ();

    for(
    $j=0;$j<4;$j++) {

       echo
    "</br>";

       
    $a[$j]=$_SESSION['f'][$i];
       
    $b[$j]=$_SESSION['p'][$i];

    /* $c[$j]=$_POST['rischioind[$i]'] dovrebbe essere così ma come hai detto tu anche rischioind è passata con session */

       
    $c[$j]=$_SESSION['t'][$i];
       echo 
    $a[$j] , $b[$j] , $c[$j] ";
      }
    Giusto ?

  8. #8
    Non mi fa editare il messaggio. Comunque sia il copia e incolla mi ha fatto dimenticare di modificare gli indici... ovviamente ci vogliono le J al posto delle I... sembra funzionare !!!! Grazie infinite !

  9. #9
    Ci sono finalmente riuscito !
    Volevo ringraziarvi ancora una volta senza di voi non ci sarei mai arrivato !
    Ecco due righe al volo di codice esplicativo :
    Codice PHP:
    //Dalla pagina del form dichiarare le session così :

     $_SESSION['f'][$i] = $rig[0]; 
     $_SESSION['p'][$i] = $pres; 

    //(in pratica era a doppie quadre e senza dollaro)
    //     . . . . . . . . . . . .
    //Inoltre la select multipla richiamata dall'include andava definita con name :

    <select name="rischioind[<?php echo $i?>]"style="width:80%;">

    //(con quadre e dollaro)

    //E tutte e tre le variabili richiamate in prova.php invece :

    for($j=0;$j<7;$j++){
    echo"</br>";
       $a[$j]=$_SESSION['f'][$j]; 
       $b[$j]=$_SESSION['p'][$j]; 
       $c[$j]=$_POST['rischioind'][$j];
         
    echo "PROVA : $a[$j], $b[$j] , $c[$j] "; 

    }
    MITICI !!!

  10. #10
    Tutto è bene quel che finisce bene!
    Michele
    King Of The Kill

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.