Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    [ajax-regioni-province-comuni]risoluzione con abc.js e asp

    Rispondo qui a marcelet che, in un messaggio privato, chiedeva codice ajax-asp sul solito problema regioni-province-comuni.
    Rispondo qui e non in privato perchè credo che l'utilità di questo forum sta nella condivisione delle nostre esperienze.

    Il codice è banale. La parte javascript fa uso della magnifica funzione ajax abc di Andrea Giammarchi, scaricabile qui:
    http://webreflection.blogspot.com/20...asic-call.html

    La parte server fa uso di asp: attenzione perchè, pur funzionando, è da qualche anno che non lo uso più e bisogna controllarlo bene.

    Il database è Access. Ho messo le tabelle dei comuni e delle province, ma non sono aggiornatissime. Si può scaricare qui:
    http://web.tiscali.it/archivio_esemp...nce_comuni.zip

    Ed ecco il codice
    codice:
    <%@  language="VBScript" %>
    <%
    	option explicit
    	
    	Response.Buffer = true
    	
    	onload
    
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Regioni-province-comuni</title>
        <style type="text/css">
            body
            {
                font-family: Verdana, Helvetica, sans-serif;
            }
            select
            {
                width: 300px;
                height: 500px;
            }
            .contenitore
            {
                float: left;
                width: 300px;
                padding: 10px;
            }
        </style>
    
    <script type="text/javascript" src="../../../js/abc.js"></script>
    
    
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    function regioni_onchange(v)
    {
        var url = "?comando_ajax=recupera_province";
        var parametri = {codice_istat_regione:v.value};
        parametri.onLoad = onload;
        parametri.onError = onerror;
        
        ABC(parametri, url);
        
        function onload(request)
        {
            var t = request.responseText;
            document.getElementById("div_province").innerHTML = t;
            document.getElementById("comuni").options.length = 0;
        }
        
    
    }
    
    function province_onchange(v)
    {
        var url = "?comando_ajax=recupera_comuni";
        var parametri = {codice_istat_provincia:v.value};
        parametri.onLoad = onload;
        parametri.onError = onerror;
        
        ABC(parametri, url);
        
        function onload(request)
        {
            var t = request.responseText;
            document.getElementById("div_comuni").innerHTML = t;
    
        }
    
    }
    
    function comuni_onchange(v)
    {
    
    }
    
    function onerror(xhr, elapsedTime)
    {
        alert("Errore di trasmissione: " + xhr.status);
    }
    
    // ]]>
    </script>
    
    </head>
    <body>
        <h3>Regioni-Province-Comuni</h3>
        <div id="div_regioni" class="contenitore">
            regioni
    
            <select size="25" name="regioni" id="regioni" onchange="regioni_onchange(this);" ><%=regioni()%></select>
        </div>
        <div id="div_province" class="contenitore">
            province
    
            <select size="25" name="province" id="province" onchange="province_onchange(this);" style="width: 300px;">
            </select>
        </div>
        <div id="div_comuni" class="contenitore">
            comuni
    
            <select size="25" name="comuni" id="comuni" onchange="comuni_onchange(this);" style="width: 300px;">
            </select>
        </div>
    </body>
    </html>
    <%
    
    sub onload()
        dim comando_ajax
        
        comando_ajax = Request("comando_ajax")
        if(comando_ajax = "recupera_province") then
            recupera_province
        elseif(comando_ajax = "recupera_comuni") then
            recupera_comuni
        end if
    
    end sub
    
    
    function regioni()
        dim db, rs, sql
    
        set db = server.CreateObject("ADODB.Connection")
        set rs = server.CreateObject("ADODB.RECORDSET")
    
        db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dati\test\Regioni_province_comuni.mdb;User Id=admin;Password=;" 
    
    
        sql = "SELECT * FROM REGIONI"
    
        rs.Open sql, db, 3, 3
        dim s
        
        's = "<option value=""""></option>"
        do while not rs.EOF
    	    s = s & "<option value=""" + rs(0) + """ >" & rs(1) & "</option>"
    	    rs.MoveNext
        loop
        regioni = s
        
        rs.Close: set rs = nothing
        db.Close: set db = nothing
    
    end function
    
    sub recupera_province()
        dim codice_istat_regione
        codice_istat_regione = Request("codice_istat_regione")
        response.Clear
        response.Write province(codice_istat_regione)
        response.End
    end sub
    
    function province(codice_istat_regione)
        On error resume next
        
        dim db, rs, sql, s
    
        set db = server.CreateObject("ADODB.Connection")
        set rs = server.CreateObject("ADODB.RECORDSET")
    
        db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dati\test\Regioni_province_comuni.mdb;User Id=admin;Password=;" 
    
    
        sql = "SELECT * FROM Q_PROVINCE WHERE CODICE_ISTAT_REGIONE = """ & codice_istat_regione & """"
        rs.Open sql, db, 3, 3
        if Err.number <> 0 then
            province = "Errore: " & err.number & "
    " & err.Description
            err.Clear
            exit function
        end if
        
        
        s = "province
    <select size=""25"" name=""province"" id=""province"" onchange=""province_onchange(this);"" >"
        do while not rs.EOF
    	    s = s & "<option value=""" + rs(0) + """ >" & rs(1) & "</option>"
    	    rs.MoveNext
        loop
        s = s & "</select>"
        province = s
            
        rs.Close: set rs = nothing
        db.Close: set db = nothing
    
        if Err.number <> 0 then
            province = "Errore: " & err.number & "
    " & err.Description
            err.Clear
            exit function
        end if
        
    end function
    
    sub recupera_comuni()
        dim codice_istat_provincia
        codice_istat_provincia = Request("codice_istat_provincia")
        response.Clear
        response.Write comuni(codice_istat_provincia)
        response.End
    end sub
    
    function comuni(codice_istat_provincia)
        On error resume next
        
        dim db, rs, sql, s
    
        set db = server.CreateObject("ADODB.Connection")
        set rs = server.CreateObject("ADODB.RECORDSET")
    
        db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dati\test\Regioni_province_comuni.mdb;User Id=admin;Password=;" 
    
    
        sql = "SELECT * FROM comuni WHERE codice_istat_provincia = """ & codice_istat_provincia & """"
        rs.Open sql, db, 3, 3
        if Err.number <> 0 then
            comuni = "Errore: " & err.number & "
    " & err.Description
            err.Clear
            exit function
        end if
        
        
        s = "comuni
    <select size=""25"" name=""comuni"" id=""comuni"" onchange=""comuni_onchange(this);"" >"
        do while not rs.EOF
    	    s = s & "<option value=""" + rs(2) + """ >" & rs(3) & "</option>"
    	    rs.MoveNext
        loop
        s = s & "</select>"
        comuni = s
            
        rs.Close: set rs = nothing
        db.Close: set db = nothing
    
        if Err.number <> 0 then
            province = "Errore: " & err.number & "
    " & err.Description
            err.Clear
            exit function
        end if
        
    end function
    
    %>
    ciao
    Pietro

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2000
    Messaggi
    48
    Ciao Pietro,
    non ho provato ancora il codice (e penso che lo faro solo tra qualche giorno)
    ma in goni caso non posso che esprimerti la mia gratitudine.
    Grazie
    Marcello

  3. #3
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Ciao,
    io ho provato il codice, vengono create tre listbox, regioni, province e comuni. Ovviamente solo la prima viene riempita, ma cliccando su una regione non compaiono poi le province.
    Io sono assolutamente a zero su JS... qualcuno potrebbe capire cosa c'è che non va? Grazie mille!

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da longline
    Ciao,
    io ho provato il codice, vengono create tre listbox, regioni, province e comuni. Ovviamente solo la prima viene riempita, ma cliccando su una regione non compaiono poi le province.
    Io sono assolutamente a zero su JS... qualcuno potrebbe capire cosa c'è che non va? Grazie mille!
    Uhmmmm! :master: io posso solo dire di averlo fatto con Visual studio. Provato e collaudato.
    Pietro

  5. #5
    Utente di HTML.it L'avatar di elisa21
    Registrato dal
    May 2004
    residenza
    Lucca
    Messaggi
    246
    chiedo scusa...c'è stato un problema nell'invio del post nella giornata di ieri


    ciao a tutti,
    sto utilizzando questo script all'interno di un form con altri campi che memorizzano altri valori, ho inserito un semplice controllo javascript per evitare che vengano inviati dei campi vuoti, ma si verifica una cosa strana ovvero se seleziono la prima voce del campo regione, la relativa prima voce del campo provincia e del campo comune, faccio per inviare il form alla pagina che andrà a processare l'inseriemento nel database, ricevo un alert che mi avvisa che non ho selezionato nessuna di queste voci.
    Mentre se scelgo una regione, una provincia della regione selezionata e un comune della relativa provincia dalla seconda posizione in giù, il controllo funziona correttamente.

    Questo è il codice javascript che controlla il form inviato:

    codice:
    function IsNumeric(sText) {
    	var ValidChars = "0123456789";
    	var IsNumber=true;
    	var Char;
    	for (i = 0; i < sText.length && IsNumber == true; i++) { 
    		Char = sText.charAt(i); 
    		if (ValidChars.indexOf(Char) == -1) {
    			IsNumber = false;
    			}
    		}
    		return IsNumber; 
    	}
    			
    function ControllaForm()
    	{
    		var controllo=false;
    		var regioni=true;
    		var province=true;
    		var comuni=true;
    		var f_tipologia=true;
    		var f_tipologia3=true;
    		var f_disponibilita=true;
    		var f_prezzo=true;
    		var f_mq=true;
    		var f_camere=true;
    		var f_bagni=true;
    		var f_locali=true;
    		var f_prezzo=true;
    		var f_posto_auto=true;
    		var f_box_auto=true;
    		var f_balcone=true;
    		var f_terrazzo=true;
    		var f_giardino=true;
    		var f_piano=true;
    		var f_stato=true;
    		var f_ascensore=true;
    		var f_riscaldamento=true;
    		var f_portineria=true;
    		var f_vicinanza_automezzi=true;
    		var esposizioneselezionato=true;
    		var portiereselezionato=true;
    		var offertaselezionato=true;
    		var cantiereselezionato=true;
    		var giardinoselezionato=true;
    		var tipologia2selezionato=true;
    		
    // Controllo SELECT 
    		if (document.info.regioni.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato la regione.\n");
    			}
    
    		if (document.info.province.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato la provincia.\n");
    			}
    
    		if (document.info.comuni.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il comune.\n");
    			}
    			
    		if (document.info.f_tipologia.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il tipo di costruzione.\n");
    			}
    		if (document.info.f_tipologia3.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato la tipologia.\n");
    			}
    		if (document.info.f_disponibilita.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato la diponibilit.\n");
    			}
    		if (document.info.f_camere.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il numero delle camere.\n");
    			}
    		if (document.info.f_bagni.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il numero dei bagni.\n");
    			}
    		if (document.info.f_locali.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il numero delle camere totali.\n");
    			}
    		if (document.info.f_posto_auto.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il posto auto.\n");
    			}
    		if (document.info.f_box_auto.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il box auto.\n");
    			}
    		if (document.info.f_balcone.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il numero dei balconi.\n");
    			}
    		if (document.info.f_terrazzo.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il numero dei terrazzi.\n");
    			}
    		if (document.info.f_stato.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato lo stato.\n");
    			}
    		if (document.info.f_piano.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il piano.\n");
    			}
    		if (document.info.f_riscaldamento.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato il riscaldamento.\n");
    			}
    
    		if (document.info.f_vicinanza_automezzi.selectedIndex == 0)
    			{
    			controllo=true;
    			alert("Non hai specificato la vicinanza ai mezzi pubblici.\n");
    			}
    // Fine Controllo SELECT
    // Controllo TEXTfields 
    		if (document.info.f_cod.value == "" ) 
    			{
    				controllo=true;
    				alert("Il campo codice riferimento del form  vuoto.\n ");
    			}
    
    		if (document.info.f_prezzo.value == "" ) 
    			{
    				controllo=true;
    				alert("Il campo prezzo del form  vuoto.\n ");
    			} else {
    				if (IsNumeric(document.info.f_prezzo.value) == false) {
    					controllo=true;
    					alert("Il campo prezzo deve contenere solo numeri.\n");
    				}
    			}
    		if (document.info.f_mq.value == "" ) 
    			{
    				controllo=true;
    				alert("Il campo MQ del form  vuoto.\n ");
    			}
    // Fine controlo TEXTfield
    
    // Controllo RADIObutton 
    		for (i=0;i<2;i++)
    			{
    			(document.info.f_tipologia2[i].checked)?tipologia2selezionato=false:null
    			}
    			if (tipologia2selezionato)
    				{
    				controllo=true;
    				alert("Non hai selezionato la tipologia.\n");
    				}
    
    		for (i=0;i<2;i++)
    			{
    			(document.info.f_giardino[i].checked)?giardinoselezionato=false:null
    			}
    			if (giardinoselezionato)
    				{
    				controllo=true;
    				alert("Non hai selezionato la presenza del giardino.\n");
    				}
    
    		for (i=0;i<3;i++)
    			{
    			(document.info.f_esposizione[i].checked)?esposizioneselezionato=false:null
    			}
    			if (esposizioneselezionato)
    				{
    				controllo=true;
    				alert("Non hai selezionato l\'\esposizione.\n");
    				}
    		for (i=0;i<2;i++)
    			{
    			(document.info.f_portiere[i].checked)?portiereselezionato=false:null
    			}
    			if (portiereselezionato)
    				{
    				controllo=true;
    				alert("Non hai selezionato la presenza della portineria.\n");
    				}
    
    		for (i=0;i<2;i++)
    			{
    			(document.info.f_offerta[i].checked)?offertaselezionato=false:null
    			}
    			if (offertaselezionato)
    				{
    				controllo=true;
    				alert("Non hai selezionato il campo in offerta.\n");
    				}
    
    		for (i=0;i<2;i++)
    			{
    			(document.info.f_cantiere[i].checked)?cantiereselezionato=false:null
    			}
    			if (cantiereselezionato)
    				{
    				controllo=true;
    				alert("Non hai selezionato il campo in cantiere.\n");
    				}
    
    // Fine controllo RADIObutton
    	if (controllo){return false}else{return true}
    
    	}
    // -->
    mentre il form con solo (per una questione di praticità) i tre campi in questione è questo:


    codice:
     <form action="immobiliAdminMOD.asp" method="post" id="modulo" NAME="info" OnSubmit="return ControllaForm(this)">
     			<table width="100%" border="0" cellspacing="2" cellpadding="2">
                  <tr>
                    <td align="right" valign="top" class="contenuti-2riga">*regioni</td>
                    <td align="left" valign="top"><div id="div_regioni" class="contenitore">
                        <select size="25" name="regioni" id="regioni" onchange="regioni_onchange(this);">
                          <%=regioni(id_reg_sel)%>
                        </select>
                    </div></td>
                  </tr>
                  <tr>
                    <td align="right" valign="top" class="contenuti-2riga">*province</td>
                    <td align="left" valign="top"><div id="div_province" class="contenitore"><%=province(id_reg_sel,id_prov_sel)%></div></td>
                  </tr>
                  <tr>
                    <td align="right" valign="top" class="contenuti-2riga">*comuni</td>
                    <td align="left" valign="top"><div id="div_comuni" class="contenitore"><%=comuni(id_prov_sel,id_com_sel)%></div></td>
                  </tr>
    			</table>
     <input name="modifica" type="submit" id="modifica" value="Modifica">
     </form>
    Vi ringrazio per l'aiuto
    elisa
    L'immaginazione è l'intelligenza che si diverte

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    Elisa, era il caso di cliccare su quel "segnala ad un moderatore" che appare sotto ad ogni post

  7. #7
    Utente di HTML.it L'avatar di elisa21
    Registrato dal
    May 2004
    residenza
    Lucca
    Messaggi
    246
    Originariamente inviato da Xinod
    Elisa, era il caso di cliccare su quel "segnala ad un moderatore" che appare sotto ad ogni post
    ops, non mi era mai capitato.
    grazie e scusa ancora
    elisa
    L'immaginazione è l'intelligenza che si diverte

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    codice:
    function ControllaForm()
    {
        var controllo = true;
    		
    // Controllo SELECT 
    
        if ( document.getElementById("comuni").selectedIndex < 1 )
        {
    	    controllo = false;
            alert("Non hai specificato il comune.\n");
        }
        return controllo;
    }
    per capire ho dovuto tagliare un poco. Così mi funziona.

    1) controllo solo la select comuni perchè il controllo della regione e provincia è superfluo

    2) all'inizio impongo controllo = true

    3) se l'indice selezionato di comune < 1 pongo controllo = false e messaggio di errore

    4) alla fine restituisco SEMPRE controllo che può essere vero o falso

    di più non so (sono un pochino arruginito)
    Pietro

  9. #9
    Utente di HTML.it L'avatar di elisa21
    Registrato dal
    May 2004
    residenza
    Lucca
    Messaggi
    246
    Originariamente inviato da pietro09
    codice:
    function ControllaForm()
    {
        var controllo = true;
    		
    // Controllo SELECT 
    
        if ( document.getElementById("comuni").selectedIndex < 1 )
        {
    	    controllo = false;
            alert("Non hai specificato il comune.\n");
        }
        return controllo;
    }
    per capire ho dovuto tagliare un poco. Così mi funziona.

    1) controllo solo la select comuni perchè il controllo della regione e provincia è superfluo

    2) all'inizio impongo controllo = true

    3) se l'indice selezionato di comune < 1 pongo controllo = false e messaggio di errore

    4) alla fine restituisco SEMPRE controllo che può essere vero o falso

    di più non so (sono un pochino arruginito)
    ho provato ma non mi funziona, ovvero se seleziono il primo comune disponibile, dopo aver scelto regione e provincia, mi segnala l'alert "Non hai specificato il comune"

    L'immaginazione è l'intelligenza che si diverte

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    if ( document.getElementById("comuni").selectedIndex < 1 )

    questo implica che ci sia una voce vuota all'inizio della lista

    se non c'è, prova a mettere

    if ( document.getElementById("comuni").selectedIndex < 0 )
    Pietro

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.