• User Newbie

    Come non resettare il primo menù a tendina

    Scusate se riposto, ma visto che la discussione iniziale era per un altro problema molto probabilmente essendo stato risolto il problema non viene più letta. Allora ho le mie 2 dropdown che sono dipendenti, quando seleziono l'editore la seconda dropdown mi si ricarica con le collane di quell'editore ma l'editore si resetta. Io vorrei che rimanesse visualizzato l'editore selezionato.
    [PHP]
    <?php
    $conn = mysql_connect("localhost","user","password") or die("Connection Failed");
    $db = mysql_select_db("bdb") or die("Connection Failed");
    $mydb=mysql_set_charset('utf8');
    ?>
    <html>
    <head>
    </head>
    <body>
    <form id="myForm" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Editori:
    <select name="ID_Editori" onchange="javascript:document.getElementById('myForm').submit();">
    <option value="">Seleziona editore</option>
    <?php
    // Visualizzo l'elenco degli editori
    $strSQL = "SELECT * FROM Editori ORDER BY Editori";
    $result = mysql_query($strSQL, $conn);

                while( $row = mysql_fetch_assoc($result) ) {
                    echo "\t<option value=\"" . $row['ID'] . "\">" . $row['Editori'] . "</option>\n";
                }
                ?>
            </select>
            <br />
            Collane:
            <select name="ID_Collan">
            <option value="">Seleziona collana</option>
                <?php
                // Visualizzo le eventuali collane disponibili per l'editore selezionato
                if ( isset($_POST['ID_Editori']) ) {
                    $strSQL = "SELECT * FROM Collane WHERE ID_Editori = '" . $_POST['ID_Editori'] . "' ORDER BY Collane";
                    $result = mysql_query($strSQL, $conn);
                    
                    while( $row = mysql_fetch_assoc($result) ) {
                        echo "\t<option value=\"" . $row['ID'] . "\">" . $row['Collane'] . "</option>\n";
                    }
                }
                ?>
            </select>
        </form>
    </body>
    

    </html>
    [/PHP]

    Mi era stato suggerito di aggiungere 2 righe dentro il primo il codice di seleziona editore, ma io non sono riuscito a farle funzionare.
    Grazie per l'aiuto.


  • User

    per "ricordarmi" la scelta fatta, io utilizzo queste 4 righe per le select

    [PHP]
    while ($row=mysql_fetch_array($result)){
    if ($row['xxx']==$_POST['xxx']) $sel='selected="selected"'; else $sel='';
    print ("<option ".$sel." value="".$row['xxx']."">".$row['xxx']."</option>");
    }//end while [/PHP]

    metti nelle xxx i tuoi corrispondenti e dovrebbe andare ...


  • User Newbie

    Ho provato a inserire i dati al posto delle xxx ma non va, mi dice che non conosce ID_Editori!!!
    [PHP]
    while ($row=mysql_fetch_array($result)){
    if ($row['ID']==$_POST['ID_Editori']) $sel='selected="selected"'; else $sel='';
    print ("<option ".$sel." value="".$row['ID']."">".$row['Editori']."</option>");
    }

    [/PHP]

    Cosa sbaglio?


  • User

    l'errore lo devi trovare tu, io non avendo il tuo DB ho provato con valori a caso il tuo codice e ... funziona!! (ho aggiunto un piccolo debug per vedere cosa passa per $_POST)

    questo è il codice che ho testato
    [PHP]
    <html>
    <head>
    </head>
    <body>
    <pre>
    $_POST = <? print_r($_POST); ?>
    </pre>
    <form id="myForm" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Editori:
    <select name="ID_Editori" onchange="javascript:document.getElementById('myForm').submit();">
    <option value="">Seleziona editore</option>
    <?php
    if ($_POST['ID_Editori']=='aaa') $sel='selected="selected"'; else $sel='';
    echo "\t<option ".$sel." value="aaa">aaa</option>\n";
    if ($_POST['ID_Editori']=='bbb') $sel='selected="selected"'; else $sel='';
    echo "\t<option ".$sel." value="bbb">bbb</option>\n";
    if ($_POST['ID_Editori']=='ccc') $sel='selected="selected"'; else $sel='';
    echo "\t<option ".$sel." value="ccc">ccc</option>\n";
    if ($_POST['ID_Editori']=='ddd') $sel='selected="selected"'; else $sel='';
    echo "\t<option ".$sel." value="ddd">ddd</option>\n";
    if ($_POST['ID_Editori']=='eee') $sel='selected="selected"'; else $sel='';
    echo "\t<option ".$sel." value="eee">eee</option>\n";

                ?>
            </select>
            <br />
            Collane:
            <select name="ID_Collan">
            <option value="">Seleziona collana</option>
                <?php
                // Visualizzo le eventuali collane disponibili per l'editore selezionato
                if ( isset($_POST['ID_Editori']) ) {
                    echo "\t<option value=\"aaa\">aaa</option>\n";
    				echo "\t<option value=\"bbb\">bbb</option>\n";
    				echo "\t<option value=\"ccc\">ccc</option>\n";
    				echo "\t<option value=\"ddd\">ddd</option>\n";
    				echo "\t<option value=\"eee\">eee</option>\n";
                    }
                ?>
            </select>
        </form>
    </body>
    

    </html>
    [/PHP]


  • User Newbie

    Ho provato il codice che mi hai incollato, e visto che non ha nessun appoggio al DB dovrebbe funzionare a quanto mi dici, e fa così:
    $_POST =
    Editori: la select con scritto seleziona editore.
    e poi:
    Notice: Undefined index: ID_Editori in C:\Nuova_cartella1\index.php on line 13
    aaa
    Notice: Undefined index: ID_Editori in C:\Nuova_cartella1\index.php on line 15
    bbb
    Notice: Undefined index: ID_Editori in C:\Nuova_cartella1\index.php on line 17
    ccc
    Notice: Undefined index: ID_Editori in C:\Nuova_cartella1\index.php on line 19
    ddd
    Notice: Undefined index: ID_Editori in C:\Nuova_cartella1\index.php on line 21
    eee
    Collane: la select con seleziona collane

    Entrambe le selct comunque sono vuote.
    Devo trovare il modo di implementare queste due select in un FORM più ampio dove scelgo, Autore dal menù a tendina, e ne prelevo l'id, titolo, Editore da menù a tendina di cui prelevo l'ID, Collana da menù a tendina da cui prelevo ID, poi tutta una serie di dati: numero collana, giorno, mese, anno, link alla pagina del libro, titolo, originale, mese, anno, link alla pagina del libro in lingua originale. La pagina l'ho creata e funziona, il problema è che molti editori hanno collane con nome generico simile, esempio Narrativa, e caricandole tutte non riesco a capire qual è quella giusta.


  • User

    Allora, secondo me, hai un problema a monte col tuo interprete di codice php.

    a me la prima volta che lo apro fa così:

    $_POST = Array
    (
    )

    Editori: la select con scritto seleziona editore
    Collane: la select con seleziona collane

    la select degli editori ha anche tutti i valori, mentre quella delle collane non ha altri valori;

    seleziono l'editore aaa e fa così:

    $_POST = Array
    (
    [ID_Editori] => aaa
    [ID_Collan] =>
    )

    Editori: la select con scritto aaa
    Collane: la select con seleziona collane e tutti gli altri valori


  • User Newbie

    Per il momento ti ringrazio comunque tanto per l'interessamento. Potrebbe essere benissimo che abbia qualcosa di impostato male nell'interprete php, ma non mi sono mai interessato moltissimo della configurazione ho sempre usato WampServer per istallare i vari servizi, può essere che l'ultima versione abbia qualche problemino, usa il php 5.3.4 apache 2.2.17 e mysql 5.5.8. L'unica cosa che ho sempre impostato in più del default di istallazione è magic.quote.gpc.


  • User Newbie

    Mha il problema è dovuto alla nuova versione del php, e non so cosa comporti. La cosa che mi lasciava perplesso era che il codice a volte funzionava e a volte no, così ho aggiunto dopo l'ultima select:
    <input type="submit" value="Inserisci">
    La cosa strana è che al primo avvio la pagina non funziona mi rimangono i 2 select bloccati su Seleziona Editore e Seleziona Collana. Quando premo per la prima volta il bottone tutto sembra funzionare, Seleziono l'editore e nel comando print_r($_POST); mi appare l'id dell'editore e mi carica le collane di quell'editore, alla seconda pressione del bottone mi stampa anche l'ID della collana.
    Ed ora domanda: Se aggiundo nel mio form action="Save.php" cosa succede: appena seleziono l'editore logicamente parte il Save.php, come posso fare per non inviare i dati fino a quando non completo tutto il form e pigio il bottone?


  • User

    non l'ho mai fatto, ma mi viene da dire di mettere la submit in un form differente a quello delle select:
    le due select le lasci nel form che richiama la pagina stessa;
    la submit, nel form che ti manda a save.php;
    nel form della submit aggiungi 2 campi hidden su quali caricherai l'editore e la collana una volta che sono settati.