Anonymus Posté 19 Juin 2004 Partager 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nudrema Posté 19 Juin 2004 Partager 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'; Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 19 Juin 2004 Auteur Partager 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ganf Posté 19 Juin 2004 Partager Posté 19 Juin 2004 Ce que tu cherches est probablement is_numeric() Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dash Posté 19 Juin 2004 Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 19 Juin 2004 Auteur Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant