[PHP] Istruzione condizionale con valori booleani

  • Creatore Discussione Creatore Discussione enzogar
  • Data di inizio Data di inizio

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:
@enzogar
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008

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
 
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) { …...
 
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...
 
E se forzi la variabile con
PHP:
$mobile = true;
invece di
PHP:
$mobile = $query['mobile'];
funziona ?
 
Forzando la variabile con true, mi restituisce valore 1, ma questo come risolve il mio problema?:confused:
 
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.
 
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:
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...
 
Cosa succede se fai il confronto direttamente con $query[]?
PHP:
 if ($query['mobile']) {$messaggio....
 
Non succede niente, ho fatto un semplice test:
PHP:
if ($query['mobile']) echo 'Connessione da mobile';
ma a video non compare nulla...
 
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";}
?>
 
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";  }
 
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
 

Discussioni simili