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 :

Envoi de mail de validation [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Points : 54
    Points
    54
    Par défaut Envoi de mail de validation
    Bonjour chers amis,
    à nouveau de retour pour un autre problème. Voilà j'ai un script d'enregistrement qui fonctionne parfaitement mais pour faire plus professionnel j'ai décidé d'y apporter une petite modification afin qu'un mail de validation soit transmis au nouvel inscrit mais c'est à partir de là que tout ce gâte. Plus d'insertion dans la base de données et aucun mail n'est transmis.
    Mon code d'enregistrement tout simple:

    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
     
     
    <?php
     
     
    //connexion à la base de donnée
    .........
    //
     
     
    //On vérifie que l'utilisateur a bien envoyé les informations demandées 
    if(isset($_POST["civilite"]) && isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["email"]) && isset($_POST["password"]) && isset($_POST["password2"]) && isset($_POST["phone"]) && isset($_POST["adresse"]) && isset($_POST["register_date"])){
        //On vérifie que password et password2 sont identiques
        if($_POST["password"] == $_POST["password2"]){
            //On utilise alors notre fonction password_hash :
            $hash = password_hash($_POST["password"], PASSWORD_DEFAULT);
            //Puis on stock le résultat dans la base de données :
            $query = $bdd->prepare('INSERT INTO membres (civilite, nom, prenom, email, password, phone, adresse, register_date) VALUES(:civilite, :nom, :prenom, :email, :password, :phone, :adresse, :register_date);');
            $query->bindParam(':civilite', $_POST["civilite"]);
            $query->bindParam(':nom', $_POST["nom"]);
            $query->bindParam(':prenom', $_POST["prenom"]);
            $query->bindParam(':email', $_POST["email"]);
            $query->bindParam(':password', $hash);
            $query->bindParam(':phone', $_POST["phone"]);
            $query->bindParam(':adresse', $_POST["adresse"]);
            $query->bindParam(':register_date', $_POST["register_date"]);
            $query->execute();
            header('Location: thank_you.html');
            exit();
        }
    }
     
     
    ?>

    Ensuite le script d'envoi de mail de validation que j'ai ajouté, au passage un grand merci à MathieuGut car ce script est de lui dans son tuto Création d'un mail de confirmation en PHP.

    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
     
     
    <?php
    //...
    // Votre code
    //...
    // Connexion à la base de données
    //...
    // Vérification des données saisies par l'utilisateur
    //...
    // Enregistrement des données dans la base
    //...
    // Récupération des variables nécessaires au mail de confirmation
    $email = $_POST['email'];
    $login = $_POST['login'];
    // Génération aléatoire d'une clé
    $cle = md5(microtime(TRUE)*100000);
    // Insertion de la clé dans la base de données (à adapter en INSERT si besoin)
    $stmt = $dbh->prepare("UPDATE membres SET cle=:cle WHERE login like :login");
    $stmt->bindParam(':cle', $cle);
    $stmt->bindParam(':login', $login);
    $stmt->execute();
    // Préparation du mail contenant le lien d'activation
    $destinataire = $email;
    $sujet = "Activer votre compte" ;
    $entete = "From: inscription@votresite.com" ;
    // Le lien d'activation est composé du login(log) et de la clé(cle)
    $message = 'Bienvenue sur VotreSite,
    Pour activer votre compte, veuillez cliquer sur le lien ci dessous
    ou copier/coller dans votre navigateur internet.
    http://votresite.com/activation.php?log='.urlencode($login).'&cle='.urlencode($cle).'
    ---------------
    Ceci est un mail automatique, Merci de ne pas y répondre.';
    mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
    //...
    // Fermeture de la connexion
    //...
    // Votre code
    //...

    Et voici les deux combinés, la page d'enregistrement entière:

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
     
     
    <?php
     
     
    //J'ouvre ma base de donnée
        $dbname= 'moaye_16bdd';
        $user = 'root';
        $password = '';
        $host = 'localhost';
     
    try {
        $bdd = new PDO('mysql:host='.$host .';dbname='.$dbname, $user, $password );
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $bdd->exec("SET CHARACTER SET utf8");
    } catch (PDOException $e) {
        echo "<p>Erreur : " . $e->getMessage() . "</p>";
        exit();
    }
     
     
    //On vérifie que l'utilisateur a bien envoyé les informations demandées 
    if(isset($_POST["civilite"]) && isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["email"]) && isset($_POST["password"]) && isset($_POST["password2"]) && isset($_POST["phone"]) && isset($_POST["adresse"]) && isset($_POST["register_date"])){
        //On vérifie que password et password2 sont identiques
        if($_POST["password"] == $_POST["password2"]){
            //On utilise alors notre fonction password_hash :
            $hash = password_hash($_POST["password"], PASSWORD_DEFAULT);
            //Puis on stock le résultat dans la base de données :
            $query = $bdd->prepare('INSERT INTO membres (civilite, nom, prenom, email, password, phone, adresse, register_date) VALUES(:civilite, :nom, :prenom, :email, :password, :phone, :adresse, :register_date);');
            $query->bindParam(':civilite', $_POST["civilite"]);
            $query->bindParam(':nom', $_POST["nom"]);
            $query->bindParam(':prenom', $_POST["prenom"]);
            $query->bindParam(':email', $_POST["email"]);
            $query->bindParam(':password', $hash);
            $query->bindParam(':phone', $_POST["phone"]);
            $query->bindParam(':adresse', $_POST["adresse"]);
            $query->bindParam(':register_date', $_POST["register_date"]);
            $query->execute();
     
     
     // Récupération des variables nécessaires au mail de confirmation   
    $email = $_POST['email'];
    $nom = $_POST['nom'];
     
    // Génération aléatoire d'une clé
    $cle = md5(microtime(TRUE)*100000);
     
     
    // Insertion de la clé dans la base de données (à adapter en INSERT si besoin)
    $query = $bdd->prepare("UPDATE membres SET cle=:cle WHERE email like :email");
    $query->bindParam(':cle', $cle);
    $query->bindParam(':nom', $nom);
    $query->execute();
     
     
    // Préparation du mail contenant le lien d'activation
    $destinataire = $nom;
    $sujet = "Confimer votre enregistrement" ;
    $entete = "From: inscription@votresite.com" ;
     
    // Le lien d'activation est composé de l email(email) et de la clé(cle)
    $message = 'Bienvenue sur MonSite,
     
    Pour activer votre compte, veuillez cliquer sur le lien ci dessous
    ou copier/coller dans votre navigateur internet.
     
    http://votresite.com/activation.php?log='.urlencode($nom).'&cle='.urlencode($cle).'
     
     
    ---------------
    Ceci est un mail automatique, Merci de ne pas y répondre.';
     
     
    mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
     
         header('Location: thank_you.html');
     
                exit();
        }
    }
    ?>
     
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Mon titre</title>
    <link href='http://fonts.googleapis.com/css?family=Bitter' rel='stylesheet' type='text/css'>
    <link href='layer.css' rel='stylesheet' type='text/css'>
     
     
    </head>
     
    <body>
     
    <div class="form-style-10">
    <h1>Inscrivez-vous<span>Et poursuivez le renseignement de votre dossier médical!</span></h1>
    <form method="post" action="register.php" enctype="">
        <div class="section"><span>1</span>Identité</div>
        <div class="inner-wrap">
     
        	<label>Civilité<select name="civilite" class="select-field" required/>
            <option value="nc"></option>
            <option value="M.">M.</option>
            <option value="Mme.">Mme.</option>
            <option value="Mlle.">Mlle.</option>
            </select></label>
            <label>Nom <input type="text" name="nom" required style="text-transform: uppercase;" /></label>
            <label>Prenom(s) <input type="text" name="prenom" required style="text-transform: uppercase;"/></label>
     
     
        </div>
     
        <div class="section"><span>2</span>Email &amp; Password</div>
        <div class="inner-wrap">
            <label>Addresse Email  <input type="email" name="email" required/></label>
            <label>Mot de passe <input type="password" name="password" required id="password" class="password"/></label>
            <label>Confirmer Mot de passe <input type="password" name="password2" required id="password2" class="password"/></label>
     
     
        </div>
     
        <div class="section"><span>3</span>Vos contacts</div>
            <div class="inner-wrap">
            <label>Téléphone  <input type="text" name="phone" required placeholder="00-00-00-00 / 00-00-00-00" /></label>
            <label>Adresse Postale <input type="text" name="adresse" required style="text-transform: uppercase;"/></label>
            <input type="hidden" name="register_date" value="<?php echo date('Y-m-d', strtotime(date('Y-m-d')));?>" />
        </div>
        <div class="button-section">
         <input type="submit" name="Sign Up" />
     
        </div>
    </form>
    </div>
     
    </body>
    </html>
    J'espère avoir été assez précis dans ma requête, au plaisir de vous lire très prochainement avec des solutions ou des conseils. Pour ma part je continue à chercher de mon côté. Milles merci

    Au fait j'ai failli oublier une chose importante, l'erreur que j'obtiens à la soumission du formulaire:

    Nom : error.PNG
Affichages : 162
Taille : 35,1 Ko

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    C'est parce que la colonne cle de la table membres ne doit pas être null et n'a pas de valeur par défaut, or que pendant l'insertion dans la table tu ne lui affectes pas de valeur.

    A+.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Points : 54
    Points
    54
    Par défaut
    Salut andry.aime,
    je m'excuse pour le retard à répondre. J'ai revu partiellement mon script et là j'ai bel et bien la clé qui s'insère dans la table et le champs actif avec toujours la valeur 0. C'est une avancée notable quant bien même je ne reçoive aucun mail de validation pour le moment mais j'y travaille toujours. et un autre hic, j'ai perdu le hash du champs password mais je vais y remédier.

    encore merci

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Points : 54
    Points
    54
    Par défaut
    Bonjour,
    j'ai enfin retablir le hash du password dans la base de données, la clé y est parfaitement enregistrée également et le champs actif toujours avec la valeur de 0 vu que le compte n'a pas encore été validé. C'est ce à quoi je vais m'atteler ce matin, je travaille en local.
    je vous tiens informer pour la suite, entre temps revoici mon code qui me donne partiellement satisfaction le temps que l'envoi de mail soit opérationnel.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
    <?php
     
     
    //connexion à la base de donnée
       .........................
    //
     
    //On vérifie que l'utilisateur a bien envoyé les informations demandées 
    if(isset($_POST["civilite"]) && isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["email"]) && isset($_POST["password"]) && isset($_POST["password2"]) && isset($_POST["phone"]) && isset($_POST["adresse"]) && isset($_POST["register_date"])){
    //On vérifie que password et password2 sont identiques
    if($_POST["password"] == $_POST["password2"]){
    //On utilise alors notre fonction password_hash :
    $hash = password_hash($_POST["password"], PASSWORD_DEFAULT);
     
    //generation de la clé
    $cle = md5(microtime(TRUE)*100000);
    //attribution de valeur au champs actif
    $actif = "0";
    //insertion des données dans la base de données
    //Puis on stock le résultat dans la base de données :
            $query = $bdd->prepare('INSERT INTO membres (civilite, nom, prenom, email, password, phone, adresse, register_date, cle, actif) VALUES(:civilite, :nom, :prenom, :email, :password, :phone, :adresse, :register_date, :cle, :actif);');
            $query->bindParam(':civilite', $_POST["civilite"]);
            $query->bindParam(':nom', $_POST["nom"]);
            $query->bindParam(':prenom', $_POST["prenom"]);
            $query->bindParam(':email', $_POST["email"]);
            $query->bindParam(':password', $hash);
            $query->bindParam(':phone', $_POST["phone"]);
            $query->bindParam(':adresse', $_POST["adresse"]);
            $query->bindParam(':register_date', $_POST["register_date"]);
            $query->bindParam(':cle', $cle);
            $query->bindParam(':actif', $actif);
            $query->execute();
     
     
    // Récupération des variables nécessaires au mail de confirmation
    $email = $_POST['email'];
    $nom = $_POST['nom'];
     
    // Préparation du mail contenant le lien d'activation
    $destinataire = $email;
    $sujet = "Activer votre compte" ;
    $entete = 'From: inscription@site.net' . "\r\n" .
        'Reply-To: inscription@site.net' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
     
    // Le lien d'activation est composé de l email(email) et de la clé(cle)
    $message = 'Bienvenue sur SITE,
     
    Pour activer votre compte, veuillez cliquer sur le lien ci dessous
    ou copier/coller dans votre navigateur internet.
    
    http://127.0.0.1/MOAYE/validation.php?nom='.urlencode($nom).'&cle='.urlencode($cle).' 
    
     
     
    ---------------
    Ceci est un mail automatique, Merci de ne pas y répondre.';
     
    $message = wordwrap($message, 70);
    mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
     
     
         header('Location: thank_you.html');
     
                exit();
        }
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2015, 17h21
  2. Réponses: 3
    Dernier message: 16/02/2007, 11h42
  3. Fenetre de validation sur l'envoi de mail depuis Excel
    Par pascal58 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/11/2006, 18h15
  4. Outlook ne se ferme pas après un envoi de mail
    Par Joke dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/06/2003, 17h32
  5. envoi de mail, protocol SMTP langage C
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 23/05/2003, 11h22

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