Webmaster Hub: variable $_POST et fonction (int) : - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

variable $_POST et fonction (int) : un bug ? Noter : -----

#1 L'utilisateur est hors-ligne   Anonymus 

  • Groupe : Hubmaster
  • Messages : 5 139
  • Inscrit(e) : 26-août 03
  • Genre:Homme
  • Localisation:Normandie.. (pas loin de Paris)
  • Société:L'atelier des Chefs

Posté 19 juin 2004 - 09:52

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.
0

#2 L'utilisateur est hors-ligne   Nudrema 

  • Groupe : Membre
  • Messages : 67
  • Inscrit(e) : 10-juin 04

Posté 19 juin 2004 - 10:18

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

#3 L'utilisateur est hors-ligne   Anonymus 

  • Groupe : Hubmaster
  • Messages : 5 139
  • Inscrit(e) : 26-août 03
  • Genre:Homme
  • Localisation:Normandie.. (pas loin de Paris)
  • Société:L'atelier des Chefs

Posté 19 juin 2004 - 10:46

Nudrema, le samedi 19 juin 2004, 11:18, dit :

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 :

Citation

->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.
0

#4 L'utilisateur est hors-ligne   Ganf 

  • Groupe : Hubmaster
  • Messages : 348
  • Inscrit(e) : 08-mars 04
  • Société:-

Posté 19 juin 2004 - 10:51

Ce que tu cherches est probablement is_numeric()
Besoin d'une doc pour PHP 5 ? Allez chercher le livre PHP 5 avancé, aux éditions Eyrolles.
Éric Daspet
0

#5 L'utilisateur est hors-ligne   Dash 

  • Groupe : Membre
  • Messages : 233
  • Inscrit(e) : 06-janvier 04
  • Localisation:atelierphp5.com

  Posté 19 juin 2004 - 10:53

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

Ce message a été modifié par Dash - 19 juin 2004 - 11:03.

0

#6 L'utilisateur est hors-ligne   Anonymus 

  • Groupe : Hubmaster
  • Messages : 5 139
  • Inscrit(e) : 26-août 03
  • Genre:Homme
  • Localisation:Normandie.. (pas loin de Paris)
  • Société:L'atelier des Chefs

Posté 19 juin 2004 - 11:01

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

0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)