IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Clé manquante dans base de données


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Points : 15
    Points
    15
    Par défaut Clé manquante dans base de données
    Bonjour,

    Je suis en train d' effectuer la mise en place d'un mail de confirmation.Mon souhait est de générer une clé aléatoire à l' inscription et la rendre presente dans le lien mail afin de la comparer avec le pseudo.
    Pour ceci, j' ai crée ma table zebinfo_direct-emploi avec les champs cle (varchar32) - actif (int) et pseudo (varchar20).

    Tout fonctionne imppecable , pseudo k, mail avec clé ok sauf que la clé ne s'insert pas dans ma base.

    Merci pour votre aide

    Mon code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php require_once('Connections/zebinfo.php'); ?>
    <?php
    $dbh = new PDO('mysql:host=mysql1; dbname=zebinfo_direct-emploi','-----','------');
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
     
     
     
    <meta http-equiv="Content-type: text/html; charset=iso-8859-1\r\n" />
     
     
     
     
    <title>mail de confirmation</title>
    </head>
     
    <body>
    <?php
    // Récupération des variables nécessaires au mail de confirmation
    $email = $_POST['email'];
    $pseudo = $_POST['pseudo'];
    $prenom = $_POST['prenom'];
     
    $mot_de_passe = $_POST['mot_de_passe'];
     
    mysql_query("INSERT INTO membres_activation (pseudo) VALUES ('$pseudo')");
     
     
    // Génération aléatoire d'une clé
    $cle = md5(microtime(TRUE)*100000);
     
    // Insertion de la clé dans la base de données
    $stmt = $dbh->prepare("INSERT INTO membres_activation (cle) VALUES (:cle) WHERE pseudo like :pseudo ");
    $stmt->bindParam(':cle', $cle);
    $stmt->bindParam(':pseudo', $pseudo);
    $stmt->execute();
     
    // Préparation du mail contenant le lien d'activation
    ...............

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    "INSERT" sert uniquement à créer une nouvelle ligne

    dans ton cas tu veux modifier une ligne qui existe déjà donc c'est cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE membres_activation
    SET cle = :cle
    WHERE pseudo = :pseudo

    attention aussi au cas où il y a deux fois le même pseudo, ça peut créer des problèmes si tu n'en tiens pas compte

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par mathieu Voir le message
    "INSERT" sert uniquement à créer une nouvelle ligne

    dans ton cas tu veux modifier une ligne qui existe déjà donc c'est cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE membres_activation
    SET cle = :cle
    WHERE pseudo = :pseudo

    attention aussi au cas où il y a deux fois le même pseudo, ça peut créer des problèmes si tu n'en tiens pas compte

    Je ne veux pas modifier une ligne: je m' explique

    L' enregistré remplis un formulaire d' enregistrement, a la validation je bascule sur une page mail.php qui va me generer la cle rataché au champs d' actif et à son pseudo.
    Il faut bien que je crée une nouvelle ligne correspondant à cette enregistrement..
    Ensuite la validation du lien mail, je pourrait comparer la clé de la base avec celui du mail.

    Je m' étais peut être mal exprimé.

    Merci pour ton aide.


    Edit: autant pour moi.

    En effet, il etait pas prevu normalement que je fasse un insert initial avec le pseudo.A vrai dire j' ai plutot du mal à comprendre le WHERE dans la requète.

    En tout cas, merci pour ton aide, hyper sympa

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par zebu238 Voir le message
    En effet, il etait pas prevu normalement que je fasse un insert initial avec le pseudo.A vrai dire j' ai plutot du mal à comprendre le WHERE dans la requète.
    si tu veux créer une ligne avec toute les informations en une seule fois, c'est une requête de ce genre alors :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO membres_activation (pseudo, cle) 
    VALUES (:pseudo, :cle)

  5. #5
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Citation Envoyé par zebu238 Voir le message
    mysql_query("INSERT INTO membres_activation (pseudo) VALUES ('$pseudo')");

    $stmt = $dbh->prepare("INSERT INTO membres_activation (cle) VALUES (:cle) WHERE pseudo like :pseudo ");
    $stmt->bindParam(':cle', $cle);
    $stmt->bindParam(':pseudo', $pseudo);
    $stmt->execute();[/CODE]
    Bonjour,

    Pourquoi ce passage soudain d'un mysql_query à PDO ?
    Sinon, comme l'a dit mathieu, il faut que tu fasse ton insert en une seule fois, avec en même temps la clef et le pseudo de la personne.
    Sinon, le where est préférable sur des valeurs totalement unique, et plutôt numériques ( pour des raisons d'encodage, entre autre ), tu devrais donc peut être rajouter un champ id dans ta table, avec un auto_increment
    Sinon, vu que ta clef ne servira qu'une fois : pourquoi ne pas la rendre fonction du login et de l'ID de la personne ? comme ça, même pas besoin de la stocker dans la base.

    Bonne chance.
    LoveAngel :: Meow( );
    Personne ne remarque ce qui marche trop bien. Procrastination, Terry Pratchett

Discussions similaires

  1. stockage de photos dans base de données ou dans un répertoir
    Par papy_tergnier dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 08/12/2005, 16h22
  2. Réponses: 9
    Dernier message: 13/10/2005, 18h24
  3. [VB.NET]Champ image dans base de donnée access
    Par dankes dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/10/2005, 15h31
  4. [VB.NET] filtre dans base de donnée
    Par speedtug dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/09/2005, 17h12
  5. Réponses: 8
    Dernier message: 11/05/2005, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo