Anonymus Posté 19 Juin 2004 Posté 19 Juin 2004 Classiquement, je transmet le code postal venant d'un : <insert type=text name=cp .... je récupère la variable $_POST['cp'] que je veux tester. Si ce n'est pas un code postal, et donc si ce n'est pas un 'entier', alors message d'erreur. Ca donne ceci : if (! $_POST['cp'] == (int)$_POST['cp']) echo"erreur"; Seulement, après moults essais, ca ne marche pas. Donc, je développe pour en savoir un peu plus. echo "<br>post : ".$_POST['cp']; echo "<br>get type : ".gettype($_POST['cp']); echo "<br>get type int. ".gettype((integer)$_POST['cp']); echo "<br>cp : ".$_POST['cp']; echo "<br>int cp :".(integer)$_POST['cp']; Pour la chaine : "chapo", ca me donne bien : string integer Je devrais donc retourner une erreur dans l'expression : if (! $_POST['cp'] == (int)$_POST['cp']) echo"erreur"; Je recommence : $cp = (integer)$_POST['cp']; $cp2=$_POST['cp']; echo "<br>".$cp; echo "<br>".$cp2; if ( ($cp!=$cp2)) echo"NOT"; Et.. Ca ne marche pas. Anonymus.
Nudrema Posté 19 Juin 2004 Posté 19 Juin 2004 Attention déjà, l'opérateur ! a priorité sur l'opérateur == Or tu as if (! $_POST['cp'] == (int)$_POST['cp']) echo"erreur"; Donc si $_POST['cp'] = 3, tu aurais (!3 == 3) -> 0 == 3, ce qui est faux Et si $_POST['cp'] = 'mop', (!"mop" == (int)'mop') -> 0 == 0, ce qui est vrai Tu devrais donc écrire if (!($_POST['cp'] == (int)$_POST['cp'])) echo"erreur"; ou bien if ($_POST['cp'] != (int)$_POST['cp']) echo"erreur"; Et si tu veux pas t'embêter, tu peux aussi faire if (!is_int($_POST['cp'])) echo 'erreur';
Anonymus Posté 19 Juin 2004 Auteur Posté 19 Juin 2004 Attention déjà, l'opérateur ! a priorité sur l'opérateur == Or tu as if (! $_POST['cp'] == (int)$_POST['cp']) echo"erreur"; Donc si $_POST['cp'] = 3, tu aurais (!3 == 3) -> 0 == 3, ce qui est faux Et si $_POST['cp'] = 'mop', (!"mop" == (int)'mop') -> 0 == 0, ce qui est vrai Tu devrais donc écrire if (!($_POST['cp'] == (int)$_POST['cp'])) echo"erreur"; ou bien if ($_POST['cp'] != (int)$_POST['cp']) echo"erreur"; Et si tu veux pas t'embêter, tu peux aussi faire if (!is_int($_POST['cp'])) echo 'erreur'; Essaie ceci : echo "<br> ->".$_POST['cp'];echo "<br> ->".(int)$_POST['cp'];if ( ($_POST['cp'] == (int)$_POST['cp']) ) echo"<br>egal"; Comme résultat, je trouve : ->azeez->0 egal alors que je ne devrais pas trouver 'egal'. Pour le if (![URL=http://be.php.net/manual/fr/function.is-int.php]is_int[/URL]($_POST['cp'])) echo 'erreur'; ca ne peut pas marcher, parce que $_POST ne renvoie que des string. Donc, $_POST['un_nombre_quelconque'] est une chaine de caractère dans tous les cas.
Dash Posté 19 Juin 2004 Posté 19 Juin 2004 (modifié) is_numeric accepte les decimales (exemple: -50.1). Ce n'est peut-etre pas suffisant pour verifier des codes postaux... Pour ne considerer que des valeurs entieres, une comparaison sur des objets de meme type me semble plus adequate : if (intval($_POST['cp']).' ' != $_POST['cp'].' ') echo 'erreur'; concernant vos tests, vous pouvez reprendre ce code : <?phpif (isset($_GET['cp'])){ $cp = intval($_GET['cp']); $a= is_int($_GET['cp']) ? 'true' : 'false'; $b= is_numeric($_GET['cp']) ? 'true' : 'false'; $c= ($cp === $_GET['cp']) ? 'true' : 'false'; $d= ($cp == $_GET['cp']) ? 'true' : 'false'; $e= ($cp.' ' == $_GET['cp'].' ') ? '<span style="color:green">true</span>' : '<span style="color:red">false</span>'; echo <<<EOF<pre>\$_GET['cp'] = '{$_GET['cp']}';\$cp = intval(\$_GET['cp']); // \$cp = $cp;<hr />is_int(\$_GET['cp']) => $a;is_numeric(\$_GET['cp']) => $b;\$cp === \$_GET['cp'] => $c;\$cp == \$_GET['cp'] => $d;\$cp.' ' == \$_GET['cp'].' ' => $e;</pre><hr />EOF;}echo <<<EOF<a href="?cp=50">50</a><a href="?cp=-50.1">-50.1</a><a href="?cp=50.c">50.c</a>EOF;?> Modifié 19 Juin 2004 par Dash
Anonymus Posté 19 Juin 2004 Auteur Posté 19 Juin 2004 Pour une chaine de caractère donnée, ca retourne ceci : echo "<br> ->post : ".$_POST['cp']; echo "<br> ->intval : ".intval($_POST['cp']); if ( ($_POST['cp'] == intval($_POST['cp'])) ) echo"<br>egal"; Et à l'affichage : ->post : sfdqs->intval : 0egal
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant