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 :

Vérifier que l'utilisateur et l'email n'est pas prise [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut Vérifier que l'utilisateur et l'email n'est pas prise
    Bonsoir,

    Voilà je sèche un peu,
    J'aimerai bien que si la personne entre un nom d'utilisateur et une émail déjà utilisée, que php indique à coté de chacun des champs à l'utilisateur que nom d'utilisateur et l'email est déjà prise.

    J'ai fais le test en ne prenant en compte que le nom et ça marche très bien, mais je ne vois pas comment faire en tenant compte en plus de l'émail.


    Voici mes codes:
    La partie index.php contenant le formulaire,
    Je n'ai ici repris que le code jQuery ainsi que la requète AJAX
    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
     
    $(function(){
    	$("#formid").submit(function(){
    				nom1 = $(this).find("input[name=nom]").val();
    				email1 = $(this).find("input[name=email]").val();
    				$.post("test.php",{nom : nom1, email : email1}, function(data){
    					if(data == '1'){
    						$("#nomID").next("#erreur").empty().append().text("Le nom est déja utilisé");
    					}
    					else{
    						$("#nomID").next("#erreur").hide();
    					}
     
    				});
    				return false;
    			});
    		});
     
    <!--Le FORMULAIRE-->
    <form method="post" action="#" id="formid">
    Nom : <input type="text" name="nom" id="nomID" /><span id="erreur"></span><br />
    email : <input type="text" name="email" id="email"/><span id="erreur"></span><br />
    <input type="submit" value="Envoyer" />
    </form>
    Et le fichier test.php qui contient la requète SQL :
    Ici la requête va envoyer un nombre si il est > 0 : Alors l'utilisateur existe.
    J'ai essayé de faire une autre requête dans la même logique pour l'email mais ça marche pas.
    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
     
    <?php
     
    function redirige($url)
    {
       die('<meta http-equiv="refresh" content="0;URL='.$url.'">');
    }
     
    	if(!isset($_POST) && empty($_POST['nom']) && empty($_POST['email'])){
    		redirige('index.php');
    	}
    	else{
    		extract($_POST);
     
    		include "connect.php";
    		$sql = $DB->query("SELECT COUNT(nom) AS '$nom' FROM info WHERE nom = '$nom'");
    		$nb = $sql->fetchColumn();
     
    		if($nb > 0){
    			echo '1';
    		}
    	}
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Montre nous ce que tu avais fait.

    Au passage, $_POST est toujours défini.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Sur le principe je me demande si c'est une bonne idée car cela pourrait aussi permettre de trouver des adresses email valides...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Je suis d'accord pour le principe des adresses émail valides.
    Mais je suis obligé : 2 utilisateurs différents ne peuvent pas s'inscrire avec 2 emails identiques !!

    @sabotage Vous avez là le code essentiel, le reste n'à pas beaucoup d'importance il s'agit des balises html head rien de spécial...

    Je veux simplement savoir comment indiqué à l'utilisateur que :
    - Son nom est déjà pris => ça, ça marche !
    - Son email est déjà pris => J'ai essayé de faire un deuxième requête mais ça ne marche pas et ça ralenti tout.
    - Son émail et son nom d'utilisateur est déjà pris et l'indiqué dans la page index à coté des champs respectifs. Un peu comme quand on s'inscrit sur un forum et que l'on rentre un nom d'utilisateur ET/OU une émail et qu'il nous indique qu'il(elle) est déjà pris(e)

    J'espère avoir été assez clair...


    Bonne journée

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu fais la meme chose en remplacant "nom" par "email" ; je ne vois pas ce qui te bloque.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ok je vais réessayer...
    Mais dans le cas ou le nom d'utilisateur ET l'email sont déjà pris
    Je fais comment ?

    C'est ça mon problème...

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Points : 348
    Points
    348
    Par défaut
    Tu fais la meme chose en remplacant "nom" par "email"
    Puis tu modifie ton js afin de gérer l'affichage pour l'email.
    Pensez à la balise [CODE].
    Aucune réponse aux questions par MP.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Le problème c'est que tu ne nous dis pas à quel endroit tu bloque...

    Si c'est pour le retour de la requête ajax tu peux faire envoyer par exemple 1 si le login est déjà pris, 2 si le mail est déjà pris et 3 si les deux sont pris.
    Et en fonction du retour tu fais afficher les erreurs correspondantes.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Oui voilà ABCIWEB,

    C'est exactement ce que je recherche...
    Alors à ce moment là je devrais faire plusieurs requètes SQL vers le serveur.

    La question que je me pose c'est quelle requète formuler pour savoir que le nom d'utilisateur ET L'adresse mail est déjà prise...

    J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(nom,email) AS '$nom','$email' WHERE nom='$nom' AND email='$email'
    Mais cela ne marche pas..

    Je suis débutant en SQL donc je pose peut-être une bête question mais comprenez-moi.

    Merci à tous

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Ce n'est pas très loin :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT COUNT(*) AS total
    FROM info
    WHERE nom = '$nom'
    AND email = '$email'
    Mais apparemment tu utiliserais PDO, du coup, faire une requête préparée serait largement mieux (voir indispensable pour le coté sécurité) :
    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
     
    $nom = $_POST['nom'];
    $email = $_POST['email'];
    //
    $sth = $dbh->prepare('SELECT COUNT(*) AS total
    FROM info
    WHERE nom = :nom
    AND email = :email');
    $sth->bindValue(':nom', $nom, PDO::PARAM_STR);
    $sth->bindValue(':email', $email, PDO::PARAM_STR);
    $sth->execute();
    $info = $sth->fetch();
    //
    if ((int)$info['total'] > 0) {
        // Identification correcte
        ... etc ...
    }
    else {
        // Erreur : Aucune personne correspondante
        ... etc ...
    }
    Petite parenthèse au passage.
    Si tu compte faire cette vérification uniquement via Ajax, et bien il faut bien avoir en tête que l'Ajax c'est avant tout du Javascript.
    Et bien un utilisateur quelque peu mal intentionné aura aucun mal à détecter ça, et il lui suffit de désactiver coté navigateur JS, et aucune vérification sera faite.
    Donc quelque part, ça oblige de refaire la même vérif après validation du formulaire.
    C'est alors à ce demander si le faire en Ajax vaut le coup.


    Autre parenthèse.
    Les redirections par meta/refresh, ça fait des années maintenant qu'on ne cesse de dire que c'est largement dépassé, franchement inutile vu que Php permet de faire ça de manière bien plus optimisée et simple.
    Fonction header()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: url_de_la_page.php');
    exit();
    Le seul point à respecter, c'est qu'il ne faut pas envoyer de contenu (pas de echo, ni de Html, même pas un espace/saut de ligne) avant d'appeler cette fonction.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Remarque que tu pourrais aussi ne faire qu'une requête à la place de trois (si 'ai bien compris ton problème).
    Par exemple :

    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
    $pseudo = $_POST['peudo'];
    $mail = $_POST['mail'];
     
    $SQL = "SELECT pseudo, mail FROM membres WHERE pseudo = '".mysql_real_escape_string($pseudo)."' OR mail = '".mysql_real_escape_string($mail)."'";
     
    $Result = mysql_query($SQL);
     
    $pseudo_nb = null;
    $mail_nb = null;
     
    while ($assoc = mysql_fetch_assoc($Result))
    {
    if ($assoc['pseudo'] ==  $pseudo) $pseudo_nb++;
    if ($assoc['mail'] ==  $mail) $mail_nb++;
    }
     
    $retour = 0;
     
    if (isset($pseudo_nb)) $retour = 1;
    if (isset($mail_nb)) $retour = 2;
    if (isset($pseudo_nb,$mail_nb)) $retour = 3;
     
    echo $retour;
     
    // 0 si rien n'est utilisé
    // 1 si pseudo est utilisé
    // 2 si mail est utilisé
    // 3 si pseudo et mail sont utilisés

  12. #12
    Invité
    Invité(e)
    Par défaut
    Salut,

    Merci beaucoup RunCodePhp et ABCIWEB,
    C'est vraiment les réponses que j'attendais

    Quand à ce que tu disais RunCodePhp c'est vrai qu'au niveau sécurité c'est pas le top. Je vais donc aussi faire une vérification au niveau du php...


    Merci encore les gars.


    Et A+

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je viens de tester les bouts de code et ça fonctionne nickel

    Encore merci...

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

Discussions similaires

  1. [AC-2003] Vérifier que le résultat d'une requête (n')est (pas) vide
    Par pedrus16 dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/06/2009, 15h34
  2. Réponses: 3
    Dernier message: 11/12/2008, 14h37
  3. Réponses: 2
    Dernier message: 11/11/2007, 16h49
  4. vérifier que l'utilisateur entre bien une heure
    Par youp_db dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2006, 11h15
  5. vérifier que l'utilisateur entre bien un nombre
    Par youp_db dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/11/2006, 10h10

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