Select concatenate php sql ajax

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

Emix

Utente Attivo
15 Feb 2010
596
0
16
Buonasera, sto diventando matto... Sono partito dallo script classico di province regioni comuni.
Mi occorre modificarlo avendo solamente due select concatenate, in una i destinatari e nella seconda eventuali destinazioni.

La tabella destinatari:

id_destinatario
ragione sociale

La tabella destinazioni:
id_destination
id_destinatario
indirizzo

Ho provato modificando lo script e ottengo i seguenti file:

Index:
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <meta http-equiv="content-type" content="text/html charset=utf-8">
    <meta name="author" content="Tarchini Maurizio">

    <script type="text/javascript" src="jquery-1.3.2.js"></script>

    <link href="screen.css" rel="stylesheet" type="text/css" />
    <title>Regioni, province, comuni | Your Inspiration Web</title>
    
    <script type="text/javascript">
    $(document).ready(function(){

        var scegli = '<option value="0">Scegli...</option>';
        var attendere = '<option value="0">Attendere...</option>';
        
        $("select#province").html(scegli);
        $("select#province").attr("disabled", "disabled");
        $("select#comuni").html(scegli);
        $("select#comuni").attr("disabled", "disabled");
        
        
        $("select#regioni").change(function(){
            var regione = $("select#regioni option:selected").attr('value');
            $("select#province").html(attendere);
            $("select#province").attr("disabled", "disabled");
            $("select#comuni").html(scegli);
            $("select#comuni").attr("disabled", "disabled");
            
            $.post("select.php", {id_destinatario:destinatari}, function(data){
                $("select#province").removeAttr("disabled");
                $("select#province").html(data);   
            });
        });   
        
        $("select#province").change(function(){
            $("select#comuni").attr("disabled", "disabled");
            $("select#comuni").html(attendere);
            var provincia = $("select#province option:selected").attr('value');
            $.post("select.php", {id_pro:provincia}, function(data){
                $("select#comuni").removeAttr("disabled");
                $("select#comuni").html(data);   
            });
        });   
    });
    
    </script>
</head>
<?php
include_once 'select.class.php';
$opt = new SelectList();
?>
<body>
    <div id="container">
    
    <h1>La cascata regioni - province - comuni</h1>
    <h2>Seleziona una regione e nella select successiva compariranno le province di quella regione</h2>
    <h3>Selezionando una provincia, nella select successiva compariranno i comuni di quella provincia</h3>
    
        <form action="?" id="myform">
            Seleziona una regione:<br />
            <select id="regioni">
                <?php echo $opt->ShowRegioni(); ?>
            </select>
            <br /><br />
        
            Seleziona una provincia:<br />
            <select id="province">
            <option>Scegli...</option>
            </select>
            <br /><br />
        
            Seleziona un comune:<br />
            <select id="comuni">
            <option>Scegli...</option>
            </select>
            
        </div>
    </form>


</body>
</html>

Pagina Select.php:

PHP:
<?php

include_once 'select.class.php';
$opt = new SelectList();

if(isset($_POST['id_destinatario']))
{
    echo $opt->ShowProvince();
    die;
}

if(isset($_POST['id_pro']))
{
    echo $opt->ShowComuni();
    die;
}


?>

Pagina select.class.php:

PHP:
<?php

class SelectList
{
    
    protected $conn;
    
        public function __construct()
        {
            $this->DbConnect();
        }
    
        protected function DbConnect()
        {
            include "db_config.php";
            
            $this->conn = mysql_connect($host,$user,$password) OR die("Impossibile connettersi al database");
            mysql_select_db($db,$this->conn) OR die("Impossibile selezionare il database $db");
            
            return TRUE;
        }
        
        public function ShowRegioni()
        {
            $sql = "SELECT * FROM destinatari";
            $res = mysql_query($sql,$this->conn);
            $regioni = '<option value="0">scegli...</option>';
            
                while($row = mysql_fetch_array($res))
                {
                    $regioni .= '<option value="' . $row['id_destinatario'] . '">' . utf8_encode($row['ragsociale']) . '</option>';
                }
                
            return $regioni;
        }
        
        public function ShowProvince()
        {
            $sql = "SELECT * FROM destinazioni WHERE id_destinatario=$_POST[id_destinatario]";
            $res = mysql_query($sql,$this->conn);
            $province = '<option value="0">scegli...</option>';
            
                while($row = mysql_fetch_array($res))
                {
                    $province .= '<option value="' . $row['id_destination'] . '">' . utf8_encode($row['indirizzo']) . '</option>';
                }
                
            return $province;
        }
        
        public function ShowComuni()
        {
            $sql = "SELECT * FROM comuni WHERE id_pro=$_POST[id_pro]";
            $res = mysql_query($sql,$this->conn);
            $comuni = '<option value="0">scegli...</option>';
            
                while($row = mysql_fetch_array($res))
                {
                    $comuni .= '<option value="' . $row['id_com'] . '">' . $row['cap'] . ' - ' . utf8_encode($row['comune']) . '</option>';
                }
                
            return $comuni;
        }
}

?>
Come potete vedere ho sostituito le cose che mi servivano ignorando i nomi e ignorando la terza select.
La prima select funziona bene (vedo la lista) la seconda appena clicco, si ferma su attendere... e in console leggo:

(index):32 Uncaught ReferenceError: destinatari is not defined
at HTMLSelectElement.<anonymous> ((index):32)
at HTMLSelectElement.handle (jquery-1.3.2.js:2693)
at HTMLSelectElement.<anonymous> (jquery-1.3.2.js:2468)

Non capisco...

Grazie a chi volesse aiutarmi.
 
Cambia var regione in var destinatari.
Anche inizialmente devi impostare un select checked prelesezionato.
Comunque l'attributo disabled va utilizzato solo dopo l'invio dal momento che puoi inviare solamente i dati che hanno il focus se non devi effettuare alcun invio puoi utilizzare disabled in ogni momento.
Alla prossima istruzione (alla pressione di quella select) rimuovi l'attributo e buona codifica.
 
Ultima modifica:
Grazie ci sono riuscito. Preziosi come sempre!

Ho cambiato la var come detto da te, ora completo con gli altri accorgimenti, anche se mi fermo a due select non 3.
 

Discussioni simili