Tester l'existence d'un paramètre (id)
Résolu
gabbermaniac
Messages postés
137
Date d'inscription
Statut
Membre
Dernière intervention
-
gabbermaniac Messages postés 137 Date d'inscription Statut Membre Dernière intervention -
gabbermaniac Messages postés 137 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- Tester l'existence d'un paramètre (id)
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester son pc - Guide
- Remettre parametre usine pc - Guide
- Parametre dns - Guide
- Parametre windows - Guide
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"); }
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:
commence par un chiffre ^, finit par un chiffre $ et 4 chiffres en tout{4}
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)
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)
pour verifier si l'id existe
après avoir verifié que le format est correct
si c'est ok
fait la requete sql pour l'id en question
et utilise "$existe = mysql_num_rows($req);
si $existe est superieur a 0 alor il ya eu une reponse donc l'id existe.
maintenant lje te laisse travailler