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

Résolu
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

3 réponses

  1. 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
    1. 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
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  3. gabbermaniac Messages postés 147 Statut Membre 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