[PHP] Istruzione condizionale con valori booleani

enzogar

Nuovo Utente
3 Ago 2016
30
0
6
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:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
3.939
294
83
@enzogar
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
o il tag
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti

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
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
geolocalizzazione (con il quale, in base alla nazionalità del visitatore, faccio apparire nella pagina la bandiera del suo paese
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) { …...
 

enzogar

Nuovo Utente
3 Ago 2016
30
0
6
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...
 

kastaldi

Nuovo Utente
3 Feb 2016
21
0
3
E se forzi la variabile con
PHP:
$mobile = true;
invece di
PHP:
$mobile = $query['mobile'];
funziona ?
 

enzogar

Nuovo Utente
3 Ago 2016
30
0
6
Forzando la variabile con true, mi restituisce valore 1, ma questo come risolve il mio problema?:confused:
 

kastaldi

Nuovo Utente
3 Feb 2016
21
0
3
Forzando la variabile con true, mi restituisce valore 1, ma questo come risolve il mio problema?:confused:
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.
 

macus_adi

Utente Attivo
5 Dic 2017
1.036
59
48
IT/SW
Forzando la variabile con true, mi restituisce valore 1, ma questo come risolve il mio problema?:confused:
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:

enzogar

Nuovo Utente
3 Ago 2016
30
0
6
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...
 

fratt

Nuovo Utente
19 Gen 2019
33
4
8
Cosa succede se fai il confronto direttamente con $query[]?
PHP:
 if ($query['mobile']) {$messaggio....
 

enzogar

Nuovo Utente
3 Ago 2016
30
0
6
Non succede niente, ho fatto un semplice test:
PHP:
if ($query['mobile']) echo 'Connessione da mobile';
ma a video non compare nulla...
 

kastaldi

Nuovo Utente
3 Feb 2016
21
0
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";}
?>
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
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";  }
 

enzogar

Nuovo Utente
3 Ago 2016
30
0
6
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