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   -
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
A voir également:

3 réponses

Utilisateur anonyme
 
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"); }
0
Utilisateur anonyme
 
et j'ai oublier

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
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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}
0
gabbermaniac Messages postés 137 Date d'inscription   Statut Membre Dernière intervention   12
 
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)
0