Soucis sur une requête sql

WRInaute passionné
Bonjour,
J'ai un petit soucis avec la requête suivante qui me permet d'activer une annonce via un lien reçut par email. Si une erreur survient le message "$message" ne s'affiche pas ou si aucun enregistrement n'est trouvé, la redirection n'est pas effectué ??
Ou ai-je merdouillé ??

Code:
          $result = mysql_query("
               SELECT id
                    , Compte_Active
                    , Clef_Activation
               FROM RECHERCHE_CLIENTS
               WHERE id = '" . $_GET["id"] . "'
               AND Clef_Activation = '" . strtolower($_GET["clef"]) . "'
          ");
          
          // Si une erreur survient
          if(!$result)
          {
               $message = "Une erreur est survenue lors de l'activation de votre annonce!";
          }
          else
          {
               
               // Si aucun enregistrement n'est trouvé
               if(mysql_num_rows($result) == 0)
               {
                    header("Location: index.php");
               }
Merci
 
WRInaute accro
@dh, la condition que tu indiques renverra toujours "vrai" ...

@tryan, il manque une parenthèse de fermeture dans ton code ou c'est juste qu'une erreur de copier - coller trop court ?

Sinon, il te faut tester ta requete et voir ce qui en ressort.
 
WRInaute passionné
Merci de vos réponses mais ... je n'ai pas tout comprit ^^!
@nickargall : c'est un oublie dans mon copié/collé ^^

J'ai modifié un peut le code d'origine:
Code:
         // Si une erreur survient
          if(!$result)
          {
               $message = "Une erreur est survenue lors de l'activation de votre annonce!";
          }
          else
          {
               
               // Si aucun enregistrement n'est trouvé
               if(mysql_num_rows($result) == 0)
               {
                    header("Location: index.php");
               }
}
en
Code:
               // Si aucun enregistrement n'est trouvé
               if(mysql_num_rows($result) == 0)
               {
                    $message = "Cette annonce n'existe pas!!";
               }
Comme ça si les paramètres passé en $_GET sont faux j'ai un message d'erreur.
Par contre un peut plus bas dans mon code je valide les données si tout est ok et je souhaiterais afficher de nouveaux un message d'erreur si l'enregistrement à merdé...mais je n'y parvient pas une fois de plus !

Code:
                         // Activation du compte utilisateur
                         $result = mysql_query("
                              UPDATE RECHERCHE_CLIENTS
                              SET Compte_Active = '1'
                              WHERE id = '" . $_GET["id"] . "'
                              AND Clef_Activation = '" . strtolower($_GET["clef"]) . "'
                         ");
                         
                         // Si une erreur survient (c'est la que je séche ^^)
                         if(!$result)
                         {
                              $message = "Une erreur est survenue lors de l'activation de votre annonce!";
                         }
                         else
                         {
                              $message = "Votre annonce a correctement été activé!";


                              
                         }
merci
 
WRInaute accro
renvoie une entete (header) pour afficher le message

if(!$result) header( 'location: tapage.php?erreur=1' );
 
WRInaute accro
c'est pas une autre page, c'est la meme page. Si tu ne veux pas renvoyer d'entete place ton code php en haut de ton script
 
WRInaute accro
Tu mets des trucs dans $message, mais tu l'affiches quelque part?

A part ça, un point très important: ne passe JAMAIS des arguments reçus dans un $_GET (ou $_POST ou $_SERVER ou $_COOKIES, bref, n'importe quoi qui vient de l'utilisateur) dans une requête SQL sans vérifier et escaper tout ça. Sinon tu ouvres ton code à des injections SQL qui permettent de faire n'importe quoi avec ta base de données.

Jacques.
 
WRInaute passionné
@jcaron : c'est un fragment de mon code qui est posté. Il va de soit que ma variable $message est ensuite affiché dans ma page en fonction du résultat ^^. Pour ce qui est des injections, les arguments reçus dans $_GET sont vérifiés au préalable soit :
-pour l'id -> doit être un chiffre obligatoirement
-pour la clef -> 8 chiffres ou lettres obligatoirement
Ensuite je vérifie que ces 2 arguments existent avant enregistrement.

@KOogar : merci
 
Discussions similaires
Haut