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

Langage PHP Discussion :

Vérifier les données avant de les insérer


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Vérifier les données avant de les insérer
    Bonjour,

    Je suis en train de mettre en place un système de newsletter avec vérification lors de l'inscription. Donc, shéma habituel: l'utilisateur donne son adresse, il reçoit un email de confirmation avec un lien sur lequel il doit cliquer (ce lien contient une clé de vérification).
    Tout marche bien lorsque je fais les vérifications (format de l'adresse correct, pas de champ vide, pas 2 fois la même adresse dans la BDD), mais quand je passe à l'étape suivante (insertion dans la BDD) voilà mon soucis:

    Si l'utilisateur entre 2 fois la même adresse la clé de confirmation est mise à jour dans la BDD! Hors, moi je voudrai que la clé ne bouge pas, et que rien ne se passe dans la BDD si on entre 2 fois la même adresse. Me comprenez-vous?
    Un code vaudra mieux que tous les discours, voici ce que j'utilise:

    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
    // Récupération des variables nécessaires au mail de confirmation	
    $email = $_POST['email'];
     
    $verifemail = mysql_query("SELECT email FROM membres WHERE email='$email'") or die(mysql_error());
    // Expression régulière permettant de vérifier si le format d'une adresse e-mail est correct */
    $regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';   
     
     
    //vérifications du formulaire
     
    // On vérifie si l'email n'est pas déjà enregistré
     
    if (mysql_num_rows($verifemail) != 0)
    {
        echo 'This email: <b>'.$email.'</b> is already subscribed to our list!';
    }
    // L'adresse n'est pas vide
    elseif (empty($email))
    {  
     
     	echo ('<div class=\"block\"><span class=\"headline\">OOPS! you made a little mistake...</span>
                <div class=\"blocktext\">
     
    				<p>Please, enter your email address below in order to subscribe to our newsletter:<br/>
    				<form id="myForm" name="email" method="post" action="http://patati.com/newsletter/" >
    				<input type="text" name="email" />
    				<input type="submit" name="ok" value="ok" />
    				</form><br/>
    				<b>this is a required field.</b>
    				</p>
    				</div></div>');
    } 
     
    // On vérifie que le format de l'e-mail est correct  
     
    elseif (!preg_match($regex_mail, $email))
    {  
     
      echo ('<div class=\"block\"><span class=\"headline\">OOPS! you made a little mistake...</span>
                <div class=\"blocktext\">
     
    			<p>This email:'.$email.' is not valid.</p><br/>
     
    				<p>Please, enter your email address below in order to subscribe to our newsletter:</p>
    				<form id="myForm" name="email" method="post" action="http://patati.com/newsletter/" >
    				<input type="text" name="email" />
    				<input type="submit" name="ok" value="ok" />
    				</form>
     
    				</div></div> '); 
     
    }
     
    elseif(mysql_num_rows($verifemail) == 0 )
    {
    //création de la requête SQL:
    $sql = "INSERT  INTO membres (email) VALUES ( '$email') " ;
     
    //exécution de la requête SQL:
    $requete = mysql_query($sql) or die( mysql_error() ) ;
     
    }
     
    //affichage des résultats, pour savoir si l'insertion a marchée:
     
    if($requete)
    {
     
        echo("<div class=\"block\"><span class=\"headline\">Almost Finished...</span>
                <div class=\"blocktext\">	
    			<p>To complete the subscription process check your email and click the link we just sent you.<br>
                      OTHERWISE YOU WILL NOT BE SUBSCRIBED<br>
                      Thanks !</p>
    				  </div>
    				  </div>") ;
    }
     
     
     
    // Connexion à la base de données
    $dbh = new PDO('mysql:host=123456;dbname=database', 'login', 'mdp');
     
     
    // Récupération des variables nécessaires au mail de confirmation	
    $email = $_POST['email'];
     
     
    // 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 email like :email");
    $stmt->bindParam(':cle', $cle);
    $stmt->bindParam(':email', $email);
    $stmt->execute();
     
     
     
    // Préparation du mail contenant le lien d'activation
    $destinataire = $email;
    $sujet = " Please confirm subscription";
    $expediteur="contact@moi.com";
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From: "Moi"<'.$expediteur.'>'."\n"; 
     
     
     
    // Le lien d'activation est composé de l'email(email) et de la clé(cle)
    $message = ' 
     
     
    		<p><a href="http://patati.com/validation.php?email='.urlencode($email).'&cle='.urlencode($cle).'">Click here to confirm your subscription to our list.</a></p>';
     
     
    mail($destinataire, $sujet, $message, $headers) ; // Envoi du mail
     
     
    ?>
    Voilà. Donc je voudrais que Si et seulement Si toutes les conditions sont remplies, alors on insère ce qu'il faut dans la BDD et on envoie l'email de confirmation....

    Merci bien de votre aide précieuse!

  2. #2
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Je dis peut-être une bêtise,
    mais
    si tu englobes
    l'écriture dans la BD et
    l'envoi du mail
    dans le bloc if (requete) {},
    ça ne résoud pas le problème ?
    Fred

  3. #3
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    je mettrais plutot un

    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
    if(rqt !=0)
    {
     faire ....
    }
    else
    {
    ta série de test avec éventuellement un indicateur dans chaque condition, qui bien entendu serais initialiser en début de page
     
    }
     
    if(indicateur == 0)
    {
     ok
    }
    else
    {
     nok, affichage message d'erreur
    }

  4. #4
    Invité
    Invité(e)
    Par défaut
    En fait, je ne comprends pas bien le code que tu me proposes Vil'coyote...
    Qu'entends-tu par:

    Et de quel genre d'indicateur parles-tu?


    et justement dans la même veine, je travaille sur la désinscription, et je rencontre un autre problème. Lorsque je veux supprimer une adresse de la base, j'ai le message d'erreur qui me dit que mon compte est inactif (car le champ "actif" est égal à 0). Hors, il m'affiche ça même quand ce n'est pas le cas.

    Voilà mon bout de 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
    if((mysql_num_rows($verifemail) != 0) && ($actif == 1 ))
    {
    //création de la requête SQL:
    $sql = "DELETE FROM membres WHERE email='$email'" ;
     
    //exécution de la requête SQL:
    $requete = mysql_query($sql) or die( mysql_error() ) ;
     
     
     
    //affichage des résultats, pour savoir si l'insertion a marchée:
     
    if($requete)
    {
     
        echo 'Unsubscribe successful
                You have been removed from the list.You will receive one final email to confirm that we unsubscribed you.' ;
     
    }
     
     
    // Préparation du mail 
    .......
     
    // Envoi du mail
    mail($destinataire, $sujet, $message, $headers) ; 
    }
    Alors que celui qui s'affiche quand le compte est inactif est celui-là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ($actif== 0)
    {  
     
     	echo 'OOPS! you made a little mistake...
    Your account is inactive
    		<form id="myForm" name="email" method="post" action="http://tatai.com" >
    		<input type="text" name="email" />
    		<input type="submit" name="ok" value="ok" />
    		</form>';
     
    }

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/11/2013, 07h56
  2. sécuriser ses données avant de les ajouter..
    Par italiasky dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 09/02/2007, 23h42
  3. Compresser les données avant insertion ?
    Par GregPeck dans le forum Outils
    Réponses: 2
    Dernier message: 07/08/2006, 16h09
  4. [VBA-A] INSERT INTO en vérifiant les données avant !!
    Par Rumeurs dans le forum VBA Access
    Réponses: 9
    Dernier message: 12/04/2006, 14h07
  5. Réponses: 4
    Dernier message: 18/08/2003, 09h53

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