Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316

    passaggio parametri select

    ciao, ho questo codice che genera un determinato numero di select, ognuno dei quali avrà un certo numero di opzioni. ora, poniamo che io abbia ad esempio 5 select (nome=1,2,3,4,5), non riesco a capire come devo fare per passare i valori all'altra pagina del php (sono valori che andranno inseriti in un db)

    codice:
    for($i=1;$i<=$_POST['numeroComponenti'];$i++){ // esempio 5
        $res=mysql_query("SELECT DISTINCT nomeArte FROM cantante ORDER BY nomeArte ASC",$con);
        echo"Cantante $i
            <form action='addCantanti2.php' method='post'>
            <select name='[$i]'>"; //1,2,3,4,5
            while($Autors=mysql_fetch_array($res)){
                $length=count($res);
                for($n=0;$n<$length;$n++){ //genera tutte le opzioni
                    echo"<option value='$Autors[$n]'>$Autors[$n]</option>";
                }
            }
            echo"</select>
                <input type='hidden' name='nomeGruppo' value='$_POST[nomegruppo]'></input>
                <input type='hidden' name='numCant' value='$_POST[$i]'></input>
                </form><br><br>";
    }

    immagino io debba costruire un array nell'altra pagina dove immagazzinare i 5 nomi delle 5 select
    e per ognuna prendere il valore che è stato selezionato. Ma non ho idea di come fare.

    grazie in anticipo

    L.

  2. #2
    Sarebbe interessante capire come mai esegui N volte la stessa query?!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    estrare un certo numero di dati (nomeArte)..e per ogni select le opzioni sono questi dati..sai aiutarmi con la mia domanda?

  4. #4
    Questo era chiaro, ma se la select non ha parametri dinamici e quindi restituisce ogni volta gli stessi risultati, mi spieghi perchè la ripeti ad ogni ciclo?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    non lo so, funzionava e l'ho messa così adesso ho provato a metterla fuori (sopra il primo for), e infatti funziona solo per la prima select e non per le altre.

  6. #6
    E provando a non fare più volte ciò che puoi fare una volta sola?

    codice:
    $res=mysql_query("SELECT DISTINCT nomeArte FROM cantante ORDER BY nomeArte ASC",$con);
            while($Autors=mysql_fetch_array($res)){
                $length=count($res);
                for($n=0;$n<$length;$n++){ //genera tutte le opzioni
                    $options.="<option value='$Autors[$n]'>$Autors[$n]</option>";
                }
            }
    
    for($i=1;$i<=$_POST['numeroComponenti'];$i++){ // esempio 5
        echo"Cantante $i
            <form action='addCantanti2.php' method='post'>
            <select name='scelta_[$i]'>"; //1,2,3,4,5
    echo $options;
            echo"</select>
                <input type='hidden' name='nomeGruppo' value='$_POST[nomegruppo]'></input>
                <input type='hidden' name='numCant' value='$_POST[$i]'></input>
                </form><br><br>";
    }
    Quanto al tuo quesito, nel codice php in addCantanti2.php riceverai all'interno di $_POST i valori che l'utente ha selezionato nelle varie caselle select: $_POST["scelta_1"] conterrà la prima, e così via.

    Ricorda che non è una buona abitudine utilizzare per le inlut o select dellee form dei nomi solo numerici; è una sintassi scorretta dal punto di vista dell'HTML, e potresti andare incontro a problemi quando devi, come è questo il caso ricevere quasti valori via $_POST.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  7. #7
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    grazie delle dritte. ti rispondo a punti

    1) nel tuo codice, tu usi la variabile $options. ma questo è un array? in tal caso è conveniente costruire un array di 200 valori (ma potrebbero essere anche migliaia) per ogni select (che possono essere anche 50 o 100) invece che ripetere una sola query?

    2) il problema è che se nella pagina successiva uso $_POST[$i] questo non prende alcun valore e mi segna errore su $i come valore non definito (cioè come non avesse passato nulla). dovrei fare un ciclo fra i $_POST[$i] (perchè non so a priori quante select ho) manon ho idea di come fare.

    3) in questo specifico caso, come potrei ovviare al problema del name numerico delle select? onestamente non vedo altro modo di identificare facilmente 50 select se non con numeri da 1 a 50.

    grazie per gli aiuti preziosi

    L.
    Ultima modifica di leaf; 22-02-2014 a 12:49

  8. #8
    Figurati, è un piacere, vado per punti:

    1) Le query sono sicuramente la cosa più pesante in termini prestazionali, quindi se non è strettamente necessario è meglio minimizzare il numero di query eseguite. La variabile $options NON è un array, ma una stringa che concateno con l'operatore .= ; in ogni caso, anche volendo essere parchi nell'uso della memoria, di certo un array 200 valori o una string nata dalla concatenazione di quei 200 valori occupano la stessa memoria, ovvero pochi byte in più del numero di caratteri della stringa, mentre di sicuro eseguire una query richiede uno sforzo sia come RAM che come CPU ben più ingente. Se in più consideri che invece di fare 50 o 100 query ne fai UNA...

    2) e 3) Scusami, forse c'era una imprecisione nel mio codice scritto a tarda sera:

    <select name='scelta_".$i."'>";

    il punto cruciale è che le input non devono chiamarsi SOLO con un numero, non c'è nessun problema nel chiamarle scelta_1 , scelta_2 e così via. Dopodichè, solo SICURO che nella pagina che riceve la form, troverai in $_POST["scelta_1"] il valore della select scelta_1 e così via.

    Per fare un ciclo su $_POST usa semplicemente un foreach:

    foreach $_POST as $keyname => $keyvalue:
    ; qui puoi accedere al valore di $_POST[$keyname] con la variabile $keyvalue
    ; il ciclo verrà ripetuto per tutti gli indici presenti nell'array $_POST
    endforeach;
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  9. #9
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    ok, domani faccio delle prove e ti faccio sapere se fila tutto liscio
    intanto grazie davvero!

    L.

  10. #10
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    ciao di nuovo fatto buon weekend? spero di sì.
    Dunque, premetto che non conosco assolutamente le stringhe e relativa logica in php e nemmeno le liste (key->value)..ho solo usato qualche dizionario in python in passato ma niente di più..
    Ho inserito il tuo codice e mi dice "varible options undefined" riferendosi alla variabile nel primo ciclo for..sto provando diverse soluzioni ma per ora nulla..
    Ultima modifica di leaf; 23-02-2014 a 23:01

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 © 2024 vBulletin Solutions, Inc. All rights reserved.