Mysql_fetch_array()

Résolu
djimson Messages postés 217 Statut Membre -  
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, Voici mon erreur quand je veux me connecter à ma base de données :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/content/p/g/a/xxxxxxxx/html/xxxxxxx/xxxxxxxx/xxxxxxxxx/mon-cv.php on line 25
Erreur de connexion*
Que dois je faire?
Voici le code :

<?
if($_GET['Clef_Activation'])

{

$id_user = $_GET['Clef_Activation'];

// Connexion à la base de données

/* Parametre de connexion à la base de donnée et au serveur*/
$connect = mysql_connect('localhost','root',"") or die ("Ereur de connexion");
$db = mysql_select_db('ouaga_db', $connect) or die ("Erreur de connexion");

// Sélection de l'utilisateur concerné
$result =("
SELECT *
FROM Comptes_Utilisateurs
WHERE Clef_Activation =$id_user;
");

$resultat = mysql_query($result);
$row = mysql_fetch_array($resultat) or die ("Erreur de connexion");

// Fermeture de la connexion à la base de données
mysql_close();
?>
Merci pour l'aide
Configuration: Windows XP
Firefox 3.0.11

12 réponses

  1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    c'est laquelle la ligne 25 ?
    0
    1. djimson Messages postés 217 Statut Membre 3
       
      Dlé, la voici : $row = mysql_fetch_array($resultat) or die ("Erreur de connexion");
      Merci pour votre reponse
      0
    2. djimson Messages postés 217 Statut Membre 3
       
      Auparavant pr se connecter, voici le scrip. C'est la que je recupere la variable: Ca peut aider surement

      <?
      // Redirige l'utilisateur s'il est déjà identifié
      if(isset($_COOKIE['CLE_ACTIVATION']))
      {
      $id_user = $_COOKIE['CLE_ACTIVATION'];
      // Redirection de l'utilisateur
      header("Location: mon-cv.php?Clef_Activation=$id_user");
      }
      else
      {

      // Formulaire visible par défaut
      $masquer_formulaire = false;

      // Une fois le formulaire envoyé
      if(isset($_POST["BT_Envoyer"]))
      {

      // Vérification de la validité des champs
      if(!ereg("^[A-Za-z0-9_]{2,20}$", $_POST["TB_Nom_Utilisateur"]))
      {
      $message = "Votre nom d'utilisateur doit comporter entre 2 et 20 caractères<br />\n";
      $message .= "L'utilisation de l'underscore est autorisée";
      }
      elseif(!ereg("^[A-Za-z0-9]{6,}$", $_POST["TB_Mot_de_Passe"]))
      {
      $message = "Votre mot de passe doit comporter au moins 6 caractères";
      }
      else
      {

      // Connexion à la base de données
      // Valeurs à modifier selon vos paramètres configuration
      mysql_connect("xxxxxxxxx", "xxxxxx", "xxxxxxx");
      mysql_select_db("xxxxxxxx");

      // Sélection de l'utilisateur concerné
      $result = mysql_query("
      SELECT ID_Utilisateur, Nom_Utilisateur, Mot_de_Passe, Compte_Active, Clef_Activation
      FROM Comptes_Utilisateurs
      WHERE Nom_Utilisateur = '" . $_POST["TB_Nom_Utilisateur"] . "'
      ");

      // Si une erreur survient
      if(!$result)
      {
      $message = "Une erreur est survenue lors de la tentative de connexion";
      }
      else
      {

      // Si aucun utilisateur n'a été trouvé
      if(mysql_num_rows($result) == 0)
      {
      $message = "Le nom d'utilisateur " . $_POST["TB_Nom_Utilisateur"] . " n'existe pas";
      }
      else
      {

      // Récupération des données
      $row = mysql_fetch_array($result);

      // Si le compte n'a pas été activé
      if($row["Compte_Active"] == 0)
      {
      $message = "Votre compte utilisateur n'a pas été activé";
      }
      else
      {

      // Vérification du mot de passe
      if(md5($_POST["TB_Mot_de_Passe"]) != $row["Mot_de_Passe"])
      {
      $message = "Votre mot de passe est incorrect";
      }
      else
      {

      // Définition du temps d'expiration des cookies
      $expiration =
      empty($_POST["CB_Connexion_Automatique"]) ? 0 : time() + 90 * 24 * 60 * 60;

      // Création des cookies
      setcookie("ID_UTILISATEUR", $row["ID_Utilisateur"], $expiration, "/");
      setcookie("NOM_UTILISATEUR", $row["Nom_Utilisateur"], $expiration,"/"); setcookie("CLE_ACTIVATION", $row["Clef_Activation"], $expiration, "/");

      // Redirection de l'utilisateur

      // Fermeture de la connexion à la base de données
      mysql_close();
      header("Location: mon-cv.php?Clef_Activation=$id_user");
      // Redirection de l'utilisateur
      // header("Location: mon-cv.php?ID_Utilisateur=$id_user");

      }

      }


      }

      }

      // Fermeture de la connexion à la base de données
      mysql_close();

      }

      }

      }

      ?>
      0
  2. djimson Messages postés 217 Statut Membre 3
     
    Bonjour, je reviens avec mon soucis espérant avoir une solution ce matin.
    Merci
    0
  3. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    :/ je m'y connais pas assez pour t'aider, désolé...
    0
    1. djimson Messages postés 217 Statut Membre 3
       
      Ok merci bien d'avoir essayé
      0
  4. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    salut,

    à tous les coups c'est que ta variable est pas encadrée d'apostrophes.

    vire les parenthèse autour de la définition de la requête et ajoute un dump_var() pour savoir à quoi ressemble ta requête et copie/colle nous le résultat, stp :
    $result ="SELECT * FROM Comptes_Utilisateurs WHERE Clef_Activation = $id_user;"; 
    $resultat = mysql_query($result);
    var_dump($result);
    $row = mysql_fetch_array($resultat) or die ("Erreur de connexion"); 

    PS : drôle d'idée de nommer ta variable $result alors que c'est une requête SQL.
    tu ferais mieux de la nommer $sql.
    0
    1. djimson Messages postés 217 Statut Membre 3
       
      Ok, je vous envoi le resultat de suite. Merci, je renomme $result par $sql, C'est une bonne remarque
      0
    2. djimson Messages postés 217 Statut Membre 3
       
      bool(false)
      Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/content/p/g/a/pgaliba/html/TOUTAOUAGA/emploi/Copie de inscription/mon-cv.php on line 21
      Erreur de connexion
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    heu doit y avoir une c***lle dans le potage…
    il peut pas te retourner false sur une chaîne !
    tu as bien :
    $sql ="SELECT * FROM Comptes_Utilisateurs WHERE Clef_Activation = $id_user;"; 
    var_dump($sql);
    $resultat = mysql_query($sql);
    $row = mysql_fetch_array($resultat) or die ("Erreur de connexion"); 
    0
    1. djimson Messages postés 217 Statut Membre 3
       
      0
      1. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923 > djimson Messages postés 217 Statut Membre
         
        je vois pas l'intérêt de crypter l'identifiant.
        tu mets le champ du mot de passe en "PASSWORD", le reste t'as pas besoin de le crypter.
        0
  7. djimson Messages postés 217 Statut Membre 3
     
    non
    J'avai oublié quelque chose:
    Voici l'erreur
    string(62) "SELECT * FROM Comptes_Utilisateurs WHERE Clef_Activation = 19;" Erreur de connexion
    0
    1. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
       
      fais un copier/coller de cette requête dans PHPMyAdmin et vois si il l'exécute sans problème.
      SELECT * FROM Comptes_Utilisateurs WHERE Clef_Activation = 19;
      0
      1. djimson Messages postés 217 Statut Membre 3 > Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Non, meme message : string(62) "SELECT * FROM Comptes_Utilisateurs WHERE Clef_Activation = 19;" Erreur de connexion

        Au fait, la requete marche quand je n'utilise pas Clef_Activation. En utilisant ID_Utilisateur, j'ai aucun probleme a part que je veux pas qu'on voit l'ID de la base. J'ai voulu la cryper avec MD5 mais j(y suis pas arrivé, c'est ce qui m'a améné a utilisé Clef_Activation
        0
  8. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    le type du champ "Clef_Activation" ce serait pas "string" par hasard ?

    essaie :
    $sql ="SELECT * FROM `Comptes_Utilisateurs` WHERE `Clef_Activation` = '$id_user';"; 

    si ça ne fonctionne pas, explique-nous ton histoire d'identifiant de md5() et compagnie, ça me parait pas clair !
    0
    1. djimson Messages postés 217 Statut Membre 3
       
      ok, ca me met erreur de connexion
      0
      1. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923 > djimson Messages postés 217 Statut Membre
         
        bon on arrête tout et on reprend le problème depuis le début, on avance à l'aveuglette, ça rime à rien !

        en premier faut savoir ce que tu veux faire et pourquoi tu veux as besoin de ce champ "clé d'activation".
        0
      2. djimson Messages postés 217 Statut Membre 3 > Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Ok, je veux crypter mon ID dans la base en utilisant ceci:

        <?
        if(isset($_COOKIE['ID_UTILISATEUR']))
        {
        $id_user = md5($_COOKIE['ID_UTILISATEUR']);

        // Connexion à la base de données

        mysql_connect("xxxxxxx", "xxxxx", "xxxxxx");
        mysql_select_db("xxxxxxx");


        // Sélection de l'utilisateur concerné
        $sql =("
        SELECT *
        FROM Comptes_Utilisateurs
        WHERE ID_Utilisateur =$id_user;
        ");

        $sql ="SELECT * FROM `Comptes_Utilisateurs` WHERE `Clef_Activation` = '$id_user';";
        $resultat = mysql_query($sql);
        $row = mysql_fetch_array($resultat) or die ("Erreur de connexion");


        // Fermeture de la connexion à la base de données
        mysql_close();
        ?>

        Es-ce possible?
        0
  9. legranddamas Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
     
    je pense ke le site du zero peu être la solution a tn problème.
    www.siteduzero.com
    0
  10. legranddamas Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
     
    bon si vous ne voulez pas allé sur le siteduzero exécuté ces codes
    <?php
    //connection a la base de donnée
    mysql_connect("localhost","root","");
    //selection de la base de donnée
    mysql_select_db("le_de_le_base_de_donnée");
    //tu peux effectuer les différentes requêtes now
    ?>
    0
    1. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
       
      il le fait déjà, le problème ne vient pas de là…

      lire la discussion avant de répondre, ça peut aider à comprendre le problème.
      0
      1. djimson Messages postés 217 Statut Membre 3 > Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Justement, mon problème ne reside pas à la connexion de la base.
        0
  11. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    on reprend en bas.

    oui c'est possible en théorie mais la première question c'est pourquoi coder cet identifiant (à priori ça ne sert à rien).
    (désolé d'insister mais mieux vaut se simplifier la vie pour éviter les bugs…)

    en plus si tu veux faire une requête en utilisant un identifiant crypté, faut qu'il soit déjà crypté dans la BDD, est-ce le cas ?
    0
    1. djimson Messages postés 217 Statut Membre 3
       
      Non il n'es pas crypté dans ma base. Au fait, j'ai constaté une grande faille et je voulais la corrigé en passant pas le cryptage.
      Exple: http://www.xxxxxxxx/xxxxxx/xxxxxxxxx/mon-cv.php?ID_Utilisateur=Y
      En remplacant Y par une valeur, on arrive a accéder aux données de l'utilisateur dont l'ID es Y.
      Dc je voulais y remedié en cryptant les ID_Utilistateur depuis la base si possible.

      Merci
      0
  12. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    on arrive a accéder aux données de l'utilisateur dont l'ID es Y.
    c'est ça qu'il faut corriger !

    revois ta gestion des sessions et empeche l'affichage des infos si le visiteur n'est pas authentifié ou si l'ID du visiteur authentifié est différent de l'ID demandé.
    0
    1. djimson Messages postés 217 Statut Membre 3
       
      ok, je viens de corrigé ca.
      Maintenant, je veux savoir comment crypter le champs ID_Utilisateur dans ma base pendant l'insertion de l'utilisateur ou directement dans la base(chose impossible parait-il avec mysql).
      Voila comment se passe l'inscription :
      Es-ce depuis la je peux crypté l'ID_Utilisateur comme on a crypté le mot de passe?
      Je précise que le scrypt ne vient pas de moi. J'essaye de l'adapter pour mon site
      <?

      // Redirige l'utilisateur s'il est déjà identifié
      if(isset($_COOKIE['ID_UTILISATEUR']))
      {
      $id_user = $_COOKIE['ID_UTILISATEUR'];
      // Redirection de l'utilisateur
      header("Location: index.php");
      }
      else
      {

      // Formulaire visible par défaut
      $masquer_formulaire = false;

      // Une fois le formulaire envoyé
      if(isset($_POST["BT_Envoyer"]))
      {

      // Vérification de la validité des champs
      if(!ereg("^[A-Za-z0-9_]{4,20}$", $_POST["TB_Nom_Utilisateur"]))
      {
      $message = "Votre nom d'utilisateur doit comporter entre 4 et 20 caractères<br />\n";
      $message .= "L'utilisation de l'underscore est autorisée";
      }
      elseif(!ereg("^[A-Za-z0-9]{4,}$", $_POST["TB_Mot_de_Passe"]))
      {
      $message = "Votre mot de passe doit comporter au moins 4 caractères";
      }
      elseif($_POST["TB_Mot_de_Passe"] != $_POST["TB_Confirmation_Mot_de_Passe"])
      {
      $message = "Votre mot de passe n'a pas été correctement confirmé";
      }
      elseif(!ereg("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$",
      $_POST["TB_Adresse_Email"]))
      {
      $message = "Votre adresse e-mail n'est pas valide";
      }
      else
      {

      // Connexion à la base de données
      // Valeurs à modifier selon vos paramètres configuration
      mysql_connect("xxxxxxxxx", "xxxxxxxxxxxxxxxx", "xxxxxxxxxxxx");
      mysql_select_db("xxxxxxxxxxxxxxxxxx");

      // Vérification de l'unicité du nom d'utilisateur et de l'adresse e-mail
      $result = mysql_query("
      SELECT Nom_Utilisateur
      , Adresse_Email
      FROM Comptes_Utilisateurs
      WHERE Nom_Utilisateur = '" . $_POST["TB_Nom_Utilisateur"] . "'
      OR Adresse_Email = '" . $_POST["TB_Adresse_Email"] . "'
      ");

      // Si une erreur survient
      if(!$result)
      {
      $message = "Erreur d'accès à la base de données lors de la vérification d'unicité";
      }
      else
      {

      // Si un enregistrement est trouvé
      if(mysql_num_rows($result) > 0)
      {

      while($row = mysql_fetch_array($result))
      {

      if($_POST["TB_Nom_Utilisateur"] == $row["Nom_Utilisateur"])
      {
      $message = "Le nom d'utilisateur " . $_POST["TB_Nom_Utilisateur"];
      $message .= "est déjà utilisé";
      }
      elseif($_POST["TB_Adresse_Email"] == $row["Adresse_Email"])
      {
      $message = "L'adresse e-mail " . $_POST["TB_Adresse_Email"];
      $message .= "est déjà utilisée";
      }

      }

      }
      else
      {

      // Génération de la clef d'activation
      $caracteres = array("a", "b", "c", "d", "e", "f", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
      $caracteres_aleatoires = array_rand($caracteres, 8);
      $clef_activation = "";

      foreach($caracteres_aleatoires as $i)
      {
      $clef_activation .= $caracteres[$i];
      }

      // Création du compte utilisateur
      $result = mysql_query("
      INSERT INTO Comptes_Utilisateurs(
      Nom_Utilisateur
      , Mot_de_Passe
      , Adresse_Email
      , Date_Inscription
      , Clef_Activation
      , civilite
      , nom
      , prenoms
      , journaiss
      , moisnaiss
      , annaiss
      , matrimoniale
      , enfant
      , nationalite
      , telfix
      , telport
      , adrpostale
      , secteur
      , nivetude
      , formation
      , specialite
      , experience
      , divers
      )
      VALUES(
      '" . $_POST["TB_Nom_Utilisateur"] . "'
      , '" . md5($_POST["TB_Mot_de_Passe"]) . "'
      , '" . $_POST["TB_Adresse_Email"] . "'
      , '" . time() . "'
      , '" . $clef_activation . "'
      , '" . $_POST["civilite"] . "'
      , '" . $_POST["nom"] . "'
      , '" . $_POST["prenoms"] . "'
      , '" . $_POST["journaiss"] . "'
      , '" . $_POST["moisnaiss"] . "'
      , '" . $_POST["annaiss"] . "'
      , '" . $_POST["matrimoniale"] . "'
      , '" . $_POST["enfant"] . "'
      , '" . $_POST["nationalite"] . "'
      , '" . $_POST["telfix"] . "'
      , '" . $_POST["telport"] . "'
      , '" . $_POST["adrpostale"] . "'
      , '" . $_POST["secteur"] . "'
      , '" . $_POST["nivetude"] . "'
      , '" . $_POST["formation"] . "'
      , '" . $_POST["specialite"] . "'
      , '" . $_POST["experience"] . "'
      , '" . $_POST["divers"] . "'
      )
      ");


      // Si une erreur survient
      if(!$result)
      {
      $message = "Erreur d'accès à la base de données lors de la création du compte utilisateur";
      }
      else
      {

      // Envoi du mail d'activation
      $sujet = "Activation de votre compte utilisateur";

      $message = "Pour valider votre inscription, afin de pouvoir vous connectez \n, merci de cliquer sur le lien suivant :\n";
      $message .= "http://" . $_SERVER["SERVER_NAME"];
      $message .= "/emploi/inscription/activer-compte-utilisateur.php?id=" . mysql_insert_id();
      $message .= "&clef=" . $clef_activation;

      // Si une erreur survient
      if(!@mail($_POST["TB_Adresse_Email"], $sujet, $message))
      {
      $message = "Une erreur est survenue lors de l'envoi du mail d'activation<br />\n";
      $message .= "Veuillez contacter l'administrateur afin d'activer votre compte";
      }
      else
      {

      // Message de confirmation
      $message = "Votre compte utilisateur a correctement été créer<br />\n";
      $message .= "Un email vient de vous être envoyer afin de l'activer";
      $message .= " Afin de pouvoir vous connecter sur notre cvthèque et dèy modifier votre CV, n'oubliez \n surtout pas de cliquer sur le lien d'activation qui vous a été envoyer. Merci pour \n votre fidélisation à TOUTAOUAGA";
      // On masque le formulaire
      $masquer_formulaire = true;

      }

      }

      }

      }

      }

      // Fermeture de la connexion à la base de données
      mysql_close();

      }

      }

      ?>
      Vraiment merci Dalida pour votre disponibilité.
      0
  13. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    si tu as corrigé ta faille de sécurité ça ne sert plus à rien de hacher l'identifiant !
    il faut le faire pour le mot de passe (dont tu définis le champ comme "PASSWORD" dans la BDD et que tu insères avec une requête qui utilises simple la fonction PASSWORD de SQL) mais pour l'identifiant ça ne sert strictement à rien.
    0