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

    Select dinamiche in Ajax

    Discussione da eliminare... non ci riesco... SIGH!!
    Ultima modifica di Francesco_72; 17-05-2016 a 17:01

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ma soprattutto avevi chiesto nella sezione meno adatta seppure php un po' c'entra.
    Chiedi in Javascript come si inviano richieste assincrone, come si ricevono i dati e come rimpiazzare i dati dei campi select.

    A grandi linee funziona così (ma appunto per dettagli chiedi in javascript):
    - invii una richiesta POST con AJAX verso uno script PHP
    - lo script PHP legge i dati come se li ricevesse da un form, quindi usando $_POST
    - lo script PHP esegue una query in base alla richiesta ricevuta
    - lo script PHP formatta i dati recuperati dalla query in una stringa JSON e ne fa l'echo
    - lo script PHP ha finito il suo lavoro
    - con AJAX ora recuperi la stringa data in output da PHP
    - decodifichi la stringa JSON ed usi i dati per popolare il campo select

  3. #3
    Buongiorno, intanto mi scuso con tutti perché la prima volta non avevo ben capito come postare il codice e il messaggio veniva tagliato. In pratica il mio problema è questo. Ho una pagina php dove ho inserito delle SELECT (due) dinamiche in ajax (che ammetto di non conoscere) adattando un codice postato su queste pagine qualche anno fa. In pratica al cambiare del valore della prima SELECT cambiano quelli della seconda. All’inizio sembrava funzionare ma poi mi sono accorto che quando seleziono il primo campo della SELECT 2 e invio il form, nel DB mysql collegato viene memorizzato sempre il valore 0 e non l’ID relativo alla selezione effettuata. Questo succede solo per il primo campo in elenco, dal secondo in poi i dati vengono inviati correttamente al DB. Non capisco dove sbaglio. Il tutto si compone di 3 pagine:

    - inserimento.php
    - get.php
    - select.class.php

    Ecco il codice delle pagine:

    codice:
     
    inserimento.php
    <?php
    include('select.class.php');
    $obj = new select();
    $l1 = $obj->getL1();
    ?>
     
    <script type="text/javascript">
    //Script per il menu a concatenazione
     var http = createRequestObject();
     
     function createRequestObject() {
     var ro;
     var browser = navigator.appName;
     if(browser == "Microsoft Internet Explorer"){
     ro = new ActiveXObject("Microsoft.XMLHTTP");
     }else{
     ro = new XMLHttpRequest();
     }
     return ro;
     }
     
     function loading(){
     var id = document.getElementById('gruppi').value;
     http.open('GET','get.php?id='+id, true);
     http.onreadystatechange = getState;
     http.send(null); 
     }
     
     function getState(){
     var newOption;
     var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
     var State = document.getElementById('sezioni');
     while (State.options.length) {
     State.remove(0);
     } 
     id = document.getElementById('gruppi').value;
     if(id == 'sel'){
     document.getElementById('sezioni').disabled = true;
     newOption = document.createElement("option");
     newOption.value = 'sel';
     newOption.text = 'Seleziona una Sezione:';
     State.add(newOption, where); 
     }else{
     if(http.readyState == 4){
     if (http.status == 200) {
     var response = http.responseText;
     if(response == ''){
     document.getElementById('sezioni').disabled = true;
     newOption = document.createElement("option");
     newOption.value = 'sel';
     newOption.text = 'Nessuna voce';
     State.add(newOption, where); 
     }else{
     coppia = response.split(',');
     max = coppia.length;
     newOption = document.createElement("option");
     newOption.value = 'sel';
     newOption.text = 'Seleziona una Sezione:';
     State.add(newOption, where); 
     for(x=0;x<max;x++){
     val = coppia[x].split('-');
     newOption = document.createElement("option");
     newOption.value = val[0];
     newOption.text = val[1];
     State.add(newOption, where); 
     }
     document.getElementById('sezioni').disabled = false;
     }
     }
     } 
     }
     }
     </script>
    ……….
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" name="ins_mobilia" method="post">
    <table width="900" cellpadding="2" align="center" style="font-size:12;">
    …….
    tr><td align="right">GRUPPO *</td><td><select style="width: 400;" name="gruppi" id="gruppi" onchange="loading()">
    <option value="sel" selected="selected" required">Seleziona un Gruppo</option>
                    <?php
                    for($x=0;$x<count($l1);$x++){
                    ?>
    <option value="<?=$l1[$x]['ID_gruppo']?>"><?=$l1[$x]['nome_gruppo']?></option>
                    <?php
                    }
                    ?>
    </select> </td>
    <td align="right">SEZIONE *</td><td><select name="sezioni" id="sezioni" disabled>
    <option value="sel" selected="selected" required>Seleziona una Sezione</option></select></td></tr>
     
    get.php
    <?php
     include('connessione_mobilia.php');
     include('select.class.php');
     $id = $_REQUEST['id'];
     $obj = new select();
     $l1 = $obj->getL1($id);
     $Js = '';
     for($x=0; $x<count($l1); $x++){
     $l2 = $obj->getL2($l1[$x]['ID_gruppo']);
     for($y=0;$y<count($l2);$y++){
     if($y < (count($l2)-1)){
     $end = ",";
     }else{
     $end = "";
     }
     $Js .= $l2[$y]['ID_sezione']."-".$l2[$y]['nome_sezione'].$end;
     }
     } 
     //echo "text";
     echo $Js; 
     ?>
     
    select.class.php
    <?php
     class select{
     
     function select(){
     }
     
     function getL1($id=''){
     if(!empty($id)){
     $sSQL = "SELECT * FROM gruppi WHERE ID_gruppo = $id";
     }else{
     $sSQL = "SELECT * FROM gruppi Order by nome_gruppo";
     } 
     include "../connessione_no_session.php";
     $ris = mysqli_query($conn, $sSQL);
     while($row = mysqli_fetch_assoc($ris)){
     $list[] = array('ID_gruppo' => $row["ID_gruppo"],
     'nome_gruppo' => $row["nome_gruppo"]); 
     } 
     return $list; 
     }
     
     function getL2($id){
     $sSQL = "SELECT * FROM sezioni WHERE ID_gruppo = $id Order By nome_sezione";
     include "../connessione_no_session.php";
     $ris = mysqli_query($conn, $sSQL);
     while ($row = mysqli_fetch_assoc($ris)) {
     $list[] = array('ID_sezione' => $row["ID_sezione"],
     'nome_sezione' => $row["nome_sezione"]);
     }
     return $list; 
     }
     
      }
     ?>
    Spero che qualcuno abbia la pazienza e la voglia di aiutarmi. Grazie in anticipo

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.