[PHP] Istruzione condizionale con valori booleani

Discussione in 'PHP' iniziata da enzogar, 5 Febbraio 2019.

  1. enzogar

    enzogar Nuovo Utente

    Registrato:
    3 Agosto 2016
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Buongiorno.
    Il mio problema è questo: su una pagina php utilizzo un servizio di geolocalizzazione (con il quale, in base alla nazionalità del visitatore, faccio apparire nella pagina la bandiera del suo paese) e che permette anche di sapere se quel visitatore sta visualizzando quella pagina su un dispositivo mobile o no, tramite una query che come risultato mi fornisce due valori booleani: true o false.

    In caso di valore true, vorrei che il visitatore venga reidirizzato automaticamente su un'altra pagina, ottimizzata per la visione su dispositivi mobili.

    Ho provato con questo codice, ma sembra che non venga rilevato il valore booleano (e l'istruzione condizionale non viene eseguita):
    PHP:
    $mobile $query['mobile'];
    if (
    $mobile == true) {$messaggio " Stai accedendo da un dispositivo mobile" header("Location: pagina_ottimizzata_mobile.html");
    };

    Per capire se in effetti la query sul campo 'mobile' mi restituisca correttamente i valori in caso di connessione da mobile o fisso, ho fatto una prova, usando
    PHP:
    var_dump($query);
    che mi stampa a video questo risultato:
    ["mobile"]=> bool(false)

    Quindi il problema è che alla stringa $mobile non viene assegnato il valore true (o false), o c'è un errore nell'istruzione condizionale, ho provato in vari modi ma non funziona... Qualcuno può aiutarmi a scrivere il codice corretto?

    Grazie
     
    Ultima modifica di un moderatore: 5 Febbraio 2019
  2. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.610
    Mi Piace Ricevuti:
    268
    Punteggio:
    83
    Sesso:
    Maschio
    @enzogar
    Da regolamento del forum, come tutti noi sei tenuto ad usare il tag [​IMG] o il tag [​IMG] per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
    [​IMG]
    Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
    Grazie
    Per questa volta te lo sistemo io ma mi raccomando per il futuro
     
  3. enzogar

    enzogar Nuovo Utente

    Registrato:
    3 Agosto 2016
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Scusa, hai ragione :oops:
     
  4. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.431
    Mi Piace Ricevuti:
    121
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    se sono momentaneamente in germania per lavoro, non sono necessariamente tedesco (!) e se mi reindirizzi alla pagina nella loro lingua, sono in imbarazzo nel capire ….

    se il valore visualizzato con var_dump é "falso", é la query che non restituisce il valore atteso, non il codice che hai postato

    in ogni caso quando fai test su "vero" / "falso", usa la notazione

    if ($mobile === true) { …...
     
  5. enzogar

    enzogar Nuovo Utente

    Registrato:
    3 Agosto 2016
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Ciao,
    ho fatto una prova con l'istruzione condizionale che mi hai consigliato, purtroppo senza nessun risultato...

    Ho fatto anche una prova collegandomi dal mio smartphone e la var_dump mi da questo risultato:
    ["mobile"]=> bool(true) quindi, fino a quel punto è tutto regolare, il problema è fare questa benedetta condizionale, che non viene proprio eseguita (o alla $mobile non viene assegnato nessun valore)...

    Ma di solito, come si fanno le istruzioni condizionali su valori booleani? Oppure, come posso trasformare un valore booleano in un valore concreto e metterlo in una stringa (ad esempio, se il valore booleano è 'false' assegno alla stringa $val il valore 0, se è 'true' il valore 1)?

    In questo modo risolverei il problema...
     
  6. kastaldi

    kastaldi Nuovo Utente

    Registrato:
    3 Febbraio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    3
    se provi con
    PHP:
    if ($mobile) {$messaggio....
    ?
     
  7. enzogar

    enzogar Nuovo Utente

    Registrato:
    3 Agosto 2016
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Ho provato, ma non funziona...
     
  8. kastaldi

    kastaldi Nuovo Utente

    Registrato:
    3 Febbraio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    3
    E se forzi la variabile con
    PHP:
    $mobile true;
    invece di
    PHP:
    $mobile $query['mobile'];
    funziona ?
     
  9. enzogar

    enzogar Nuovo Utente

    Registrato:
    3 Agosto 2016
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Forzando la variabile con true, mi restituisce valore 1, ma questo come risolve il mio problema?:confused:
     
  10. kastaldi

    kastaldi Nuovo Utente

    Registrato:
    3 Febbraio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    3
    No, intendevo se forzando la variabile $mobile a true ti esegue il codice (cioè assegna il valore $messaggio e va alla pagina ottimizzata). Stiamo facendo cose ovvie e banali ma sinceramente non saprei più dove sbattere la testa. Poi magari il problema è altrove.
     
  11. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    796
    Mi Piace Ricevuti:
    42
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Booleano...
    PHP:
    $a=TRUE//booleano
    $b=1//intero
    //non cambia una cippetta!
    if($a && $b){ // bool  TRUE && int 1 = TRUE
        
    echo 'vero';
    }
    if(
    $a==$b){ //TRUE = 1
    echo 'vero';
    }
    if(
    $a!==$b){ //bool TRUE != int 1 questo perchè il cast è diverso!
      
    echo 'vero';
    }
    $a=TRUE;
    $b=FALSE;
    if(
    $a<=>$b){
       
    // b = FALSE = 0
       // a = TRUE = 1
       
    echo 'b minore di a';
    }
    Questa la situazione sui bool!
     
    Ultima modifica: 7 Febbraio 2019
  12. enzogar

    enzogar Nuovo Utente

    Registrato:
    3 Agosto 2016
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Grazie Macus_adi per la tua spiegazione.

    Da quanto visto finora, credo che il problema sia a monte dell'istruzione condizionale, cioè alla stringa $mobile non viene assegnato nessun valore, ne intero ne booleano, nonostante il var_dump sulla query mi restituisca ["mobile"]=> bool(false) quando mi connetto da PC e ["mobile"]=> bool(true) quando mi connetto con lo smartphone... valori che però non vengono poi assegnati alla $mobile tramite l'assegnazione
    PHP:
    $mobile $query['mobile'];
    mentre invece con l'altra stringa, che rileva il codice del paese del visitatore
    PHP:
    $country $query['country_code'];
    non ci sono problemi...

    Se riesco a far assegnare il valore corrispondente alla $mobile (true o false, 0 o 1), poi il resto del codice funzionerebbe...
     
  13. fratt

    fratt Nuovo Utente

    Registrato:
    19 Gennaio 2019
    Messaggi:
    33
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Occupazione:
    Dilettante
    Cosa succede se fai il confronto direttamente con $query[]?
    PHP:
     if ($query['mobile']) {$messaggio.... 
     
  14. enzogar

    enzogar Nuovo Utente

    Registrato:
    3 Agosto 2016
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Non succede niente, ho fatto un semplice test:
    PHP:
    if ($query['mobile']) echo 'Connessione da mobile';
    ma a video non compare nulla...
     
  15. kastaldi

    kastaldi Nuovo Utente

    Registrato:
    3 Febbraio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    3
    Non so che dire, ho provato a replicare le stesse identiche variabili disseminando il codice di var_dump e funziona tutto alla perfezione, il valore true viene assegnato alla variabile e la condizione if viene eseguita, sia direttamente su $query['mobile'] che su $mobile, il var_dump ritorna bool(true) in ognuno dei due casi.

    PHP:
    <?php
        $query
    ['mobile']=true;
        
    var_dump($query);
        if (
    $query['mobile']) {echo "true1\n";}
      
        
    $mobile $query['mobile'];
        
    var_dump($mobile);
        if (
    $mobile) {echo "true2";}
    ?>
     
  16. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.431
    Mi Piace Ricevuti:
    121
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    se non hai risolto, ripartendo dal tuo primo post,

    c'é un punto e virgola dopo la parentesi graffa che é sbagliato, può generare un errore php
    eliminalo e riprova


    se non dovesse ancora funzionare
    modifica in questo modo e posta tutti i risultati
    PHP:
    $mobile $query['mobile'];

    var_dump($query); echo "<br /><br />"var_dump($mobile); echo "<br /><br />";

    if (
    $mobile === true) { echo "Stai accedendo da un dispositivo mobile"; }
    else                  { echo 
    "Stai accedendo da un dispositivo fisso";  }
     
  17. enzogar

    enzogar Nuovo Utente

    Registrato:
    3 Agosto 2016
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Finalmente problema risolto! Con il codice postato da Marino51, finalmente la $mobile prende il valore corretto.
    Non ho ben capito il motivo per cui prima la stringa non riusciva a prendre il valore, forse un errore di sintassi nel mio codice...

    Comunque, l'importante è aver risolto. Ringrazio Marino51 e tutti coloro che sono intervenuti in questo threat.
    Enzo
     
Sto caricando...

Condividi questa Pagina