Logique et is_integer

Eléphanteau du PHP | 25 Messages

16 mai 2006, 23:19

Amis de la logique bonsoir.

Je me suis demande dans quelle section poster mes 4 pauvres lignes de code, mais je pense qu'ici "debuter en php", ca convient bien. Encore un probleme de plus qui semble tout con mais qui m'en a fait voir aujourd'hui, pourtant, je suis sur que c'est un probleme de logique a deux balle (le probleme, pas la logique... ;) ). Allez, on plonge.

On imagine un formulaire en methode post avec des reponses analysées avant d'être rentrées dans la BDD. La question Q1-1 demande l'age de la personne. Le code d'analyse est le suivant :
if (isset($_POST['Q1-1'])) {
	$q1q1=$_POST['Q1-1'];
	if ($q1q1=="") {
	    echo "Question 1-1 oubliée<br>";
		$erreurs=$erreurs+1;
	}elseif (!is_integer($q1q1)) {
		echo "Réponse 1-1 n'est pas un nombre entier<br>";
		$erreurs=$erreurs+1;
	}
}
Tout a l'air de bien se passer sauf quand on rentre effetivement l'age en annee (28 pour l'exemple). A ce moment la s'affiche le message d'erreur comme si le nombre renseigné n'etait pas un entier.

Les lois de l'arithmetiques me disent encore, meme apres le visionage de Matrix ce soir a France2, que 28 est un entier...

... [-o< à l'aide ... (et merci d'avance)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 mai 2006, 23:30

Salut l'ami non logique :)
Note : Pour tester si une variable est un nombre ou une chaîne numérique (comme les entrées de formulaire, qui sont toujours des chaînes), vous devez utiliser la fonction is_numeric().
ou utiliser intval() lors de l'affectation de la variable POST à $q1q1

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 25 Messages

16 mai 2006, 23:45

Bon, l'ami au pelage tacheté,

C'est vrai qu'on peut le voir aussi comme ca et que là, avec un petit test is_numeric et, si oui, intval() sur le resultat. En effet, ca marche nickel.

En meme temps, etant en pleine formation "le Merovingien" pour pouvoir un jour programmer le sous-programme gateau moi-meme (cf le film de ce soir...), la fonction is_integer ne marche que sur des nombres repondant au critere is_numeric ? je veux dire par la, on ne peut pas tester directement une chaine de caracteres avec is_integer ?

En tout ca merci pour la reponse rapide, une fois de plus.
:oops:

Le non-logique... :D

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 mai 2006, 00:03

la fonction is_integer ne marche que sur des nombres repondant au critere is_numeric ?
Non, les données proviennent d'un formulaire donc tu retouve des chaines de caractères, si tu passe un entier directement qui provient d'un calcul ou autre cela fonctionnera avec is_integer.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute