Etrangeté de php ?
Posté : 05 juil. 2009, 14:33
Bonjour,
En codant une validation d'entrée de formulaire, je suis tombé sur un comportement étrange de php (en tous cas pour moi).
Avec comme résultat :
Donc la somme d'un nombre avec quelque chose qui n'en est pas (par ex. 12'ps) donne un nombre !
Manifestement php considère qu'une chaîne de caractère qui commence par des chiffres est (comme) un nombre (12'ps devient 12) et une chaîne de caractère qui contient un chiffre vaut le nombre zéro dans un contexte d'arithmétique.
Ce comportement est en fait voulu (cf. http://www.php.net/manual/fr/language.t ... conversion).
En connaissez-vous les raisons ainsi que la manière de traiter ce genre de cas dans un formulaire ? Je m'explique.
J'attends en entrée une variable $var > 0. Si je fait un test tout bête :
Si $var = 3, c'est ok, si $var = "3sdsd", c'est *aussi* ok. Il faut donc trouver un autre test, par exemple, is_numeric. Si $var = 3, c'est ok, si $var = "3sss", c'est pas ok et si $var= '' (cas où aucune valeur n'est entrée dans le formulaire), c'est pas ok (ce qui est embêtant quand on arrive pour la première fois sur le formulaire).
J'ai l'impression de tourner en rond par la faute de php qui considère '12ksksks' comme un nombre (mais pas numérique ...).
Quelqu'un aurait la gentillesse de me remettre sur la bonne voie ?
Merci d'avance
boobz
En codant une validation d'entrée de formulaire, je suis tombé sur un comportement étrange de php (en tous cas pour moi).
Code : Tout sélectionner
<?php
$a = array("1","1a","a1","a","-1","-2h","-h2","l'p0","12'ps");
foreach ($a as $key => $value) {
$temp = $value + 4;
echo "(".$value." + 4 ) = $temp<br>";
}
?>
Code : Tout sélectionner
(1 + 4 ) = 5
(1a + 4 ) = 5
(a1 + 4 ) = 4
(a + 4 ) = 4
(-1 + 4 ) = 3
(-2h + 4 ) = 2
(-h2 + 4 ) = 4
(l'p0 + 4 ) = 4
(12'ps + 4 ) = 16
Manifestement php considère qu'une chaîne de caractère qui commence par des chiffres est (comme) un nombre (12'ps devient 12) et une chaîne de caractère qui contient un chiffre vaut le nombre zéro dans un contexte d'arithmétique.
Ce comportement est en fait voulu (cf. http://www.php.net/manual/fr/language.t ... conversion).
En connaissez-vous les raisons ainsi que la manière de traiter ce genre de cas dans un formulaire ? Je m'explique.
J'attends en entrée une variable $var > 0. Si je fait un test tout bête :
Code : Tout sélectionner
if ($var > 0)
echo "ok"
J'ai l'impression de tourner en rond par la faute de php qui considère '12ksksks' comme un nombre (mais pas numérique ...).
Quelqu'un aurait la gentillesse de me remettre sur la bonne voie ?
Merci d'avance
boobz