• User

    switch annidato in un while e mysql

    è meno complicato di quello che sembra:
    ho una serie di macrotemi che racchiudono ognuno una serie di temi (per capirci: il classico regione-provincia)
    in una form ho un combo box che a seconda della scelta del macrotema popola il combo successivo.
    Il tutto fatto con AJAX.
    nella pagina php che crea xml come forma base c'è uno switch e per ogni case tutti i vari temi.
    Fatto così funziona alla grande, ma volevo che sia i macrotemi che i temi venissero estratti da un db per dare la possibilità al cliente di aggiungere o togliere temi o sottotemi.
    facendo lo switch e dando al case valori non estratti da db ma che corrispondo all'id per cui la query che estrae i sottotemi abbia l'id corrispondente su cui eseguire la ricerca il while sottostante cicla alla perfezione,
    ma quando faccio estrarre gli id temi dal db e faccio ciclare i case con all'interno il ciclo dei sottotemi si impiastra tutto. per facilità di comprensione ecco il listato di come è in origine:

    [php]
    <?php
    //Imposto un header XML
    header("Content-type: application/xml");
    header("Cache-control: no-cache, must-revalidate");

    echo "<?xml version="1.0"?>\n";
    echo "<categorie>\n";

    //Recupero la variabile sulla quale effettuare i vari controlli
    $myChoice = @$_POST['choice'];

    //Eseguo il controllo
    switch($myChoice){
    case 1:
    echo "\t<categoria value="1">A. Prima Voce</categoria>\n";
    echo "\t<categoria value="2">A. Seconda Voce</categoria>\n";
    echo "\t<categoria value="3">A. Terza Voce</categoria>\n";
    break;

    case 2 :
    	echo "\t<categoria value=\"4\">B. Quarta Voce</categoria>\n";
    	echo "\t<categoria value=\"5\">B. Quinta Voce</categoria>\n";
    	echo "\t<categoria value=\"6\">B. Sesta Voce</categoria>\n";
    break;
    
    case 3:
    	echo "\t<categoria value=\"7\">C. Settima Voce</categoria>\n";
    	echo "\t<categoria value=\"8\">C. Ottava Voce</categoria>\n";
    	echo "\t<categoria value=\"9\">C. Nona Voce</categoria>\n";
    	echo "\t<categoria value=\"10\">C. Decima Voce</categoria>\n";
    break;
    
    default:
    	echo "\t<categoria value=\"\">---</categoria>\n";
    break;
    

    }

    echo "</categorie>\n";
    ?>
    [/php]
    e di come vorrei farla io
    [php]
    <?php
    //Imposto un header XML
    header("Content-type: application/xml");
    header("Cache-control: no-cache, must-revalidate");

    echo "<?xml version="1.0"?>\n";
    echo "<categorie>\n";

    //Recupero la variabile sulla quale effettuare i vari controlli
    $myChoice = @$_POST['choice'];

    //Eseguo il controllo
    switch($myChoice){

    $querymacro=eseguo query estraendo id dei macrotemi
    while($macro=mysql_fetch_array($querymacro){
    $id=$macro['id']
    case $id:
    ciclo la query che estrae i temi dall'id macrotema con while etc etc{
    $nome= dato estratto dal db
    echo "\t<categoria value="">$nome</categoria>\n";
    break;
    }

    default:
    	echo "\t<categoria value=\"\">---</categoria>\n";
    break;
    

    }
    }
    echo "</categorie>\n";
    ?>
    [/php]
    so che è un casino, ma se qualcuno è così misericordioso da volerci ficcare il naso...
    anche solo per dirmi che sono p**la e lo switch non funziona con il while.

    per la cronaca ho provato anche gli if semplici, ma mi salta all'else finale 😞


  • Moderatore

    non c'è bisogno di nessuno switch 😛

    basta fare la query e farla stampare a video 🙂