Tester l'existence d'un paramètre (id)
Résolu
gabbermaniac
Messages postés
147
Statut
Membre
-
gabbermaniac Messages postés 147 Statut Membre -
gabbermaniac Messages postés 147 Statut Membre -
Bonjour,
Sur une page je fais passer des valeurs dans l'url (ex: index.php?p=article&id=7777), cela fonctionne mais quand je mets une id erroné, cela affiche la page alors que je voudrais un message d'erreur
(l'id dans mon cas ne peut être que des nombres à 4 chiffres)
le code est le suivant:
<?php
$id=$_GET["id"];
if(isset($_GET["id"]) && preg_match("/^[0-9]+$/",$id)) {
require "/../../connect.php";
$sql="SELECT * FROM articles WHERE id=$id";
$req = mysql_query($sql) or die(mysql_error()." ERROR ");
$data=mysql_fetch_assoc($req);
echo " {$data["titre"]}";
}
else {
header("Location: index.php?p=404");
}
Qu'est ce qui ne vas pas dans ce code pour afficher la page 404 si l'id est incorrect?
Merci
Sur une page je fais passer des valeurs dans l'url (ex: index.php?p=article&id=7777), cela fonctionne mais quand je mets une id erroné, cela affiche la page alors que je voudrais un message d'erreur
(l'id dans mon cas ne peut être que des nombres à 4 chiffres)
le code est le suivant:
<?php
$id=$_GET["id"];
if(isset($_GET["id"]) && preg_match("/^[0-9]+$/",$id)) {
require "/../../connect.php";
$sql="SELECT * FROM articles WHERE id=$id";
$req = mysql_query($sql) or die(mysql_error()." ERROR ");
$data=mysql_fetch_assoc($req);
echo " {$data["titre"]}";
}
else {
header("Location: index.php?p=404");
}
Qu'est ce qui ne vas pas dans ce code pour afficher la page 404 si l'id est incorrect?
Merci
3 réponses
-
salut
pour verifier
il ya la fonction php "is_int" qui verifie si la valeur est un entier
et pour la longeur : "strlen" qui compte le nombre de caratere
et pense a bien securiser $_GET car il ne faut jamais faire confiance a l'utilisateur.
on peut imaginer un truc du genre :
$id=stripslashes(htmlspecialchars($_GET['id']));
if ( is_int($id) AND strlen($id) == 4)
{ echo $data['titre']; }
else
{ header("Location: index.php?p=404"); } -
sinon essayes avec ce preg_match:
preg_match("/^[0-9]{4}$/",$id)
commence par un chiffre ^, finit par un chiffre $ et 4 chiffres en tout{4} -
Merci, j'ai améliorer mon script en prenant en compte ces nouveaux éléments
Ma nouvelle question est la suivante: si l'utilisateur change l'id de l'url , par exemple index.php?p=article&id=1258 or dans ma bdd 1258 n'existe pas,
je ne peux pas faire (&& $id <1250) par exemple car dans ma bdd j'ai des 600 entrées (donc 600 id) allant de 1000 à 7000
Alors comment afficher la page 404 ? en somme comment vérifier que l'utilisateur tape une id existante?
merci
Re, j'ai poster en même temps que les autres réponses;
j'ai rajouter ceci pour tester l'existence:
$id=stripslashes(htmlspecialchars($_GET['id']));
if(isset($_GET["id"]) && preg_match("/^[0-9]{4}+$/",$id)) {
require "/../../connect.php";
$sql="SELECT * FROM articles WHERE id=$id";
$req = mysql_query($sql) or die(mysql_error()." ERROR ");
$data=mysql_fetch_assoc($req);
$existe = mysql_num_rows($req);
if ($existe==0) {header("Location: index.php?p=404");}
else {
echo " {$data["titre"]}";
}
}
else {
header("Location: index.php?p=404");
}
?>
Cela fonctionne parfaitement, je vous remercie de votre aide et de votre rapidité car cela faisais plusieurs jours que je bloquais la dessus (entre autre lol)