Tester l'existence d'un paramètre (id)

Résolu/Fermé
gabbermaniac Messages postés 137 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 23 août 2011 - 14 avril 2010 à 17:56
gabbermaniac Messages postés 137 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 23 août 2011 - 14 avril 2010 à 18:34
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
14 avril 2010 à 18:16
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
14 avril 2010 à 18:23
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
14 avril 2010 à 18:24
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 mercredi 4 mars 2009 Statut Membre Dernière intervention 23 août 2011 12
Modifié par gabbermaniac le 14/04/2010 à 18:48
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