Select concatenate php sql ajax

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.
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
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:

Emix

Utente Attivo
15 Feb 2010
596
0
16
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.