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érification de doublons dans une table [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Par défaut Vérification de doublons dans une table
    Salut

    Je ne m'en sors pas avec un script d'insertion de données ou plus précisément avec la vérification de la présence de doublons, donc si vous avez 2 petites minutes n'hésitez pas !

    Voici le script qui est chargé d'insérer des données dans une table si l'email n'est pas déjà présent dans cette table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql="select * from tusers where email_use=".$email;
    echo $sql."<hr>";
    $res=mysql_query($sql) or die(mysql_error());
    if(mysql_num_rows($res)<1){
    $req = "INSERT INTO tusers (nom_use, prenom_use, email_use, login_use, pass_use, niveau_use) VALUES('$nom', '$prenom', '$email', '$login', '$pass', '2')";
    mysql_query($req) or die(mysql_error()) ;
    }else{echo "Utilisateur déjà existant";}
    J'obtiens une erreur :
    select * from tusers where email_use=zaza.dfdfdd@neuf.fr
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@neuf.fr' at line 1
    Quelqu'un voit d'où ça pourrait venir ? A priori c'est avec le @neuf.fr, le champs 'email_use' est de type varchar(40), interclassement : latin1_general_ci

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Salut,

    pour commencer, utilise la balise "code", ça rend mieux :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql="select * from tusers where email_use=".$email;
    echo $sql."<hr>";
    $res=mysql_query($sql) or die(mysql_error());
    if(mysql_num_rows($res)<1){
      $req = "INSERT INTO tusers (nom_use, prenom_use, email_use, login_use, pass_use, niveau_use) VALUES('$nom', '$prenom', '$email', '$login', '$pass', '2')";
      mysql_query($req) or die(mysql_error()) ;
    } else {
      echo "Utilisateur déjà existant";
    }


    Ensuite, je pense que l'erreur vient du fait que tu insères ta chaîne sans les quotes autour.

    À mon avis, cette requête fonctionnera mieux :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM tusers WHERE email_use = 'zaza.dfdfdd@neuf.fr'

    Attention, en PHP, il faut penser aux caractères d'échappement :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM tusers WHERE email_use = \'" . $email . "\'";

  3. #3
    Membre éclairé Avatar de guigouz
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 84
    Par défaut
    Voila ce que je préconnise afin de repérer l'erreur :
    - essaye de mettre des quotes autour de l'adresse mail car c'est une chaîne de caractères
    - le cas échéant : essaye de taper cette requête dans phpMyAdmin tu auras plus de facilité à trouver la bonne syntaxe
    - pour ce qui est des doublons, il me semble que tu peux faire une contrainte d'unicité sur le champs qui t'interesse. Tu n'as plus qu'à faire ton insert et de voir si MySQL te renvoie une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `tusers` ADD UNIQUE ( `email_use` );
    J'espère avoir répondu à ta question...
    Bonsoir

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Par défaut
    Merci à tous les deux !

    Ca venait bien des quotes !

    Une question supplémentaire, j'abuse :

    J'aurais voulu faire un contrôle sur trois champs au lieu de le faire uniquement sur l'email et de générer un message d'erreur différent en fonction du champs concerné.

    Je m'explique : Trois champs email_use, login_use, pass_use

    Si l'email est déjà présent dans la base, on obtient : L'email existe déjà
    Si login_use est déjà présent dans la base : Le login est déjà utilisé
    Si pass_use est déjà présent dans la base : Le mot de passe est déjà utilisé

    Actuellement donc mon code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql="select * from tusers where email_use='".$email."'"; 
    $res=mysql_query($sql) or die(mysql_error());
    if(mysql_num_rows($res)<1){
    $req = "INSERT INTO tusers (nom_use, prenom_use, email_use, login_use, pass_use, niveau_use) VALUES('$nom', '$prenom', '$email', '$login', '$pass', '2')";
    mysql_query($req) or die(mysql_error()) ; 
    } else {
      echo "Utilisateur déjà existant";
    }

    Comment vous verriez ça ? (pas forcément le code complet mais une petite indication sur la méthode)

    Merci

  5. #5
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Pourquoi un mot de passe unique par membre. Le mot de passe n'est pas un identifiant mais un élément de contrôle et chacun devrait être libre de choisir le sien comme il veut.

    De plus le mot de passe est secret, aucune information ne devrait filtrer jusqu'à un utilisateur du script. Savoir que le mot de passe existe déjà lui donne un renseignement important. Tu vas envoyer les pirates directement au nirvana avec ça.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Par défaut
    Merci

    Ah oui vu comme ça c'est plus clair.

    Donc tu laisserais le contrôle uniquement sur l'adresse email pour reconnaître qu'un user existe déjà ?

    Merci

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Un login unique serait aussi nécessaire ! Donc pour récaputuler :
    • adresse mail ;
    • login.
    Après, je ne sais pas s'il faut le faire en une requête (une seule exécution mais qui ramèneras "trop" d'infos, je crois que c'est ce que tu veux faire) ou en deux requêtes (deux exécutions mais analyse plus simple... c'est ce qu'il me semnble).

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

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Vérification de donné dans une table access
    Par xdiethank dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2006, 15h29
  3. Suppression de doublons dans une table partionnée
    Par ludmillaj dans le forum Oracle
    Réponses: 10
    Dernier message: 27/12/2005, 14h34
  4. Eliminer des Doublon dans une Table
    Par Soulama dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/02/2005, 14h27
  5. [access]doublons dans une table en access !
    Par hackerandco dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/06/2004, 14h45

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