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 :

[PHP-JS] vérification si champ existe dans base de données mysql


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut [PHP-JS] vérification si champ existe dans base de données mysql
    Bonjour,

    Je suis en train de faire un formulaire et je voudrais vérifier si l'adresse email existe dans la base avant d'enregistrer. Voici le code de formulaire.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
    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
    <?php session_start();?>
    <script language="JavaScript">
    function verif_formulaire()
    if(document.form1.email.value == "") {
    	alert("Veuillez entrer votre email");
    	document.form1.email.focus();
    	return false;
    }
     
    	else {
    			validite('form1','email','EMAIL',0,30);
    			if (probleme == 1) {
    			document.form1.email.focus();
      			return false;
    			}
    	}
     
    function validite(form1,champ,format,mini,maxi) {
    probleme = 0;
    // ici normalement la fonction validite que je ne détaille pas
    // pour ne pas alourdir l'énoncé du problème !
    // En gros elle contient les expressions régulières
    // et affiche des alert s'il y a une erreur de saisie.
    // S'il y a une erreur elle définit la variable "probleme" à 1
     
    }
    </script>
     
    <?php	
    // connexion à la base
    $connexion = mysql_connect($host,$user,$pass)
       or die
     
    mysql_select_db("$bdd")
       or die
     
    // Récupération des champs
    if(isset($_POST['email'])) {
    $email = $_POST["email"] ;
    $_SESSION['email'] = $email;}
     
    // initialistation de la variable de test
    $test = 0;
     
    // Verification de l'existence ou non de l'email dans la base
    if(isset($_POST['email'])) {
    $resultat = mysql_query ("SELECT email FROM identification WHERE email ='$email'");
    $test = mysql_num_rows($resultat);
     
    // si l'email est libre pas dans la base on enregistre.
    // j'ai du rajouter (&& ($email != "") à la condition sinon 
    // ça m'enregistrait un enregistrement vide dans la base.
    // Ca fait sans doute partie du problème.
    if(($test==0) && ($email != ""))
    {
    // création de la requête SQL:
    $sql = "INSERT  INTO identification email VALUES '$email'";
     
    //exécution de la requête SQL:
    $requete = mysql_query($sql, $connexion) or die
     
    // si tout s'est bien passé j'appelle la page activation.php 
    // qui m'affiche un récapitulatif des données saisies.
    // Ca justifie la session tout en en haut du code
    // afin de récupérer les données
    include ("./activation.php");
     
    mysql_close();
    }
    }
    ?>
     
    </head>
    <body>
    <form action="formulaire.php" method="post" onSubmit="return verif_formulaire()" 
    name="form1" class="Style1" id="form1">
     
    <p class="Style2"><strong>Email</strong> <strong>valide</strong>
            <input name="email" type="text" size="30" maxlength="30" 
    <input type="submit" name="envoyer" id="envoyer" value="Créer votre profil" />
    Jusque là tout va bien ! Ca fonctionne, ça affiche les alertes, et ça enregistre dans la base.
    Je souhaiterais maintenant vérifier si l'adresse email saisie dans le formulaire existe dans la base avant d'enregistrer.
    Si elle n'existe pas je voudrais afficher une alert. Voici les instructions que je rajoute dans la fonction "verif_formulaire()" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    else	{
    // je passe ma variable php de test dans une variable javascript		
    			var essai= '<?php echo $test; ?>' ;
    // Si l'adresse existe dans la base
    				if (essai != 0)
    				{
    				alert('Cette adresse existe déjà');
    				document.form1.email.focus();
    				return false;	 
    				}
    		}
    Ce qui me donne le fichier formulaire.php suivant :
    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
    <?php session_start();?>
    <script language="JavaScript">
    function verif_formulaire()
    if(document.form1.email.value == "") {
    	alert("Veuillez entrer votre email");
    	document.form1.email.focus();
    	return false;
    }
     
    	else {
    			validite('form1','email','EMAIL',0,30);
    			if (probleme == 1) {
    			document.form1.email.focus();
      			return false;
    			 }
    // Les lignes ajoutées sont ici	
    			else	{
     
     
    			var essai= '<?php echo $test; ?>' ;
    				if (essai != 0)
    				{
    				alert('Cette adresse existe déjà');
    				document.form1.email.focus();
    				return false;	 
    				}
    			}
    // fin du rajout
    	}
     
    function validite(form1,champ,format,mini,maxi) {
    probleme = 0;
    // ici normalement la fonction validite que je ne détaille pas
    // pour ne pas alourdir l'énoncé du problème !
    // En gros elle contient les expressions régulières
    // et affiche des alert s'il y a une erreur de saisie.
    // S'il y a une erreur elle définit la variable "probleme" à 1
     
    }
    </script>
     
    <?php	
    // connexion à la base
    $connexion = mysql_connect($host,$user,$pass)
       or die
     
    mysql_select_db("$bdd")
       or die
     
    // Récupération des champs
    if(isset($_POST['email'])) {
    $email = $_POST["email"] ;
    $_SESSION['email'] = $email;}
     
    // initialistation de la variable de test
    $test = 0;
     
    // Verification de l'existence ou non de l'email dans la base
    if(isset($_POST['email'])) {
    $resultat = mysql_query ("SELECT email FROM identification WHERE email ='$email'");
    $test = mysql_num_rows($resultat);
     
    // si l'email est libre pas dans la base on enregistre. 
    // j'ai du rajouter (&& ($email != "") à la condition sinon 
    // ça m'enregistrait un enregistrement vide dans la base.
    // Ca fait sans doute partie du problème.
    if(($test==0) && ($email != ""))
    {
    // création de la requête SQL:
    $sql = "INSERT  INTO identification email VALUES '$email'";
     
    //exécution de la requête SQL:
    $requete = mysql_query($sql, $connexion) or die
     
    // si tout s'est bien passé j'appelle la page activation.php 
    // qui m'affiche un récapitulatif des données saisies.
    // Ca justifie la session tout en en haut du code
    // afin de récupérer les données
    include ("./activation.php");
     
    mysql_close();
    }
    }
    ?>
     
    </head>
    <body>
    <form action="formulaire.php" method="post" onSubmit="return verif_formulaire()" 
    name="form1" class="Style1" id="form1">
     
    <p class="Style2"><strong>Email</strong> <strong>valide</strong>
            <input name="email" type="text" size="30" maxlength="30" 
    <input type="submit" name="envoyer" id="envoyer" value="Créer votre profil" />
    Le problème c'est que dès que rajoute les lignes de conditions la fonction verif_formulaire() ne fonctionne plus. Si je valide un formulaire vierge ça ne me fait plus aucune vérification de saisie, ça ne m'affiche aucune alert, et évidemment ça ne m'affiche pas l'alert tant attendue : "Cette adresse existe déjà".
    Avant que je rajoute la condition ($email != "")) dans cette ligne : if(($test==0) && ($email != "")) ça m'enregistrait même un et un seul enregistrement "vierge" dans la base.

    Je voulais éviter l'ajax avec cette astuce car je suis débutant, mais pour l'instant ça ne fonctionne pas...

    Peut-être est ce impossible de faire la vérification de l'email dans la base de cette façon ? Si c'est impossible, et que quelqu'un peut m'ajouter les lignes d'ajax, qu'il n'hésite pas je suis preneur !

    Qu'en pensez-vous ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    PHP est interprété côté client et JS côté serveur. Pour ton problème tu peux recharger ta page :

    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
    // Verification de l'existence ou non de l'email dans la base
    if(isset($_POST['email'])) {
    $resultat = mysql_query ("SELECT email FROM identification WHERE email ='$email'");
    $test = mysql_num_rows($resultat);
     
    // si l'email est libre pas dans la base on enregistre. 
    // j'ai du rajouter (&& ($email != "") à la condition sinon 
    // ça m'enregistrait un enregistrement vide dans la base.
    // Ca fait sans doute partie du problème.
    if(($test==0) && ($email != ""))
    {
    ...
    }
    else {
    echo "l'emai existe déjà";
    }
    D'autre part, tous tes tests de sécurité doivent se faire côté serveur. Dans ton cas tu testes un regex en JS c'est bien, mais ça ne doit être qu'un test complémentaire du test en PHP. Le principe c'est d'obligatoirement sécuriser tes données sur le serveur (PHP) puis peut-être, de sécuriser les données avant l'envoi directement chez le client (JS). La raison en est qu'il est tout à fait possible d'envoyer des directement des données à un script serveur en passant outre les tests clients en JS.
    Vive les roues en pierre

Discussions similaires

  1. recherche dans base de donnée mysql
    Par alex01pernot dans le forum Bases de données
    Réponses: 13
    Dernier message: 03/05/2020, 15h50
  2. Réponses: 9
    Dernier message: 16/04/2010, 20h56
  3. Stocker mails imap dans base de données mysql
    Par energie13 dans le forum Langage
    Réponses: 2
    Dernier message: 20/01/2009, 14h52
  4. [MySQL] Caractères accentués dans base de données MySQL
    Par enfin dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/01/2007, 20h54
  5. [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

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