Question à 1€, qu'affiche ceci (en php) ?
Code PHP :
$do=0;
if($do=='dropmoney')die('argh');
Dit moi que je ne suis pas bien réveillé, que j'ai confondu un truc là !
Ca affiche bien 'argh' ...
Es bien normale docteur ?
/Lud
tu as mis 2 = non? c'est pas bon si? (il faut que je replonge dans mes cours, j'ai pris l'habitude du vb)
Tu demande SI 0 == une chaine de caractere... le if retourn false, il ne devrait pas faire ton die, qui n'a rien a faire là, c'es tplutot un echo pour afficher. (c'est peut etre pour ça qu'il execute le die?) j'ai jamais utilisé le die comme ça moi...
Je ne comprends pas pourquoi ça marche pas (enfin pourquoi ça marche !)
normalement si on veut comparer les types (aussi) on utilise
=== non ?
Et pour le die(), c'est bien sûr pour pas avoir a donner de l'argent
Si ça a un importance :
Je viens d'effectuer le fastidieux (nécessaire ?) travail pour passer
global_vars = off, donc le $do reçoit la valeur (& type) du $_GET('do');
il faut écrire si tu veux comparer par type uniquement.
Code PHP :
$do=0;
if($do ==='dropmoney')die('argh');
ou
Code PHP :
$do=0;
if(strval($do) =='dropmoney')die('argh');
d'ailleurs si tu fais
Code PHP :
var_dump($do =='dropmoney');
Tu verras que tu obtiens un boolean(true).
Lorsqu'une chaîne de caractères est évaluée comme une valeur numérique, le résultat et le type de la variable sont déterminés comme suit.
La chaîne de caractères est de type "double" si elle contient un des caractères '.', 'e' ou 'E'. Sinon, elle est de type entier ("integer" ).
La valeur est définie par la première partie de la chaîne. Si la chaîne de caractères débute par une valeur numérique cette valeur sera celle utilisée. Sinon, la valeur sera égale à 0 (zéro). Les données numériques valides ont un signe optionnel, suivies par un ou plusieurs digits (optionnellement, contenant un point de décimal), suivies par un exponentiel optionnel. L'exponentiel peut être un 'e' ou un 'E' suivi par un ou plusieurs digits.
tu trouveras plus d'infos sur
http://fr.php.net
Je crois plutôt (à vérifier) que le triple égal vérifie l'égalité des deux chaînes + la conformité des types. Je m'explique :
Si on fait un
Code :
$int = 0;
$boolean = false;
Alors ($int == $boolean) vaudra true mais ($int === $boolean) vaudra false.
Dans le premier cas on vérifie uniquement la valeur, or un 0 vaut un false. Dans le second cas on vérifie le type des variables aussi.
à mon avis comme tu utilises == (et pas ===) php convertit "dropmoney" en entier (car $do est un entier)
"dropmoney" en entier ça donne 0 donc c'est normal
essaie de le faire à l envers
if ("dropmoney" == $do)
histoire de voir

Paul a écrit :Je crois plutôt (à vérifier) que le triple égal vérifie l'égalité des deux chaînes + la conformité des types. Je m'explique :
Si on fait un
Code :
$int = 0;
$boolean = false;
Alors ($int == $boolean) vaudra true mais ($int === $boolean) vaudra false.
Dans le premier cas on vérifie uniquement la valeur, or un 0 vaut un false. Dans le second cas on vérifie le type des variables aussi.
Je sais, juste que === t'evites de te tromper quand tu essayes de comparer un int et un string...
D'ailleurs je recommande d'initialiser un string a "" et non a 0, pour que PHP fasse le typage lui meme...
@Ter Rowan : Cf ce que je dis plus haut sur la facon dont PHP traite les comparaisons int/string

En fait, t'as oublié les {} dans ta condition, sans cela ca ne peut pas marcher non ?
A la place de :
Citation :$do=0;
if($do=='dropmoney')die('argh');
Mets plutot :
Citation :$do = 0;
if ($do == 'dropmoney') {die('Argh');}
Ca devrait plus t'afficher le die normalement vu que la condition n'est pas vérifié.