Redirection si $var n'est pas numérique

WRInaute impliqué
Bonjour

Je voudrais vérifier si une variable est un chiffre ou pas. Si oui, on traite la page, si non je voudrais rediriger vers l'index.

le code:
Code:
if(is_numeric($_GET['chiffre']))   
$chiffre=mysql_real_escape_string(htmlentities($_GET['chiffre']));
 
 $data = ma requete
$donnees1 = mysql_fetch_assoc($data); 
     	.......
         else     {
header("Location: index.php");  }

Mais quand je mets par exemple '11aa' dans $chiffre, il me renvoie une page 404.

Qqchose qui cloche dans mon code ?
 
WRInaute passionné
si tu veux vérifier que $_GET['chiffre'] ne contient que des chiffres entre 0 et 9, is_numeric n'est pas la bonne fonction car elle accepte les exposants et le séparateur décimal.
tu peux utiliser une expression régulière :
Code:
if (preg_match('/^[0-9]+$/', $_GET['chiffre']))
 
WRInaute impliqué
Salut,
ici oui, je les ai zappé en recopiant le code.

Mais même en les mettant, quand je teste avec $chiffre= 11aa, ca me renvoie une 404 alors que je voudrais que ca redirige sur index.
 
WRInaute accro
Tu fais la redirection avec header() mais pas de exit(), donc le code après le header("Location: index.php") est exécuté aussi.
Le problème ne viendrais pas de là (on ne sait pas ce qu'il y a après) ?
 
WRInaute discret
Salut,

Le fichier index.php est t-il bien présent dans le même répertoire que celui du script contenant ce code ?

Sinon, gràce à l'expression rationnelle de Forty, nous somme assurés de n'avoir que des chiffres. Ainsi, l'utilisation des fonctions mysql_escape_string et htmlentities devient superflue.

Comme spout, je pense aussi qu'il est préférable de placer la fonction exit(); après l'appel à la fonction header('Location: index.php');.

Code:
if((isset($_GET['chiffre']))and(preg_match('/^[0-9]+$/',$_GET['chiffre']))) {
	$chiffre=$_GET['chiffre'];
	$data = ma requete
	$donnees1 = mysql_fetch_assoc($data);
	// ...
} else {
	header('Location: index.php');
	exit();
}
 
WRInaute occasionnel
avec ça plutot (/)?

Code:
header('Location: /index.php');

et garde ton test numérique il est très bien.
Code:
is_numeric
 
Discussions similaires
Haut