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

    problema con Select dinamica javascript integrata in php

    Salve, sto effettuando un progettino creando un'API per un db mysql.
    Sto creando un form per la ricerca dei file nel db, ed avendo delle sottosezioni, volevo utilizzare una select dinamica per caricare delle sottoaree in base all'area scelta nella select precedente.
    Ho utilizzato un esempio preso dal vostro sito ( http://javascript.html.it/articoli/l...t-dinamiche/2/ ) senza apportare nessunissima modifica per evitare problemi prima di poterlo adattare alle mie necessità.
    Avendo un database, ho dovuto caricare l'array con un ciclo invece di dichiararla nel codice.
    Purtroppo, nella seconda select, non mi compaiono le sottoaree e non riesco a trovare il motivo di tale errore...posto il codice in modo che qualcuno possa darci un'occhiata e spero in un suo consiglio o suggerimento thx
    p.s. ometto la connessione al db perché non ho problemi con le altre operazioni, e le tabelle "area" e "sottoarea" hanno un ID univoco, un campo testo, e per la tabella "sottoarea" c'è una chiave esterna che corrisponde all'ID_area.
    Codice PHP:
    echo "<script type=\'text/javascript\'>";
    /* 
         Script  tratto dal libro "JavaScript and DHTML Cookbook" - Capitolo 8-13
         Pubblicato da O'Reilly & Associates
         Copyright 2003 Danny Goodman
          Riprodurre questa nota per qualunque riutilizzo del codice.
    */

    echo "var regiondb = new Object()";
                
            
    $querycta mysql_query("SELECT * FROM ct_area");
            
    $arraypippo "";
            while (
    $row1 mysql_fetch_assoc($querycta)) 
                {
                
    $arraypippo .= "regiondb[".$row1['nome_area']."] = [";
                
    $queryctsa mysql_query("SELECT * FROM ct_sotto_area where area = ".$row1['ID_area']);
                
    $counter 0;
                while (
    $row2 mysql_fetch_assoc($queryctsa))
                     {
                    
    $counter ++;
                    
    $tot mysql_num_rows($queryctsa);
                    if (
    $counter $tot) {
                        
    $arraypippo .= "{value: ".$row2['ID_sottoarea'].", text: ".$row2['nome_sottoarea']."},";
                    }else{
                        
    $arraypippo .= "{value: ".$row2['ID_sottoarea'].", text: ".$row2['nome_sottoarea']."}";
                                }
                            }
                            
    $arraypippo .= "]; ";
                    }
                            
                    
        
    $jscript .="function setCities(chooser) {"
            
    ."var newElem;"
            
    ."var where = (navigator.appName == 'Microsoft Internet Explorer') ? -1 : null;"
            
    ."var cityChooser = chooser.form.elements['città'];"
            
    ."while (cityChooser.options.length) {"
            
    ."cityChooser.remove(0);"
            
    ."}"
            
    ."var choice = chooser.options[chooser.selectedIndex].value;"
            
    ."var db = regiondb[choice];"
            
    ."newElem = document.createElement('option');"
            
    ."newElem.text = 'Seleziona una città:';"
            
    ."newElem.value = '';"
            
    ."cityChooser.add(newElem, where);"
            
    ."if (choice != '') {"
            
    ."for (var i = 0; i < db.length; i++) {"
                
    ."newElem = document.createElement('option');"
                
    ."newElem.text = db[i].text;"
                
    ."newElem.value = db[i].value;"
                
    ."cityChooser.add(newElem, where);"
            
    ."}"
            
    ."}"
            
    ."}";
        
        
        echo 
    $arraypippo;
        echo 
    $jscript;
        
        echo 
    "</script>";
        
        
    $es .= "

    "
        
    ."<div align='center'>"
        
    ."<h1>Esempio - Select dinamiche</h1>"
        
    ."<hr>"
        
    ."<form name='form'>"
        
    ."Invia la richiesta a: "
        
    ."<select name='continente' onchange='setCities(this)'>"
        
    ."<option value='' selected='selected'>Seleziona un continente:</option>";
        
    echo 
    $es;
        
        
        
    $querycta mysql_query("SELECT * FROM ct_area");

            while (
    $row mysql_fetch_assoc($querycta)) 
                {
                echo 
    "<option value = ".$row['nome_area']." >" .ucfirst($row[nome_area]). "</option>";
                }
        
        
        echo 
    "</select>_";
        
        echo 
    "<select name='città'>";
        echo 
    "<option value='' selected='selected'>Seleziona una città:</option>";
        echo 
    "</select>";
        echo 
    "</form>";


        echo
    "</div>"
    Spero ricevere qualche consiglio per poter dormire tranquillo ed apprendere qualcosa di nuovo

    grazie a tutti

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ciao e bevenuta/o, qui si posta solo codice html o javascript il php confonde e potrebbe celare errori, a tal proposito o posti il sogente html (che quello che riceve il browser) oppure metti un link (che è notevolmente meglio) ad una pagina pubblica per visionare il tutto.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    non ho una pagina html in quanto opero solo su lato server, quello che ho postato è esattamente l'esempio scaricabile dal sito html.it, solo con l'aggiunta dell'array caricata dal database.

    volevo sapere se necessito modificare il javascript o se ci fossero errori nella compilazione attraverso php.

    Credevo fosse abbastanza chiaro interpretarlo ma, se non si capisce, dovrò provare in un'altra sezione.

    potresti consigliarmi dove cavicchiandrea please?

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Cheidi il trasferimento al moderatore (link segnala ad un moderatore) di spostarti su php, sempre ammesso che il problema sia php.
    Credevo fosse abbastanza chiaro interpretarlo
    concetto molto soggettivo che non codivido.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    non era mia intenzione sminuire nessuno e mi scuso se la frase poteva suonare con questo tono, in quanto io stesso son molto arrugginito riguardo ai vari linguaggi...


    La "semplicità" era riferita all'articolo allegato da cui ho preso il codice, che risulta molto esauriente e chiaro, e quindi di facile interpretazione, anche se prima dei codici c'è un .= o un echo

    Purtroppo non saprei dove postarlo in quanto è una pagina php con all'interno tag di html e javascript, e in questa sezione ho leggo alcuni articoli sulla select dinamica in javascript, dove credo sia il problema.

    Comunque mi scuso ancora

  6. #6

    Re: problema con Select dinamica javascript integrata in php

    Originariamente inviato da darkshark643
    Spero ricevere qualche consiglio
    Non è necessario usare "echo" per scrivere il codice javascript o html, puoi semplicemente chiudere il delimitatore PHP e poi eventualmente riaprirlo:

    codice:
    <?php
    //connessione al db
    //funzioni
    ?>
    <html>
    <head>
    <script type="text/javascript">
    function alpha(){
    
    }
    </script>
    </head>
    <body>
    
    
    Contenuti</p>
    <?php
     //dati dinamici
    ?>
    </body>
    </html>

  7. #7
    lo so che posso chiudere i tag php, il fatto è che stampando con php i codici, verranno elaborati prima in quanto php è lato server e la risposta sarà sicuramente più rapida rispetto all'elaborazione lato client...
    cmq sto riadattando l'esempio del link che ho citato sopra inserendo solo il php per generare l'array e la lista select, ma mi da un problema con "db.lenght" nel ciclo FOR e non capisco il perché...posto il nuovo codice sperando di limitare la discussione solo a javascript (come mi è stato segnalato dal moderatore)

    Codice PHP:

    <script type="text/javascript">
    var regiondb = new Object()

     
    <?php
    include 'dbconnect.php';

    /**********************************************/
    // GENERAZIONE OBJECT() DA DATABASE CON CICLO PHP
    /**********************************************/

    $querycta mysql_query("SELECT * FROM ct_area");
        
    $arraypippo "";
        while (
    $row1 mysql_fetch_assoc($querycta)) 
            {
            
    $arraypippo .= "regiondb['".$row1['nome_area']."'] = [";
            
    $queryctsa mysql_query("SELECT * FROM ct_sotto_area WHERE area = ".$row1['ID_area']);
            
    $counter 0;
            while (
    $row2 mysql_fetch_assoc($queryctsa))
                {
                
    $counter ++;
                
    $tot mysql_num_rows($queryctsa);
                if (
    $counter $tot) {
                    
    $arraypippo .= "{value: ".$row2['ID_sottoarea'].", text: '".$row2['nome_sottoarea']."'},";
                }else{
                    
    $arraypippo .= "{value: ".$row2['ID_sottoarea'].", text: '".$row2['nome_sottoarea']."'}";
                     }
                }
                
    $arraypippo .= "]; ";
            }
            
    echo 
    $arraypippo;

    ?>


    /**********************************************/
    // FUNZIONE SELEZIONE E GENERAZIONE SECONDA SELECT
    /**********************************************/

    function setCities(chooser) {
        var newElem;
        var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
        var cityChooser = chooser.form.elements["città"];
        while (cityChooser.options.length) {
            cityChooser.remove(0);
        }
        var choice = chooser.options[chooser.selectedIndex].value;
        var db = regiondb[choice];
        newElem = document.createElement("option");
        newElem.text = "Seleziona una città:";
        newElem.value = "";
        cityChooser.add(newElem, where);
        if (choice != "") {
            for (var i = 0; i < db.length; i++) {
                newElem = document.createElement("option");
                newElem.text = db[i].text;
                newElem.value = db[i].value;
                cityChooser.add(newElem, where);
            }
        }
    }

    </script>

    /**********************************************/
    // FORM CON LIST BOX
    /**********************************************/

    <form name="form">
    Invia la richiesta a: 
    <select name="continente" onchange="setCities(this)">
    <option value="" selected="selected">Seleziona un continente:</option>

    /**********************************************/
    // COMPILAZIONE DELLE OPTION CON CICLO PHP
    /**********************************************/

    <?php
    $querycta 
    mysql_query("SELECT * FROM ct_area");

            while (
    $row mysql_fetch_assoc($querycta)) 
                {
                echo 
    "<option value = ".$row[nome_area]." >" .ucfirst($row[nome_area]). "</option>";
                }
    ?>

    </select>_
    <select name="città">
    <option value="" selected="selected">Seleziona una città:</option>
    </select>
    </form>
    Spero di aver circoscritto la richiesta di aiuto ad un solo argomento

    grazie a tutti per il tempo dedicatomi

  8. #8
    Originariamente inviato da darkshark643
    lo so che posso chiudere i tag php, il fatto è che stampando con php i codici, verranno elaborati prima in quanto php è lato server e la risposta sarà sicuramente più rapida rispetto all'elaborazione lato client...
    Non sono d'accordo, il PHP non fa altro che generare codice HTML da inviare al client.
    Il fatto che il codice sia presente nel documento o inserito tramite echo è ininfluente, casomai occupa più risorse l'echo, poi, vuoi mettere il tedio di scrivere codice tra doppi apici...

    Originariamente inviato da darkshark643
    cmq sto riadattando l'esempio del link che ho citato sopra inserendo solo il php per generare l'array e la lista select, ma mi da un problema con "db.lenght" nel ciclo FOR e non capisco il perché...
    length si scrive con la acca alla fine.

  9. #9
    errore di battitura...ma se guardi, nel codice è scritto con l'"H"

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.