• Consiglio Direttivo

    Credo di non essere in grado di aiutarti :mmm: pardon 😉


  • User

    Scusatemi ragazzi ma ero in grossi casini ma sono riuscito ad ottenere il risultato voluto grazie anche a Digital Daigor.
    Ho cretato una tabella temporanea sulla quale dopo faccio i confronti con le date del calendario dell'intervallo scelto dall'utente, stampo a video e cancello la tabella temporanea.
    Così forse non si capisce molto ma forse con il codice....

    creazione della tabella temporanea
    [PHP]
    /inizio creazione tabella temporanea
    $today=date("dmY");
    $tmp_name_table="$id_area_user$today$id_username";//manca variabile scelta prima pagina
    //echo "<br/>$tmp_name_table<br/>";

    $create_tmp_table="CREATE TABLE $tmp_name_table(
          N_SERV VARCHAR(40) NOT NULL,
          N_AREA VARCHAR(40) NOT NULL,
          N_A_OP VARCHAR(50) NOT NULL,
          N_SOTT_A VARCHAR(50) NOT NULL,
          ID_M_ATT INT NOT NULL,
          S_M_ATT VARCHAR(10) NOT NULL,
          N_M_ATT VARCHAR(200) NOT NULL,
          B_S VARCHAR(50) NOT NULL)";//query che crea la tabella temporanea sul db con stringhe di testo
    

    [/PHP]
    poi inserisco i dati nella tabella creata

    poi creo la stringa con le date da scrivere nella prima riga della tabella da stampare a video
    [PHP]
    //crei un array con tutte le date

      //Inizio codice per la stampa del calendario
      $d1=$_POST['d1']; //Recupero la variabile globale del primo giorno
      $m1=$_POST['m1']; //Recupero la variabile globale del primo mese
      $y1=$_POST['y1']; //Recupero la variabile globale del primo anno
      $data1=mktime(0,0,0,$m1,$d1,$y1);
      $d2=$_POST['d2']; //Recupero la variabile globale del secondo giorno
      $m2=$_POST['m2']; //Recupero la variabile globale del secondo mese
      $y2=$_POST['y2']; //Recupero la variabile globale del secondo anno
      $data2=mktime(0,0,0,$m2,$d2,$y2);
      $giorni = array("Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab");
      
      $tot_day=((($data2-$data1)/(24*60*60))+1);//il +1 serve per far contare il primo giorno dell'intervallo (es. 3-1=2 ma i val sono 1 2 3 => 3)
      
      $mesi = array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre","Novembre", "Dicembre");
      
      
      if ($d1==null or $m1==null or $y1==null or $d2==null or $m2==null or $y2==null){ //Proseguo se almeno un numero è non definito
      
       echo "<br/>Hai commesso un errore nell'immisione di almeno una data!"; //Stampa l'errore
      
      }else {
      
       $numero_giorno_settimana1 = date("w",mktime(0,0,0,$m1,$d1,$y1));
       $nome_giorno1 = $giorni[$numero_giorno_settimana1];
       
       $numero_mese1= date("n",mktime(0,0,0,$m1,$d1,$y1));
       $numero_mese1--;
       $nome_mese1 = $mesi[$numero_mese1];
       
       echo "da <b>$nome_giorno1".date(" d/m/Y",mktime(0,0,0,$m1,$d1,$y1))."</b>";
       
       $numero_giorno_settimana2 = date("w",mktime(0,0,0,$m2,$d2,$y2));
       $nome_giorno2 = $giorni[$numero_giorno_settimana2];
       
       $numero_mese2= date("n",mktime(0,0,0,$m2,$d2,$y2));
       $numero_mese2--;
       $nome_mese2 = $mesi[$numero_mese2];
       
       echo " al <b>$nome_giorno2".date(" d/m/Y",mktime(0,0,0,$m2,$d2,$y2))."</b>";//stampa il range scelto dall'utente
       
       $data_count=$data1;
       ?>
       
       
       
      </div>
      <div class="box_select_activity">
      
      
      
      
      <?php 
      //Inizio della tabella
      echo "<table class='table1' ><tr>";
      
      
    
     $prima_r = "<td class='td2'><b>Servizio</b></td><td class='td2'><b>Area</b></td><td class='td2'><b>Ambito</b></td><td class='td2'><b>Sottoambito</b></td><td class='td2'><b>Macroattivita</b></td><td class='td2'><b>Banca/Service</b></td>";
     
     //crei un array con tutte le date
     $data_check = array();//creazione dell'array contenente le date
     
     while($data_count <= $data2){
        $count=getdate($data_count);
        $w_count= $count['wday'];
        $m_count= $count['mon'];
        $d_count= $count['mday'];
        $y_count= $count['year'];
        
        if($d_count <= mktime(0,0,0,0,0,$y_count)){//se è prima dell'ultimo dell'anno
         if($d_count <= mktime(0,0,0,$m_count,0,$y_count)){//se è prima dell'ultimo del mese
         
          $nome_giorno =$giorni[$w_count];
          $prima_r .=  "<td class='td2'><b> $nome_giorno".date(" d",mktime(0,0,0,$m_count,$d_count,$y_count))."</b></td>";
          
          $data_check[]= date("dmY",mktime(0,0,0,$m_count,$d_count,$y_count));
          
          
          $data_count=mktime(0,0,0,$m_count,$d_count+1,$y_count);
         }else {//se è il primo del mese successivo
         
          $nome_giorno =$giorni[$w_count];
          $prima_r .=  "<td class='td2'><b> $nome_giorno".date(" d",mktime(0,0,0,$m_count,$d_count,$y_count))."</b></td>";
          
          $data_check[]= date("dmY",mktime(0,0,0,$m_count,$d_count,$y_count));
          
          
          $data_count=mktime(0,0,0,$m_count+1,$d_count+1,$y_count);
         }
        }else {//se è il primo dell'anno successivo
        
         $nome_giorno =$giorni[$w_count];
         $prima_r .=  "<td class='td2'><b> $nome_giorno".date(" d",mktime(0,0,0,$m_count,$d_count,$y_count))."</b></td>";
         
         $data_check[]= date("dmY",mktime(0,0,0,$m_count,$d_count,$y_count));
         
         
         $data_count=mktime(0,0,0,$m_count+1,$d_count+1,$y_count+1);
        }
     }
     
     echo "$prima_r</tr>"; //Stampa della prima riga con Titoli delle colonne e date del calendario
     }
    

    [/PHP]
    ed infine la stampa a video della tabella con i già detti confronti con le date e la cancellazione della tabella temporanea dal db
    [PHP]
    //inizio stampa a video la tabella temporanea
    $vista_tmp="SELECT * FROM $tmp_name_table";
    $vista_tmp_mssql=@mssql_query($vista_tmp,$link);

     while($result_vista_tmp=mssql_fetch_array($vista_tmp_mssql)){
       
       $s_serv = $result_vista_tmp ["N_SERV"];
       $s_area = $result_vista_tmp ["N_AREA"];
       $s_aop = $result_vista_tmp ["N_A_OP"];
       $s_sotta = $result_vista_tmp ["N_SOTT_A"];
       $s_matt= $result_vista_tmp ["S_M_ATT"];
       $n_matt= $result_vista_tmp ["N_M_ATT"];
       $s_b_s= $result_vista_tmp ["B_S"];
       
      $riga="";
      
      for($i=0;$i<=$tot_day-1;$i++){
      
       $controllo_tdi="SELECT * From tdi_$s_matt Where DATA='$data_check*' And BANCA='$s_b_s'";
       
       $query1=@mssql_query($controllo_tdi,$link);
       
       if($query1==NULL){
        $name="&nbsp;";
        $riga .=  "<td class='td1'>$name</td>";       
       }else{        
        $vista_query1=mssql_fetch_array($query1);
        if($vista_query1==0){
         $name="&nbsp;";
         $riga .=  "<td class='td1'>$name</td>";          
        }else{
         $name=$vista_query1["ID_NAME"];
         $riga .=  "<td class='td1' bgcolor='#33FF99'><b>$name</b></td>"; 
        }
       }
       
      }
       
       echo "
           <tr>
            <td class='td1'>$s_serv</td>
          <td class='td1'>$s_area</td>
          <td class='td1'>$s_aop</td>
          <td class='td1'>$s_sotta</td>
          <td class='td1'>$n_matt</td>
          <td class='td1'>$s_b_s</td>
          $riga
           </tr>
          ";
      
     }
     echo "</table>";
    

    //fine stampa tabella temporanea

    //inizio cancella la tabella temporanea dal db
    $drop_tmp="DROP TABLE $tmp_name_table";
    $drop_tmp_mssql=@mssql_query($drop_tmp,$link);
    //fine cancella la tabella temporanea dal db
    [/PHP]


  • User

    Ho una ricerca sul db che può essre filtrata selezionando da un form la checkbox di una o più domande e passando il valore da ricercare.
    Fin qui niente di difficile. Il mio problema nasce quando devo ricercare più valori nella stessa tabella del db che abbiano uno stesso ID di inserimento.
    Provo a spiegarmi in italiano con un esempio.

    Sul db io ho una tabella T_domande che contiene tutte le domande del form ed ha i seguenti campi:
    -ID_D (univoco) domanda
    -D domanda in chiaro
    -TD tipo domanda
    Poi ho una tabella TDI_dati che contiene tutti i dati salvati tramite il form ed ha i seguenti campi:
    -ID_D riferito alla id della domanda della tabella T_domande
    -ID_INS numero di inserimento di un gruppo
    -VAL valore del dato inserito tramite il form

    Il form contiene più domade ma tutte hanno un ID_D diveso (esempi tre domande con i rispettivi ID_Q 33,34,35) e quando un utente inserisce i dati questi vengono salvati nella tabella TDI_dati nel seguente modo

    ID_D||ID_INS||VAL||
    33 || 3 ||ciao||
    34 || 3 ||cip ||
    35 || 3 ||ralf||
    33 || 4 ||ciao||
    34 || 4 ||ciop||
    35 || 4 ||ralf||
    33 || 5 ||miao||
    34 || 5 ||cip ||
    35 || 5 ||cra ||
    33 || 6 ||ciao||
    34 || 6 ||ciop||
    35 || 6 ||ralf||

    Ora il mio problema è che nella pagina di ricerca dei record che vorrei creare vengono stampate tutte le domande con affianco una checkbox e un campo per la ricerca.
    Se la checkbox è selezionata bisogna fare una query sulla TDI_dati dove si ricerca per ID_D della domanda il o i records che hanno la parola da ricercare immessa dall'utente nel form (es tutte le domande con ID_D=33 che hanno VAL=ciao).
    Io fino a qui sono riuscito a realizzalo.
    Iol passo successivo, anche questo realizzato, è stato quello di stampare a video quei record che si rispettassero la suddetta richiesta ma che mi stampasse anche tutte le altre domande che avessero lo stesso ID_INS dei record che hanno dato esito positivo alla ricerca avendo cosi il seguente risultato:

    ID_D||ID_INS||VAL||ID_D||ID_INS||VAL||ID_D||ID_INS||VAL||
    33 || 3 ||ciao||34 || 3 ||cip ||35 || 3 ||ralf ||
    33 || 4 ||ciao||34 || 4 ||ciop||35 || 4 ||ralf||
    33 || 6 ||ciao||34 || 6 ||ciop||35 || 6 ||ralf ||

    Bene!
    Eccoci arrivati al dilemma!
    Io vorrei ricercare ad esempio tutti i record che hanno sia ID_D=33 e VAL=ciao ma anche quelli che hanno ID_D=35 e VAL=ralf.

    Come diavolo posso fare?
    Vorrei cosi ottenere solo il seguente risultato :

    ID_D||ID_INS||VAL||ID_D||ID_INS||VAL||ID_D||ID_INS||VAL||
    33 || 3 ||ciao||34 || 3 ||cip ||35 || 3 ||ralf ||
    33 || 6 ||ciao||34 || 6 ||ciop||35 || 6 ||ralf ||

    Chi mi sa dare un buon consiglio?


  • User Attivo

    Secondo me potresti usare un ciclo così da avere 1 array x ogni risultato oppure mettere nella query:
    ID_D in (33,35) AND VAL in ("ciao","ralf")

    oppure caso ti servano le cose associate

    WHERE (ID_D=33 AND VAL = ciao) OR (ID_D=35 AND VAL = ralf)


  • User

    Ciao DIGITAL DAIGOR!!!
    Scusami ma non ho capito bene come formulare il tuo primo consiglio.

    la mia query è questa:

    SELECT * FROM tdi_dati INNER JOIN t_domande ON tdi_dati.ID_Q=t_domande.ID_Q WHERE tdi_dati.VAL LIKE '%ciao%' AND tdi_dati.ID_Q='33' ORDER BY ID_INS, tdi_dati.ID_Q

    ma mi funziona solo per la ricerca ad una sola domanda.
    Se io volessi fare la ricerca per più domande come posso modificarla?


  • User Attivo

    per avere gli accoppiamenti, cioè: ciao e 33 , ralf e 35, ecc.

    WHERE (tdi_dati.VAL LIKE '%ciao%' AND tdi_dati.ID_Q='33') OR (tdi_dati.VAL LIKE '%ralf%' AND tdi_dati.ID_Q='35')
    ORDER BY ID_INS, tdi_dati.ID_Q

    se vuoi invece che ci sia almeno uno di ogni tipo di elemento, metti:
    WHERE tdi_dati.VAL IN ('%ciao%','%ralf%') AND tdi_dati.ID_Q IN ('33','35')
    ORDER BY ID_INS, tdi_dati.ID_Q


  • User

    io ho scritto questo codice
    [PHP]
    $scelta="";
    //inizio controllo ricerca nelle risposte alle domande (VAL)
    if(!empty($_POST['check'])){//entra SOLO se almeno una checkbox delle domande è selezionata

      $check=$_POST['check'];//assegna l'id_q della checkbox alla variabile
      
      foreach($check as $key => $value){
       //echo " $key => $value<br/> ";
       
       //inizio query per costruire il nome della variabile che contiene la stringa da ricercare 
       $sql_q="SELECT ID_Q,D_Q,T_Q FROM t_questions WHERE ID_M_ATT='$matt' AND ID_Q='$key'";
       //echo "$sql_q<br/><br/>";
       $q_mssql=@mssql_query($sql_q,$link);
       
       while($result_q=mssql_fetch_array($q_mssql)){
        $id_q = $result_q["ID_Q"];
        $d_q = $result_q ["D_Q"];
        $t_q = $result_q ["T_Q"];
        
        $search=$t_q;
        $search.="_$id_q";
        //echo "$search<br/>";
        $parola_chiave=$_POST[$search];//assegna alla variabile la parola da ricercare
        
        //echo "$parola_chiave<br/>";
       }
       
       //fine query per costruire il nome della variabile che contiene la stringa da ricercare 
       
       
       //inizio query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata
       $sql_q2="SELECT tdi_$matt_s.ID_Q,ID_INS,tdi_$matt_s.ID_M_ATT,ID_NAME,DATA,BANCA,D_Q,tdi_$matt_s.VAL FROM tdi_$matt_s INNER JOIN t_questions ON tdi_$matt_s.ID_Q=t_questions.ID_Q WHERE tdi_$matt_s.VAL LIKE '%$parola_chiave%' AND tdi_$matt_s.ID_Q='$id_q' ORDER BY ID_INS, tdi_$matt_s.ID_Q";
       echo "$sql_q2<br/>";
       
       $q2_mssql=@mssql_query($sql_q2,$link);
       
       $where_ins="";
       
       while($result_q2=mssql_fetch_array($q2_mssql)){
        $id_ins = $result_q2["ID_INS"];
        
        $where_ins.=" tdi_$matt_s.ID_INS='$id_ins' OR";
        
       }       
      }
      //fine query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata
      
      if($where_ins!=""){
       
       $where_ins.=substr("$where_ins",0,-2);//elimina l'ultimo OR perchè c'è bisogno di un AND tra $where_ins e il LIKE
       
       if($scelta!=""){
        $scelta.=" AND $where_ins AND tdi_$matt_s.VAL LIKE '%$parola_chiave%'";
       }else{
        $scelta.=" $where_ins AND tdi_$matt_s.VAL LIKE '%$parola_chiave%'";
       }
      }else{
       echo "<b>Nessun record inserito corrisponde ai parametri impostati.</b><br/><br/>";
      }
     }
     //fine controllo ricerca nelle risposte alle domande (VAL)
    

    $where_query="";

     if($scelta!=""){
      $where_query.=" WHERE $scelta";
     }else{
      $where_query.="";
     }
    

    [/PHP]
    e le query stampate sono le seguenti
    SELECT tdi_GRR.ID_Q,ID_INS,tdi_GRR.ID_M_ATT,ID_NAME,DATA,BANCA,D_Q,tdi_GRR.VAL FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q WHERE tdi_GRR.VAL LIKE '%12012008%' AND tdi_GRR.ID_Q='29' ORDER BY ID_INS, tdi_GRR.ID_Q

    SELECT tdi_GRR.ID_Q,ID_INS,tdi_GRR.ID_M_ATT,ID_NAME,DATA,BANCA,D_Q,tdi_GRR.VAL FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q WHERE tdi_GRR.VAL LIKE '%service%' AND tdi_GRR.ID_Q='30' ORDER BY ID_INS, tdi_GRR.ID_Q

    quindi io ho il filtraggio solo dell'ultima query e non la combinazione delle due.

    Chi mi da una mano?
    GRAZIE


  • User

    io ho scritto questo codice
    [PHP]
    $scelta="";

     //inizio controllo ricerca nelle risposte alle domande (VAL)
     if(!empty($_POST['check'])){//entra SOLO se almeno una checkbox delle domande è selezionata
      
      $check=$_POST['check'];//assegna l'id_q della checkbox alla variabile
      
      foreach($check as $key => $value){
       //echo " $key => $value<br/> ";
       
       //inizio query per costruire il nome della variabile che contiene la stringa da ricercare 
       $sql_q="SELECT ID_Q,D_Q,T_Q FROM t_questions WHERE ID_M_ATT='$matt' AND ID_Q='$key'";
       //echo "$sql_q<br/><br/>";
       $q_mssql=@mssql_query($sql_q,$link);
       
       while($result_q=mssql_fetch_array($q_mssql)){
        $id_q = $result_q["ID_Q"];
        $d_q = $result_q ["D_Q"];
        $t_q = $result_q ["T_Q"];
        
        $search=$t_q;
        $search.="_$id_q";
        //echo "$search<br/>";
        $parola_chiave=$_POST[$search];//assegna alla variabile la parola da ricercare
        
        //echo "$parola_chiave<br/>";
       }
       
       //fine query per costruire il nome della variabile che contiene la stringa da ricercare 
       
       
       //inizio query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata
       $sql_q2="SELECT tdi_$matt_s.ID_Q,ID_INS,tdi_$matt_s.ID_M_ATT,ID_NAME,DATA,BANCA,D_Q,tdi_$matt_s.VAL FROM tdi_$matt_s INNER JOIN t_questions ON tdi_$matt_s.ID_Q=t_questions.ID_Q WHERE tdi_$matt_s.VAL LIKE '%$parola_chiave%' AND tdi_$matt_s.ID_Q='$id_q' ORDER BY ID_INS, tdi_$matt_s.ID_Q";
       echo "$sql_q2<br/>";
       
       $q2_mssql=@mssql_query($sql_q2,$link);
       
       $where_ins="";
       
       while($result_q2=mssql_fetch_array($q2_mssql)){
        $id_ins = $result_q2["ID_INS"];
        
        $where_ins.=" tdi_$matt_s.ID_INS='$id_ins' OR";
        
       }       
      }
      //fine query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata
      
      if($where_ins!=""){
       
       $where_ins.=substr("$where_ins",0,-2);//elimina l'ultimo OR perchè c'è bisogno di un AND tra $where_ins e il LIKE
       
       if($scelta!=""){
        $scelta.=" AND $where_ins AND tdi_$matt_s.VAL LIKE '%$parola_chiave%'";
       }else{
        $scelta.=" $where_ins AND tdi_$matt_s.VAL LIKE '%$parola_chiave%'";
       }
      }else{
       echo "<b>Nessun record inserito corrisponde ai parametri impostati.</b><br/><br/>";
      }
     }
     //fine controllo ricerca nelle risposte alle domande (VAL)
    

    $where_query="";

     if($scelta!=""){
      $where_query.=" WHERE $scelta";
     }else{
      $where_query.="";
     }
    

    [/PHP]
    e le query stampate sono le seguenti
    SELECT * FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q WHERE tdi_GRR.VAL LIKE '%12012008%' AND tdi_GRR.ID_Q='29' ORDER BY ID_INS, tdi_GRR.ID_Q

    SELECT * FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q WHERE tdi_GRR.VAL LIKE '%service%' AND tdi_GRR.ID_Q='30' ORDER BY ID_INS, tdi_GRR.ID_Q

    quindi io ho il filtraggio solo dell'ultima query e non la combinazione delle due.

    Chi mi da una mano?
    GRAZIE


  • User

    scusate la ripezione del messaggio ma non saprei cosa sia successo alla rete ma io vorrei filtrare tutti quei record rispondono correttamente alla query ma che abbiano inoltre la stessa ID_INS (gruppo di inserimento).
    Per spiegarmi meglio:

    SELECT * FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q
    WHERE (tdi_GRR.VAL like '%12012008%' AND tdi_GRR.ID_Q='29') OR (tdi_GRR.VAL like '%service%' AND tdi_GRR.ID_Q='30')
    ORDER BY ID_INS, tdi_GRR.ID_Q

    mi si stampa a video questo:
    ID_Q|ID_INS|DOMANDA|VAL
    29 |1 |quest1 |12012008
    30 |1 |quest2 |service
    30 |2 |quest2 |service
    29 |3 |quest1 |12012008
    30 |3 |quest2 |service

    Ora il problema è che la domanda che ha ID_INS=2 non deve essere stampata perchè risponde positivamente solo alla seconda condizione e non ad entrambe.
    Ora come posso scrivere una query ad hoc per avere solo questo risultato:
    ID_Q|ID_INS|DOMANDA|VAL
    29 |1 |quest1 |12012008
    30 |1 |quest2 |service
    29 |3 |quest1 |12012008
    30 |3 |quest2 |service

    io ho provato con questa ed ho il risultato cercato:
    SELECT * FROM tdi_GRR INNER JOIN t_questions ON tdi_GRR.ID_Q=t_questions.ID_Q
    WHERE (tdi_GRR.VAL like '%12012008%'OR tdi_GRR.VAL like '%service%') AND tdi_GRR.ID_Q IN ('29','30')AND ID_INS IN (1,3)
    ORDER BY ID_INS, tdi_GRR.ID_Q

    ma come faccio ad inserire la clausola ID_INS IN (1,3) con i valori all'interno giusti visto che è tutto dinamico come si può vedere dal codice postato precedentemente.

    GRAZIE ragazzi siete sempre una fonte vera di saggezza!!!


  • User Attivo

    ma come faccio ad inserire la clausola ID_INS IN (1,3) con i valori all'interno giusti visto che è tutto dinamico come si può vedere dal codice postato precedentemente.

    nn ho capito sta parte.

    se è quello che penso, basta che tu gli metti una variabile, formattata giusta ed è fatta!

    $in_query = "1,2,3";

    o ancora meglio:
    $array_in = array("1","2","3");
    $in_query = implode(",",$array_in);

    e hai tutta la dinamicità che vuoi!


  • User

    ho fatto una cosa del genere e funziona
    [PHP]//inizio controllo ricerca nelle risposte alle domande (VAL)
    $array_parola_chiave=array();
    $array_id_ins=array();

     $i=0;
     
     if(!empty($_POST['check'])){//entra SOLO se almeno una checkbox delle domande è selezionata
      
      $check=$_POST['check'];//assegna l'id_q della checkbox alla variabile
      
      foreach($check as $key => $value){
       //echo " $key => $value<br/> ";
       
       //inizio query per costruire il nome della variabile che contiene la stringa da ricercare 
       $sql_q="SELECT ID_Q,D_Q,T_Q FROM t_questions WHERE ID_M_ATT='$matt' AND ID_Q='$key'";
       //echo "$sql_q<br/><br/>";
       $q_mssql=@mssql_query($sql_q,$link);
       
       
       
       while($result_q=mssql_fetch_array($q_mssql)){
        $id_q = $result_q["ID_Q"];
        $d_q = $result_q ["D_Q"];
        $t_q = $result_q ["T_Q"];
        
        $search=$t_q;
        $search.="_$id_q";
        //echo "$search<br/>";
        $parola_chiave=$_POST[$search];//assegna alla variabile la parola da ricercare
        
        //echo "$parola_chiave<br/>";
        $array_parola_chiave*=$parola_chiave;
        $array_id_ins*=$key;
        $i=$i+1;
       }
      } 
      //fine query per costruire il nome della variabile che contiene la stringa da ricercare 
      //echo "$i<br/>";//numero di checkbox selezionate
      /*for($c=0;$c<$i;$c++){
       echo "$array_parola_chiave<br/>";//indica le parole immesse per la ricerca
      } */
      
      //inizio query per costruire la clausola del WHERE solo per le domande che hanno la stessa ID_INS delle righe nelle quali sono presenti la stringa precedentemente ricercata
            
      $word_key_ins="";
      
      for($c=0;$c<$i;$c++){
       
       $word_key_ins.=" (tdi_$matt_s.VAL LIKE '%$array_parola_chiave%' AND tdi_$matt_s.ID_Q='$array_id_ins') OR";
      }
      $word_key_ins.=substr("$word_key_ins",0,-2);//elimina l'ultimo OR perchè c'è bisogno di un AND tra $where_ins e il LIKE
      //echo "$word_key_ins<br/>";
      
      $sql_q2="SELECT ID_INS FROM tdi_$matt_s INNER JOIN t_questions ON tdi_$matt_s.ID_Q=t_questions.ID_Q WHERE $word_key_ins GROUP BY ID_INS HAVING COUNT(ID_INS)='$i'";
      //echo "$sql_q2<br/>";
       
      $q2_mssql=@mssql_query($sql_q2,$link);
       
      $id_ins_in="";
       
      while($result_q2=mssql_fetch_array($q2_mssql)){
       $id_ins = $result_q2["ID_INS"];
        
       $id_ins_in.="$id_ins,";
      }
      $id_ins_in.=substr("$id_ins_in",0,-1);//elimina l'ultima virgola
      //echo "$id_ins_in<br/>";
      
      if($id_ins_in!=""){
       if($scelta!=""){
        $scelta.=" AND ID_INS IN ($id_ins_in)";
       }else{
        $scelta.=" ID_INS IN ($id_ins_in)";
       }
      }else{
       echo "<b>Nessun record inserito corrisponde ai parametri impostati.</b><br/><br/>";
      }
      //echo "$scelta<br/>";
    
     }
     //fine controllo ricerca nelle risposte alle domande (VAL)[/PHP]
    

    GRazie


  • User

    Il nuovo quesito di oggi è:
    come posso creare un upload per file excel con campi preimpostati in modo tale da stampare a video il contenuto del file xls e poi salvarli sul db.

    La mia mezza idea è questa:
    [PHP]require_once 'E:\cso_manager\Excel\reader.php';
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('CP1251');
    $data->read('$directory');// indirizzi.xls
    include("../config.php");
    error_reporting(E_ALL ^ E_NOTICE);
    //script funzionante che legge da file excel fisso
    /require_once 'E:\cso_manager\Excel\reader.php';//oppure require_once '/EXCEL/reader.php';
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('CP1251');
    $data->read('indirizzi.xls');
    include("../config.php");//oppure include("../config.php");
    error_reporting(E_ALL ^ E_NOTICE);
    /
    //script che legge da file excel e stampa a video
    //variabili utilizzate per la stampa a video
    //$data->sheets[0]['numRows'];//numero di righe contenute nel file excel
    //$data->sheets[0]['numCols'];//numero di colonne contenute nel file excel
    //$data->sheets[0]['cells']**;//serve per prelevare il valore contenuto in ogni cella
    echo "<table border='1'>";
    for($i = 1; $i <= $data->sheets[0]['numRows']; $i++){
    echo "<tr>";

    for($j = 1; $j <= $data->sheets[0]['numCols']; $j++){
    echo "<td>".$data->sheets[0]['cells']*[$j]."</td>";
    }

    echo "</tr>";
    }
    echo "</table>";/**/
    /*
    //script per caricare i dati sul db
    for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++){
    $nome= "".$data->sheets[0]['cells'][1].""; //nome
    $cognome= "".$data->sheets[0]['cells']
    [2].""; //cognome
    $indirizzo= "".$data->sheets[0]['cells'][3].""; //indirizzo
    $query="insert into indirizzi (nome,cognome,indirizzo)values('$nome','$cognome','$indirizzo')";
    $dati=mssql_query($query);
    if($dati)echo"successo<br/>";
    else echo"fallimento<br/>";
    } /
    /

    //script per leggere i dati dal db e visualizzarli a video
    echo"<TABLE border='1'>";
    echo"<tr><td><b>nome</b></td><td><b>cognome</b></td><td><b>indirizzo</b></td></tr>";
    $dati=mssql_query("select * from indirizzi");
    $NumEntries=mssql_num_rows($dati);
    while($array=mssql_fetch_array($dati)){
    echo"<tr><td>$array[nome]</td><td>$array[cognome]</td><td>$array[indirizzo]</td></tr>";
    }
    echo"</TABLE>";
    /
    ?>
    [/PHP]
    dove reader.php lo trovato in giro sul web e funge.
    Il mio vero problema è quello di caricare il file excel da qualsiasi pc (il suddetto upload).
    Io ho provato così ma non lo carica
    [PHP]<?
    echo"<form enctype="multipart/form-data" action="/EXCEL/example2.php" method="post">";//indica che il tipo di dato che stiamo trasferendo dal form
    echo"<input type="hidden" name="MAX_FILE_SIZE" value="1000000">";//dimensione massima che il file da uplodare puo? avere
    echo"file: <input name="userfile" type="file"> ";//campo in cui verra? messo il percorso completo
    echo"<input type="submit" value="Invia">";
    echo"</form>";
    ?>
    [/PHP]

    Chi mi da una mano???????:?:?:?


  • User Attivo

    Prova questa fatta da me, è na funzionona, abb complessa, ma, all'occorrenza, crea cartelle con htaccess ecc..

    dovrebbero esserci degli esempi dentro!!!

    [ATTACH]1335[/ATTACH]


  • User

    Scusami digital daigor ho dato uno sguardo al tuo script e mi è sorta una domanda, ma io devo perforza salvare il file sul server ? Non posso solo leggere il contenuto del file xls e stamparloa video osalvarlo sul db?


  • User Attivo

    si, non puoi leggere un file dal client, x la sicurezza, forse con java puoi, ma nn sono sicuro, l'unico modo è uploddare il file, leggerlo e cancellarlo!


  • Consiglio Direttivo

    Confermo, ho avuto a che fare anch'io con excel e PHP, l'unica è uploadare il file 😉
    Se riesci puoi fare in modo che l'upload sia automatico e che a fine passaggio venga cancellata la copia sul server, ma il file sempre lì deve andare per essere elaborato 😉


  • User

    bene ragazzi sono arrivato a salvare il file dul server,poi stamparloa video ,anche salvarlo nel db e ristamparloa video ed infine a cancellare il file.
    TUTTO FUNZIONA
    lascio ai posteri
    per fare l'upload io ho fatto così
    [PHP]<html>
    <body>
    <form enctype="multipart/form-data" action="/EXCEL/verify_import.php" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
    <table width="400">
    <tr>
    <td>URL file:</td>
    <td><input type="file" name="url_file" enctype="multipart/form-data"></td>
    <td><input type="submit" name="upload" value="Carica" /></td>
    </tr>
    </table>
    </form>
    </body>
    </html>
    [/PHP]
    per il resto delle operazioni ho scritto questo
    [PHP]<?php
    include("../config.php");
    //inizio funzione che elemina un singolo file oppure tutti i file di una cartella
    function eliminafiles($dirname){
    if(file_exists($dirname) && is_file($dirname)){
    unlink($dirname);
    }elseif(is_dir($dirname)){
    $handle = opendir($dirname);
    while(false !== ($file = readdir($handle))){
    if(is_file($dirname.$file)){
    unlink($dirname.$file);
    }
    }
    $handle = closedir($handle);
    rmdir($dirname);
    }
    }
    //fine funzione che elemina un singolo file oppure tutti i file di una cartella
    //inizio controllo del corretto caricamento del file e in caso affermativo copia del file su una cartella sul server
    if($_POST[upload]=="Carica" && isset($_FILES['url_file']['tmp_name'])&& (substr($_FILES['url_file']['name'],-4)==".xls")){

    $dir="$_SERVER[DOCUMENT_ROOT]/EXCEL/"; //directory dove andranno i nostri files
    $nome_file=$_FILES['url_file'][name];
    echo "Il tuo file EXCEL si chiama <b>$nome_file</b><br/>";
    // COPIA del FILE SUL SERVER
    //print_r($_FILES);//stampa l'arry associativo di $_FILES

    if(is_uploaded_file($_FILES['url_file']['tmp_name'])){
    move_uploaded_file($_FILES['url_file']['tmp_name'],"$dir/$nome_file") or die("<br/>Impossibile spostare il file<br/>");
    }else{
    die("<br/>Errore nell'upload del file.<br/>");
    }
    //echo"$dir/$nome_file<br/>";
    }
    //fine controllo del corretto caricamento del file
    //inizio della lettura del file excel
    require_once 'E:\cso_manager\Excel\reader.php';
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('CP1251');
    $data->read($nome_file);//indirizzi.xls
    //error_reporting(E_ALL ^ E_NOTICE);
    //inizio della lettura del file excel

    //inizio della stempa a video della tabella
    echo "<table border='1'>";
    for($i = 1; $i <= $data->sheets[0]['numRows']; $i++){
    echo "<tr>";

    for($j = 1; $j <= $data->sheets[0]['numCols']; $j++){
    echo "<td>".$data->sheets[0]['cells']*[$j]."</td>";
    }

    echo "</tr>";
    }
    echo "</table>";/**/
    //fine della stempa a video della tabella
    /*
    //script per caricare i dati sul db
    for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++){
    $nome= "".$data->sheets[0]['cells'][1].""; //nome
    $cognome= "".$data->sheets[0]['cells']
    [2].""; //cognome
    $indirizzo= "".$data->sheets[0]['cells'][3].""; //indirizzo
    $query="insert into indirizzi (nome,cognome,indirizzo)values('$nome','$cognome','$indirizzo')";
    $dati=mssql_query($query);
    if($dati)echo"successo<br/>";
    else echo"fallimento<br/>";
    } /
    /

    //script per leggere i dati dal db e visualizzarli a video
    echo"<TABLE border='1'>";
    echo"<tr><td><b>nome</b></td><td><b>cognome</b></td><td><b>indirizzo</b></td></tr>";
    $dati=mssql_query("select * from indirizzi");
    $NumEntries=mssql_num_rows($dati);
    while($array=mssql_fetch_array($dati)){
    echo"<tr><td>$array[nome]</td><td>$array[cognome]</td><td>$array[indirizzo]</td></tr>";
    }
    echo"</TABLE>";
    /
    eliminafiles("$dir/$nome_file");//richiama la funzione eliminafiles ed elimina il singolo file caricato
    mssql_close($link);
    ?>[/PHP]


  • Consiglio Direttivo

    Grandioso pizzet 😄
    grazie 😉


  • User

    preciso che questo nuovo approccio non è rivoluzionario per tutti ma riguarda solo le mie limitate competenze nei confronti del javascipt.
    Ho letto in giro e stò approfondendo le mie conoscenze con ajax ma prima ho voluto provare a fare una select dinamica che si popolasse tramite un db utilizzando una semplice funzione in js e il resto è affidato al php.
    Ora il codice funziona ma non come vorrei.
    Premetto che la prima select mi sceglie l'operazione, scelta questa mi compare una seconda select con la lista dei "servizi", dopodichè scelto il servizio si va alla lista delle "aree", così procedendo anche per gli "ambiti", "sottoambiti" ed infine le "macroattività".

    [php]
    <?php
    include ("config.php");
    include ("user.php");
    ?>
    <?php
    if (isset ($_POST['ordine']))
    $ordine = $_POST['ordine'];
    else
    $ordine = "0";
    ?>
    <?php
    if (isset ($_POST['servizi']))
    $servizi = $_POST['servizi'];
    else
    $servizi = "0";
    //echo "$servizi<br/>";
    ?>
    <?php
    if (isset ($_POST['aree']))
    $aree = $_POST['aree'];
    else
    $aree = "0";
    //echo "$aree<br/>";
    ?>
    <?php
    if (isset ($_POST['aop']))
    $aop = $_POST['aop'];
    else
    $aop = "0";
    //echo "$aop<br/>";
    ?>
    <?php
    if (isset ($_POST['sotta']))
    $sotta = $_POST['sotta'];
    else
    $sotta = "0";
    //echo "$sotta<br/>";
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Select dinamica CSO</title>
    <script type="text/javascript">
    <!--
    function invia()
    {
    document.form1.submit();
    }
    //-->
    </script>
    </head>
    <body>
    <form name="form1" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
    <p>
    <select name="ordine" onchange="invia()">
    <option value="0"<?php echo ($ordine == "0" ? " selected="selected"" : ""); ?>>----- seleziona -----</option>
    <option value="1"<?php echo ($ordine == "1" ? " selected="selected"" : ""); ?>>Servizi</option>
    <!--<option value="2"<?php echo ($ordine == "2" ? " selected="selected"" : ""); ?>>Attrici per cognome</option>-->
    </select>
    </p>
    <?php if ($ordine == "1") { ?>
    <p>
    <?php
    $sql_servizi="SELECT ID_SERV, N_SERV FROM t_serv ORDER BY ORD";

    $result_mssql_servizi=@mssql_query($sql_servizi,$link);

    if(!$result_mssql_servizi) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_servizi="<option value='0' $servizi == '0' ? ' selected='selected'' : ''>----- seleziona -----</option>";
    while($result_servizi=mssql_fetch_array($result_mssql_servizi)){
    $ids_serv = $result_servizi ["ID_SERV"];//sigla
    $n_serv=$result_servizi ["N_SERV"];//nome per esteso
    $opt_servizi.="<option value='$ids_serv'>$n_serv</option>";
    }
    ?>
    SERVIZI <select name="servizi" onchange="invia()">
    <?php echo "$opt_servizi";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($servizi != "0") { ?>
    <p>
    <?php
    $sql_aree="SELECT * FROM tl_serv_aree INNER JOIN t_aree ON tl_serv_aree.ID_AREA=t_aree.ID_AREA WHERE ID_SERV='$servizi' ORDER BY ORD";

    $result_mssql_aree=@mssql_query($sql_aree,$link);

    if(!$result_mssql_aree) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_aree="<option value='0' ($aree == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_aree=mssql_fetch_array($result_mssql_aree)){
    $ids_area = $result_aree ["ID_AREA"];//sigla
    $n_area=$result_aree ["N_AREA"];//nome per esteso
    $opt_aree.="<option value='$ids_area'>$n_area</option>";
    }
    ?>
    AREE <select name="aree" onchange="invia()">
    <?php echo "$opt_aree";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($aree != "0") { ?>
    <p>
    <?php
    $sql_aop="SELECT * FROM tl_aree_a_op INNER JOIN t_a_op ON tl_aree_a_op.ID_A_OP=t_a_op.ID_A_OP WHERE ID_AREA='$aree' ORDER BY ORD";

    $result_mssql_aop=@mssql_query($sql_aop,$link);

    if(!$result_mssql_aop) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_aop="<option value='0' ($aop == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_aop=mssql_fetch_array($result_mssql_aop)){
    $id_aop = $result_aop ["ID_A_OP"];//numero univoco
    $ids_aop = $result_aop ["S_A_OP"];//sigla
    $n_aop=$result_aop ["N_A_OP"];//nome per esteso
    $opt_aop.="<option value='$id_aop'>$n_aop</option>";
    }
    ?>
    AMBITI OPERATIVI <select name="aop" onchange="invia()">
    <?php echo "$opt_aop";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($aop != "0") { ?>
    <p>
    <?php
    $sql_sotta="SELECT * FROM tl_a_op_sott_a INNER JOIN t_sott_a ON tl_a_op_sott_a.ID_SOTT_A=t_sott_a.ID_SOTT_A WHERE ID_A_OP='$aop' ORDER BY ORD";

    $result_mssql_sotta=@mssql_query($sql_sotta,$link);

    if(!$result_mssql_sotta) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_sotta="<option value='0' ($sotta == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_sotta=mssql_fetch_array($result_mssql_sotta)){
    $id_sotta = $result_sotta ["ID_SOTT_A"];//numero univoco
    $ids_sotta = $result_sotta ["S_SOTT_A"];//sigla
    $n_sotta=$result_sotta ["N_SOTT_A"];//nome per esteso
    $opt_sotta.="<option value='$id_sotta'>$n_sotta</option>";
    }
    ?>
    SOTTAMBITI OPERATIVI <select name="sotta" onchange="invia()">
    <?php echo "$opt_sotta";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($sotta != "0") { ?>
    <p>
    <?php
    $sql_matt="SELECT * FROM tl_sott_a_m_att_proc INNER JOIN t_m_att ON tl_sott_a_m_att_proc.ID_M_ATT=t_m_att.ID_M_ATT WHERE ID_SOTT_A='$sotta' ORDER BY ORD";

    $result_mssql_matt=@mssql_query($sql_matt,$link);

    if(!$result_mssql_matt) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_sotta="<option value='0' ($sotta == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_matt=mssql_fetch_array($result_mssql_matt)){
    $id_matt = $result_matt ["ID_M_ATT"];//numero univoco
    $ids_matt = $result_matt ["S_M_ATT"];//sigla
    $n_matt=$result_matt ["N_M_ATT"];//nome per esteso
    $opt_matt.="<option value='$id_matt'>$n_matt</option>";
    }
    ?>
    MACROATTIVITA' <select name="matt" onchange="">
    <?php echo "$opt_matt";?>
    </select>
    </p>

    <?php } ?>
    <p>
    <input type="submit" value="INVIA">
    </p>
    </form>
    <?php mssql_close($link); ?>
    </body>
    </html>
    [/php]

    Ora i miei problemi sono:
    -il codice visivamente funziona fino alla scelta delle aree dopodichè dopo aver scelto l'area la select di queste viene sostituita con la nuovqa select degli ambiti e così via sino alle macroattività.
    COSA SBAGLIO?????
    -vorrei mantenere visivamente selezionato i campi scelti precedentemente nelle rispettive select

    Mi date una mano please


  • User

    lo posto perchè può essere sempre utile.
    Era una cavolata infatti entrambi gli errori erano dovuti alla mancanza della selezione delle voci nelle singole select.
    [PHP]
    <?php
    include ("config.php");
    include ("user.php");
    ?>
    <?php
    if (isset ($_POST['ordine']))
    $ordine = $_POST['ordine'];
    else
    $ordine = "0";
    ?>
    <?php
    if (isset ($_POST['servizi']))
    $servizi = $_POST['servizi'];
    else
    $servizi = "0";
    //echo "$servizi<br/>";
    ?>
    <?php
    if (isset ($_POST['aree']))
    $aree = $_POST['aree'];
    else
    $aree = "0";
    //echo "$aree<br/>";
    ?>
    <?php
    if (isset ($_POST['aop']))
    $aop = $_POST['aop'];
    else
    $aop = "0";
    //echo "$aop<br/>";
    ?>
    <?php
    if (isset ($_POST['sotta']))
    $sotta = $_POST['sotta'];
    else
    $sotta = "0";
    //echo "$sotta<br/>";
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Select dinamica CSO</title>
    <script type="text/javascript">
    <!--
    function invia()
    {
    document.form1.submit();
    }
    //-->
    </script>
    </head>
    <body>
    <form name="form1" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
    <p>
    <select name="ordine" onchange="invia()">
    <option value="0"<?php echo ($ordine == "0" ? " selected="selected"" : ""); ?>>----- seleziona -----</option>
    <option value="1"<?php echo ($ordine == "1" ? " style='background-color:#EEEEEE' selected="selected"" : ""); ?>>Servizi</option>
    <!--<option value="2"<?php echo ($ordine == "2" ? " selected="selected"" : ""); ?>>Attrici per cognome</option>-->
    </select>
    </p>
    <?php if ($ordine == "1") { ?>
    <p>
    <?php
    $sql_servizi="SELECT ID_SERV, N_SERV FROM t_serv ORDER BY ORD";

    $result_mssql_servizi=@mssql_query($sql_servizi,$link);

    if(!$result_mssql_servizi) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_servizi="<option value='0' ($servizi == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_servizi=mssql_fetch_array($result_mssql_servizi)){
    $ids_serv = $result_servizi ["ID_SERV"];//sigla
    $n_serv=$result_servizi ["N_SERV"];//nome per esteso
    $opt_servizi.="<option value='$ids_serv' ".($servizi == $ids_serv ? ' selected='selected'' : '').">$n_serv</option>";
    }
    ?>
    SERVIZI <select name="servizi" onchange="invia()">
    <?php echo "$opt_servizi";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($servizi != "0") { ?>
    <p>
    <?php
    $sql_aree="SELECT * FROM tl_serv_aree INNER JOIN t_aree ON tl_serv_aree.ID_AREA=t_aree.ID_AREA WHERE ID_SERV='$servizi' ORDER BY ORD";

    $result_mssql_aree=@mssql_query($sql_aree,$link);

    if(!$result_mssql_aree) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_aree="<option value='0' ($aree == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_aree=mssql_fetch_array($result_mssql_aree)){
    $ids_area = $result_aree ["ID_AREA"];//sigla
    $n_area=$result_aree ["N_AREA"];//nome per esteso
    $opt_aree.="<option value='$ids_area' ".($aree == $ids_area ? ' selected='selected'' : '').">$n_area</option>";
    }
    ?>
    AREE <select name="aree" onchange="invia()">
    <?php echo "$opt_aree";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($aree != "0") { ?>
    <p>
    <?php
    $sql_aop="SELECT * FROM tl_aree_a_op INNER JOIN t_a_op ON tl_aree_a_op.ID_A_OP=t_a_op.ID_A_OP WHERE ID_AREA='$aree' ORDER BY ORD";

    $result_mssql_aop=@mssql_query($sql_aop,$link);

    if(!$result_mssql_aop) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_aop="<option value='0' ($aop == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_aop=mssql_fetch_array($result_mssql_aop)){
    $id_aop = $result_aop ["ID_A_OP"];//numero univoco
    $ids_aop = $result_aop ["S_A_OP"];//sigla
    $n_aop=$result_aop ["N_A_OP"];//nome per esteso
    $opt_aop.="<option value='$id_aop' ".($aop == $id_aop ? ' selected='selected'' : '').">$n_aop</option>";
    }
    ?>
    AMBITI OPERATIVI <select name="aop" onchange="invia()">
    <?php echo "$opt_aop";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($aop != "0") { ?>
    <p>
    <?php
    $sql_sotta="SELECT * FROM tl_a_op_sott_a INNER JOIN t_sott_a ON tl_a_op_sott_a.ID_SOTT_A=t_sott_a.ID_SOTT_A WHERE ID_A_OP='$aop' ORDER BY ORD";

    $result_mssql_sotta=@mssql_query($sql_sotta,$link);

    if(!$result_mssql_sotta) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_sotta="<option value='0' ($sotta == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_sotta=mssql_fetch_array($result_mssql_sotta)){
    $id_sotta = $result_sotta ["ID_SOTT_A"];//numero univoco
    $ids_sotta = $result_sotta ["S_SOTT_A"];//sigla
    $n_sotta=$result_sotta ["N_SOTT_A"];//nome per esteso
    $opt_sotta.="<option value='$id_sotta' ".($sotta == $id_sotta ? ' selected='selected'' : '').">$n_sotta</option>";
    }
    ?>
    SOTTAMBITI OPERATIVI <select name="sotta" onchange="invia()">
    <?php echo "$opt_sotta";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($sotta != "0") { ?>
    <p>
    <?php
    $sql_matt="SELECT * FROM tl_sott_a_m_att_proc INNER JOIN t_m_att ON tl_sott_a_m_att_proc.ID_M_ATT=t_m_att.ID_M_ATT WHERE ID_SOTT_A='$sotta' ORDER BY ORD";

    $result_mssql_matt=@mssql_query($sql_matt,$link);

    if(!$result_mssql_matt) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_sotta="<option value='0' ($matt == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_matt=mssql_fetch_array($result_mssql_matt)){
    $id_matt = $result_matt ["ID_M_ATT"];//numero univoco
    $ids_matt = $result_matt ["S_M_ATT"];//sigla
    $n_matt=$result_matt ["N_M_ATT"];//nome per esteso
    $opt_matt.="<option value='$id_matt' ".($matt == $id_matt ? ' selected='selected'' : '').">$n_matt</option>";
    }
    ?>
    MACROATTIVITA' <select name="matt" onchange="">
    <?php echo "$opt_matt";?>
    </select>
    </p>

    <?php } ?>
    <p>
    <input type="submit" value="INVIA">
    </p>
    </form>
    <?php mssql_close($link); ?>
    </body>
    </html>
    [/PHP]