Aller au contenu

variable $_POST et fonction (int) :


Sujets conseillés

Posté

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.

Posté

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';

Posté
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.

Posté (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 :

<?php
if (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;
?>

:P

Modifié par Dash
Posté

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 : 0
egal

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...