Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,811

    if all'interno di un while

    Salve

    avrei necessità di effettuare un controllo su una select all'interno di un ciclo while

    In pratica devo controllare se il campo "supplemento_obbligatorio" è settato su 0 o su 1

    Se è settato su 0, devo mettere il "selected" sull'opzione non OBBLIGATORIO, se è settato su 1 devo mettere il "selected" sull'opzione OBBLIGATORIO

    Non riesco a capire come potrei fare visto che sono già all'interno del php, ecco il mio codice
    Codice PHP:
    while { //INIZIO IL WHILE
             
    $campi_supplementi="
    <tr>    <td colspan=\"2\" style=\"padding: 10px;\">        <select name=\"supplemento_obbligatorio[]\" class=\"form-control\" style=margin-top:17px;>           <option value=\"1\">Obbligatorio</option>           <option value=\"0\">Non obbligatorio</option>        </select>    </td></tr>"
    ;
        echo
    "$campi_supplementi";    } 
    in genere, fuori dal php faccio qualcosa tipo
    Codice PHP:
    <option value=\"1\" <?php if($supplemento_obbligatorio=="1"){ echo"selected";}?>>Obbligatorio</option><option value=\"0\" <?php if($supplemento_obbligatorio=="0"){ echo"selected";}?>>Non obbligatorio</option>
    All'interno del codice php, come potrei creare quell'if visto che sono già nel while?

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,217
    Ciao, puoi usare l'operatore ternario.
    Una cosa del genere:

    codice:
    $campi_supplementi = "
        ...
        <option value=\"1\" ". ( $supplemento_obbligatorio ? 'selected' : '' ) .">Obbligatorio</option>
        <option value=\"0\" ". ( $supplemento_obbligatorio ? '' : 'selected' ) .">Non obbligatorio</option>
        ...
    ";
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

  3. #3
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,811
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao, puoi usare l'operatore ternario.
    Una cosa del genere:

    codice:
    $campi_supplementi = "
        ...
        <option value=\"1\" ". ( $supplemento_obbligatorio ? 'selected' : '' ) .">Obbligatorio</option>
        <option value=\"0\" ". ( $supplemento_obbligatorio ? '' : 'selected' ) .">Non obbligatorio</option>
        ...
    ";
    ciao,
    funziona alla grande, ma non ho ben capito la sintassi.
    Da quello che ho capito, il selected tra i primi 2 apici è true, il selected tra i secondi 2 apici è false, ma non capisco perche' funziona.

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,217
    Qui la documentazione


    * Ternary Operator php.net
    * PHP Ternary Operator phptutorial.net



    In sostanza è una condizione in linea.
    La sintassi è questa:
    codice:
    condizione ? espressioneSeVero : espressioneSeFalso
    Viene quindi analizzata la condizione e, in base al risultato (vero o falso), restituita la relativa espressione.

    Per esteso avrei potuto scrivere:
    codice:
    $campi_supplementi = "
        ...
        <option value=\"1\" ". ( $supplemento_obbligatorio == '1' ? 'selected' : '' ) .">Obbligatorio</option>
        <option value=\"0\" ". ( $supplemento_obbligatorio == '0' ? 'selected' : '' ) .">Non obbligatorio</option>
        ...
    ";
    ma, dal momento che PHP esegue l'auto-casting (cioè la conversione automatica del tipo di dato) la prima condizione può essere scritta in modo più stringato:
    codice:
    $supplemento_obbligatorio == '1' ? 'selected' : ''
    
    // equivale a scrivere
    $supplemento_obbligatorio ? 'selected' : ''
    Per cui, se la condizione è verificata allora viene restituita la stringa 'selected' altrimenti viene restituita una stringa vuota ''.

    Allo stesso modo posso impostare la seconda condizione, con una negazione anziché confrontare con il valore '0', oppure invertendo semplicemente i risultati:
    codice:
    $supplemento_obbligatorio == '0' ? 'selected' : ''
    
    // equivale a scrivere (nota la negazione iniziale)
    !$supplemento_obbligatorio ? 'selected' : ''
    
    // oppure (senza negazione ma invertendo i risultati)
    $supplemento_obbligatorio ? 'selected' : ''
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

  5. #5
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,811
    si ok adesso ho capito tutto, perfetto.

    Pero' ora ho un altro problema.
    In pratica nel pannello di controllo, in fase di modifica dell'offerta, voglio controllare se sono stati inseriti i supplementi e se ci sono voglio lasciarli selezionati
    Al momento uso un campo di testa di tipo disabled, ma vorrei usare la select che è sotto all'immagine di esempio che allego
    Il problema che mi ritrovo è che mi cicla i tipi di supplemento pero' ne mostra uno in piu' ad ogni riga, mentre io vorrei mostrarli tutti.
    Mi spiego meglio
    facciamo esempio di avere 4 supplementi:
    1) pensione completa
    2) camera singola
    3) camera comfort
    4) ferragosto

    alla prima riga mi esce:
    pensione completa

    alla seconda riga esce:
    1) pensione completa
    2) camera singola

    alla terza riga esce:
    1) pensione completa
    2) camera singola
    3) camera comfort

    ed alla quarta riga esce:
    1) pensione completa
    2) camera singola
    3) camera comfort
    4) ferragosto

    mentre dovrebbero uscirmi tutti i supplementi che ho pero' deve essere selezionato quello che effettivamente è stato indicato
    Al momento lo sto gestendo cosi', ma credo di sbagliare un while

    codice:
    //estraggo i supplementi presenti se sono stati inseriti, contando le righe
    $query_supplementi="select * from supplementi where id_offerta=\"$id_offerta\" and supplemento_attivo=\"0\" order by supplemento";
    $risultato_supplementi = $conn->query($query_supplementi);
    $numero_supplementi = $risultato_supplementi->num_rows;
    if($numero_supplementi!="0"){
    	while ($riga_supplementi = $risultato_supplementi->fetch_assoc()) {
    	$id_supplemento = $riga_supplementi['id_supplemento'];
    	$supplemento = $riga_supplementi['supplemento'];
    		$query_nome_supplemento="select nome_supplemento from tipo_supplemento where id_supplemento=\"$riga_supplementi[supplemento]\"";
    		$risultato_nome_supplemento = $conn->query($query_nome_supplemento);
    		while ($riga_nome_supplemento = $risultato_nome_supplemento->fetch_assoc()) {
    		$nome_supplemento = $riga_nome_supplemento['nome_supplemento'];
    		}
    		$blocco_opzioni_supplementi .="<option value=\"\" ". ( $supplemento ? 'selected' : '' ) .">$nome_supplemento</option>";
    	$quota_supplemento = $riga_supplementi['quota_supplemento'];
    	$supplemento_obbligatorio = $riga_supplementi['supplemento_obbligatorio'];
    	$campi_supplementi="
    ecco l'immagine
    https://pasteboard.co/xp21J8jiODHd.png

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,217
    si ok adesso ho capito tutto, perfetto.
    bene

    Pero' ora ho un altro problema.
    Si parla di tutt'altra cosa; personalmente non so aiutarti ma ti consiglio di aprire eventualmente una nuova discussione specifica per il nuovo argomento.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    141
    Solo un tag option della singola select potrà utilizzare l'attributo selected (selezionato) altrimenti si usa l'attributo multiple per piu. Terzo esempio con name e parentesi quadre https://www.php.net/manual/en/langua...s.external.php (comunque vedrai la lista priva di selezioni).

  8. #8
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,811
    Quote Originariamente inviata da darbula Visualizza il messaggio
    Solo un tag option della singola select potrà utilizzare l'attributo selected (selezionato) altrimenti si usa l'attributo multiple per piu. Terzo esempio con name e parentesi quadre https://www.php.net/manual/en/langua...s.external.php (comunque vedrai la lista priva di selezioni).
    si si, io devo mostrare un solo un option selezionato per ogni supplemento inserito.

    Quello l'ho risolto, solo che non riesco a ciclare bene i supplementi perche' le option mi escono come ho indicato nel messaggio precedente e quindi:

    alla prima riga mi esce:
    pensione completa

    alla seconda riga esce:
    1) pensione completa
    2) camera singola

    alla terza riga esce:
    1) pensione completa
    2) camera singola
    3) camera comfort

    ed alla quarta riga esce:
    1) pensione completa
    2) camera singola
    3) camera comfort
    4) ferragosto

    Non riesco a sistemare, per questo al momento sto usando un campo di testo disabilitato

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