Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    PHP, strano comportamento di confronto con ==

    In una tabella mysql ho dei campi enum che valorizzo con 'true' o 'false', proprio i valori non il booleano true o false.

    enum('true','false') non BOOLEAN per intenderci.

    nella mia pagina controllo questi valori e visualizzo delle icone corrispondenti nella pagina.

    Perchè se ho un campo di tipo int valorizzato a 0 entrambi i controlli passano come veri?

    Codice PHP:
    if($array['campo'] == 'true'# se il valore è 0 il confronto è true
    if($array['campo'] == 'false'# se il valore è 0 il confronto è true 
    Ovviamente risolvo con === ma è giusto questo comportamento, non sto usando le costanti true e false, ma delle semplici stringhe.
    Ciao!

  2. #2
    e sopratutto, perchè il controllo passa sia con 'true' che con 'false' ??
    Ciao!

  3. #3
    Non so come aiutarti.
    Una possibile soluzioni potrebbe essere che, il valore '0' viene interpretato come numero, non come stringa. Così, quando viene fatto il confronto, l'interprete tenta di convertire "true" e "false" in numeri, dato che nessuna delle stringhe ne contiene, viene automaticamente assegnato alla conversione il risultato di "0", per questo il confronto risulta true.
    Questa è solo un'ipotesi ovviamente, ma, in questo caso, prova a modificare il codice in questo modo:
    Codice PHP:
    if(sprintf("%05s",  $array['campo']) == sprintf("%05s"'true'))
    if(
    sprintf("%05s"$array['campo']) == sprintf("%05s"'false')) 
    In questo modo viene effettuata la conversione in stringhe di entrambi i termini di uguaglianza, evitando (spero) che venga effettuato un paragone tra interi, come sembra sia avvenuto prima.
    Spero di esserti stato utile!

  4. #4
    Cosa dice
    codice:
    var_dump($array['campo']);
    ?

  5. #5
    Originariamente inviato da k.b
    Cosa dice
    codice:
    var_dump($array['campo']);
    ?
    ["campo"]=>
    int(0)

    ma in questo caso perchè è uguale alle stringhe 'true' e 'false'?
    Ciao!

  6. #6
    Perche' stai comparando un numero e una stringa, e in questo caso PHP trasforma entrambi gli operandi in numero e il valore numerico di 'true' e' 0.

    http://php.net/manual/en/language.op...comparison.php

  7. #7
    Immaginavo, ma non ricordavo la regola... e dire che la sapevo...
    Ciao!

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