Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    249

    mantenere value select... errore

    ho fato una select dove vorrei mantenere al submit il campo slezionato, ho provato così ma mi da un problema:


    codice:
    <option  value="none" <?if($_REQUEST['categories'] == "none")echo "selected=selected"?> >Tutte</option> <option  value="0" <?if($_REQUEST['categories'] == "0")echo "selected=selected"?> ><?php echo $categories[0]; ?></option> <option  value="1" <?if($_REQUEST['categories'] == "1")echo "selected=selected"?> ><?php echo $categories[1]; ?></option> <option  value="2" <?if($_REQUEST['categories'] == "2")echo "selected=selected"?> ><?php echo $categories[2]; ?></option> <option  value="3" <?if($_REQUEST['categories'] == "3")echo "selected=selected"?> ><?php echo $categories[3]; ?></option> <option  value="4" <?if($_REQUEST['categories'] == "4")echo "selected=selected"?> ><?php echo $categories[4]; ?></option> <option  value="5" <?if($_REQUEST['categories'] == "5")echo "selected=selected"?> ><?php echo $categories[5]; ?></option> <option  value="6" <?if($_REQUEST['categories'] == "6")echo "selected=selected"?> ><?php echo $categories[6]; ?></option>
    il campo lo mantiene ma al primo caricamento della pagina (senza alcun value selezionato) mi compare per ogni campo "Notice: Undefined index categories in mounted storage home147 sub20..." per ogni linea prima della relativa voce, poi ad ogni ricaricamento pagina tutto corretto

    ho provato anche così, per ogni option:


    codice:
    <?php if (isset ($_REQUEST['categries'])) echo "selected=selected"; ?>
    così non mi da errori ma mi ricarica sempre l'ultima categoria, non so dove sbaglio

    qualcuno mi può aiutare per favore? non so più come risolvere..

    grazie

  2. #2
    Partiamo dalla base:
    codice:
    <select name='Nome' [size='N'] [onchange='gestore(...)']>
    <option value = 'X' >Descrizione di X
    <option value = 'Y' >Descrizione di Y
    </select>
    Tu hai fatto:
    Codice PHP:
    <option  value="none" <?if($_REQUEST['categories'] == "none")echo "selected=selected"?> >Tutte</option>
    <option  value="0" <?if($_REQUEST['categories'] == "0")echo "selected=selected"?> ><?php echo $categories[0]; ?></option>
    <option  value="1" <?if($_REQUEST['categories'] == "1")echo "selected=selected"?> ><?php echo $categories[1]; ?></option>
    <option  value="2" <?if($_REQUEST['categories'] == "2")echo "selected=selected"?> ><?php echo $categories[2]; ?></option>
    <option  value="3" <?if($_REQUEST['categories'] == "3")echo "selected=selected"?> ><?php echo $categories[3]; ?></option>
    <option  value="4" <?if($_REQUEST['categories'] == "4")echo "selected=selected"?> ><?php echo $categories[4]; ?></option>
    <option  value="5" <?if($_REQUEST['categories'] == "5")echo "selected=selected"?> ><?php echo $categories[5]; ?></option>
    <option  value="6" <?if($_REQUEST['categories'] == "6")echo "selected=selected"?> ><?php echo $categories[6]; ?></option>
    Partendo dal fatto che è abbastanza prolisso riscrivere tutto e sarebbe meglio la seguente funzione, che è quella che utilizzerò:
    Codice PHP:
    <select name="categories">
    <option  value="none" <?if($_REQUEST['categories'] == "none")echo "selected=selected"?>>Tutte</option>
    <? for($i=0;$i<=6;$i++){
    echo 
    '<option  value="'.$i.'" '.($_REQUEST['categories'] == $i?"selected=selected":'').'>'$categories[$i].'</option>
    '
    ;
    }
    ?>
    Dal precedente codice si capisce nettamente l'errore, che magari in mezzo a decine di righe di opzioni viene tralasciata: il selected è sbagliato, poiché viene scritto 'selected=selected' (prova, prima di fare cambiamenti, a fare tasto destro con il mouse e vedere il codice compilato).

    Quindi la struttura giusta sarà:
    Codice PHP:
    <select name="categories">
    <option  value="none" <?if($_REQUEST['categories'] == "none")echo 'selected="selected"'?>>Tutte</option>
    <? for($i=0;$i<=6;$i++){
    echo 
    '<option  value="'.$i.'" '.($_REQUEST['categories'] == $i?'selected="selected"':'').'>'$categories[$i].'</option>
    '
    ;
    }
    ?>
    dove il selected verrà scritto correttamente:
    codice:
    selected="selected"
    e spero che tu abbia creato l'array $categories (lo do per scontato ma non si sa mai )

    N.B. Codice non testato, quindi se ci sono errori potrebbero essere di battitura
    Ce l'ho fatta! - ItalianPixel -

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    249
    grazieeee.... oggi lo provo e ti faccio sapere

    p.s. ovvio che l array l'abbia fatto,sarò anche imbrabranato ma non fino a quel punto

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    249
    ho fatto così come dici tu:

    codice:
    <select class="selectleft" name="categories" style="width:128px"> 
    <option  value="none" <?if($_REQUEST['categories'] == "none")echo 'selected="selected"'?>>Tutte</option>  
    <? for($i=0;$i<=6;$i++){ echo '<option  value="'.$i.'" '.($_REQUEST['categories'] == $i?'selected="selected"':'').'>'. $categories[$i].'</option> '; }  ?> 
    </select>
    la situazione è migliorata ma da ancora un problema.. al caricamento della pagina la select da di dafault la prima cat e non "Tutte" nella tendina delle option per l opzione tutte visualizzo ancora
    Notice: Undefined index categories in mounted storage home147 sub20... mentre per la varie catogirie no...
    poi se seleziono una categoria e faccio il submit la mantiene... ma se seleziono tutte ricarico la pagina con la prima cat

  5. #5
    Perché devi avere una opzione di base. Per come hai ora la select hai tutte le opzioni (se è none, se è 0, se è 1 ....) ma se non hai opzioni cosa selezioni?
    Devi fare una cosa di questo tipo:
    Codice PHP:
    <option  value="" <? if(!isset($_REQUEST['categories']))echo 'selected="selected"'?>>Scegli una categoria</option>
    Ce l'ho fatta! - ItalianPixel -

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    249
    un passo alla volta ci arrivo:
    codice:
    <select class="selectleft" name="categories" style="width:128px"> 
    <option  value="" <? if(!isset($_REQUEST['categories']))echo 'selected="selected"'?> >Seleziona categoria</option> 
    <option  value="none" <?if($_REQUEST['categories'] == "none")echo 'selected="selected"'?>>Tutte</option>  
    <? for($i=0;$i<=6;$i++){ echo '<option  value="'.$i.'" '.($_REQUEST['categories'] == $i?'selected="selected"':'').'>'. $categories[$i].'</option> '; }  ?> 
    </select>
    così non mi da più errori undefined index ecc ecc... ma c'è ancora in problema: se seleziono una cat da 1 a 6 fuziona tutto, se seleziono "tutte" la query mi trova tutti i risultati ma nella select mi ricarica la voce relativa alla cat1

  7. #7
    Qui non so. Fai una serie di prove. Stampa a video quello che ti risulta, fai una condizione per la quale se request categories è uguale a 'none' ti scrive una frase a video, così sai che almeno la condizione è giusta.
    Posta il codice con i tag PHP, non CODE, così colora il codice ed è più comprensibile (e se ci sono errori te ne accorgi prima!)
    Ce l'ho fatta! - ItalianPixel -

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    249
    controllato la condizione è giusta... il codice della selct anche.. eppure con value none mi ricarica la voce della categoria 1

  9. #9
    Prova a cambiare il 'none' con 'tutti'. Fai prove di questo tipo, stampa a video quello che selezioni dal menu a tendina, occhio alle maiuscole e minuscole... prova fino a che non trovi l'inghippo!
    Fatti anche un print_r($_REQUEST);
    Ce l'ho fatta! - ItalianPixel -

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.