Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di ercoli
    Registrato dal
    Mar 2002
    Messaggi
    173

    Select dinamica jquery+php

    Grazie a quanti vorranno eventualmente darmi qualche indicazione.

    Ho due select dinamiche grazie a jQuery e Ajax, per ottenere le prestazioni erogabili da un reparto ospedaliero.
    Se seleziono il reparto (la prima select), viene correttamente popolata la seconda select (quella dei prestazioni); però - e qui sta il problema - se successivamente seleziono una prestazione dalla seconda select, la query che viene passata al file php non valorizza la variabile prestazioneid (verificato con Firebug) e dunque non restituisce il riepilogo finale.
    La cosa pazzesca è che se agisco direttamente sulla seconda select (quella delle prestazioni) la variabile prestazioneid viene correttamente valorizzata!

    Questo il codice html:

    codice:
    <!-- 
    ###########
    SELECT REPARTI
    ###########
    -->
    
    
    
    <label for="reparto">reparto:</label>
    
    <select id="reparto" name="reparto" onchange="selReparto(this.value);">
    <option value="" selected="selected">-- seleziona --</option>
    <?php
    
    // Query selezione reparti. 
    $sql = "select * from reparti order by reparto"; 
    
    // Eseguo la query. 
    $result = mysql_query($sql, $conn); 
    while($reparto = mysql_fetch_array($result)) {
    ?>
    <option value="<?php echo $reparto['id']; ?>"><?php echo $reparto['reparto']; ?></option>
    <?php
    }
    ?>
    </select>
    </p>
    
    <!-- 
    ###########
    SELECT PRESTAZIONI 
    ###########
    -->
    
    
    
    <label for="prestazioni">Prestazione:</label>
    
    <select id="prestazioni" name="prestazioni" onchange="selPrest(this.value);">
    <option value="" selected="selected">-- seleziona --</option>
    <?php
    
    // Query selezione tutte le prestazioni. 
    $sql = "select * from generale order by PRESTAZIONE"; 
    
    // Eseguo la query. 
    $result = mysql_query($sql, $conn); 
    while($prestazione = mysql_fetch_array($result)) {
    ?>
    <option value="<?php echo $prestazione['PRESTAZIONE']; ?>"><?php echo $prestazione['PRESTAZIONE']; ?></option>
    <?php
    }
    ?>
    </select>
    </p>
    
    <!-- 
    ###########
    RIEPILOGO
    ###########
    -->
    
    
    
    <label for="riepilogo">Riepilogo:</label>
    
    <p id="riepilogo"></p>
    </p>
    Questo invece il Javascript/Ajax per generare dinamicamente le select:

    codice:
    // Select delle prestazioni. 
    function selReparto(idreparto) {
      // Seleziono le prestazioni di questo reparto. 
      $.get("select_3.php", { repartoid: idreparto, requestItems: 'prestazioni'}, 
      function(dataprestazioni){
        $("select[id='prestazioni']").empty();
        var options = '<option value="">-- seleziona --</option>';
        var arrayprestazioni = dataprestazioni.split('||');
        for (var i = 1; i < arrayprestazioni.length; i++) {
          var prestazione = arrayprestazioni[i].split(/,/);
          options += '<option value="' + prestazione[0] + '">' + prestazione[1] + '</option>';
        }
        $("select[id='prestazioni']").html(options);
      });
    
    }
    
    // Select di una prestazione. 
    function selPrest(nomePrest) {
      // Seleziono una prestazione. 
      $.get("select_3.php", { prestazioneid: nomePrest, requestItems: 'prestazione'}, 
      function(dataPrestazione){
        $("p[id='riepilogo']").empty();
        var options = '
    
    </p>';
        var arrayPrestazione = dataPrestazione.split('||');
        for (var i = 1; i < arrayPrestazione.length; i++) {
          var prestazione = arrayPrestazione[i].split(/,/);
          options += '
    
    ' + prestazione[0] + '</p>' + '
    
    ' + prestazione[1] + '</p>';
        }
        $("p[id='riepilogo']").html(options);
      });
    }
    E infine il codice del file php richiamato da $.get per interagire con MySQL:

    codice:
    // Seleziona le prestazioni di un reparto. 
    include("dbconfig.php");
    
    if (isset($_GET['repartoid']) and is_numeric($_GET['repartoid'])) {
      if (isset($_GET['requestItems']) and $_GET['requestItems']==='prestazioni') {
        $repartoID = intval($_GET['repartoid']);
        $query = <<<EOQ
    SELECT * 
    FROM generale 
    WHERE id_reparto = '$repartoID' 
    ORDER BY PRESTAZIONE
    EOQ;
        $result = mysql_query($query, $conn);
        $returnprestazioni = '';
        while ($row = mysql_fetch_array($result)) {
          $returnprestazioni .= "||".$row['id'].",".$row['PRESTAZIONE'];
        }
        print_r($returnprestazioni);
      }
    }
    //seleziona la prestazione scelta 
    else if (isset($_GET['prestazioneid'])) {
      if (isset($_GET['requestItems']) and $_GET['requestItems']==='prestazione') {
        $prestazioneID = $_GET['prestazioneid'];
        $query = <<<EOQ
    SELECT * 
    FROM generale 
    WHERE PRESTAZIONE = '$prestazioneID' 
    ORDER BY PRESTAZIONE
    EOQ;
        $result = mysql_query($query, $conn);
        $returnPrestazione = '';
        while ($row = mysql_fetch_array($result)) {
          $returnPrestazione .= "||".$row['PRESTAZIONE'].",".$row['EROGABILE'];
        }
        print_r($returnPrestazione);
      }
    }

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    E basta!!! alla tua prossima discussione aperta su questo argomento chiedo il ban
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

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.