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 :

Problème : Vérifier un doublon [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é
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut Problème : Vérifier un doublon
    Bonjour après wxpython je me lance dans MySQL, cependant j'ai un peu de mal à débuter, j'essaie de créer un système de login/motdepasse, il fonctionne et enregistre bien les valeurs dans la BDD mais je voudrais que l'on ne puisse pas mettre 2 fois le même login, j'ai bien essayé une méthode mais cela ne fonctionne pas, si quelqu'un peut me venir en aide ça serait gentil

    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
     
    <form action="loginmdp.php" method="get">
    Nom d'utilisateur : <input type="text" name="login" value="" id="0"  /> <p>
    Mot de passe : <input type="password" name="mdp1" value="" id="1"  /> <p>
    Répéter mot de passe : <input type="password" name="mdp2" value="" id="2"  /><p>
    <input type="submit" value="valider" />
     
    <?php
    if (isset($_GET['login']) and isset($_GET['mdp1']) and isset($_GET['mdp2']))
    {
    	$login = $_GET['login'];
    	$mdp1 = $_GET['mdp1'];
    	$mdp2 = $_GET['mdp2'];
    	if (($login != "") and ($mdp1 != "") and ($mdp2 == $mdp1))
    	{
    		try
    		{
    		// On se connecte à MySQL
    		$connect = mysql_connect('localhost','user','mdp');
    		$bd = mysql_select_db('mabdd');
    		}
    		catch(Exception $e)
    		{
    		// En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
    		}
    //Début de la méthode qui ne fonctionne pas
    		$i=0;
    		$tableau = array();
    		$req_tableau = mysql_query("SELECT * FROM `loginmdp`");
    		while (mysql_fetch_array($req_tableau)){
    		echo $tableau[$i];
    		$i++;}
    		if (in_array($login, $tableau)) {
    		echo 'Ce login existe deja';
    		} 
    		else {
    		$enr_loginmdp = mysql_query("INSERT INTO loginmdp (login,mdp) VALUES ('".$login."','".$mdp1."')",$connect);
    		}
    		}
    //Fin de la méthode qui ne fonctionne pas
    		else
    		{
    		echo 'Veuillez entrer les identifiants';
    		}
    	}
    ?>

  2. #2
    Membre éclairé Avatar de jp_rennes
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Par défaut un peu compliqué
    Il me semblerais plus simple de faire une requête du style (en supposant que la colonne contenant le login se nomme "login")
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select  * FROM loginmdp where login=$login
    il te suffit ensuite de compter le nombre de réponses avec la fonction php mysql_num_rows
    Ou autre solution un peu plus "bourine" serait de créer ta table avec la colonne login déclarée comme clé primaire (primary key)
    Ensuite tu fais un insert : si le login existe déjà l'insertion sera rejetée!!

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    Euh je suis vraiment débutant, pourrais tu m'eclairer un peu plus, je comprends l'idée mais pas comment le coder =S

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    mouais. bon puisque tu passes par PHP

    En détail ça donne un index "unique" sur la colonne des logins. Apres tu as deux 2 solutions.
    1. soit tu gères les exceptions
    2. soit tu les anticipes


    Dans la premiere solution tu envoies la commande INSERT INTO ... et si le mysql_query echoue (test du code de retour) tu regardes le code d'erreur mysql , tu lances une exception adapté et tu engueules ton visiteur parce que le login n'est pas libre.
    j'ai pas compris la relation entre l'entier fourni par le driveur Mysql et les codes fournis par la doc, alors je t'offre ceux-la.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                case 1048: // can not be null
                case 1062: // duplicate key
                case 1452: // foreign key constaint
    En fait tu peux tres bien ne pas faire d'exception mais je trouve ça plus propre de gérer les cas ou ça va mal par des exceptions.

    Soit tu fais une selection dans la base avec dans ton WHERE login = :login comme on te l'a déjà suggérer.

    Si tu veux faire serieux faut faire un ptit coup d'ajax pour révenir que le login est déjà pris, mais ne nous embalons pas.


    pour le bout de script présenté

    ton erreur est là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (mysql_fetch_array($req_tableau)){
    		echo $tableau[$i];
    relis la doc, le reste me semble aléatoire. Je te conseille mysql_fetch_assoc(), à la longue on y gagne en temps de débug.

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    L'unicité des valeurs dans une colonne est une contrainte propre aux données, indépendamment de toute application.
    Il est évident que dans ces exemple, chaque utilisateur s'identifiant par son login, celui-ci doit être unique.

    Il faut donc poser une contrainte d'unicité sur la colonne login à la création de la table, ou plus tard par un ALTER TABLE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE utilisateur
    ADD UNIQUE (login)
    Si l'utilisateur se coisit un login déjà existant, c'est le SGBD qui retournera une erreur que le programme utilisateur est chargé d'interpréter et de traduire en clair pour l'utilisateur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    J'ai tenté de faire comme ceci pour voir si ça m'affichait tous les logins enregistrés dans la colonne login de la bdd, mais ça ne marche pas, je ne comprends pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $req_verif = mysql_query("SELECT * FROM loginmdp WHERE login=$login");
    		while ($verif = $req_verif){ 
    		echo $verif;}

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/10/2008, 06h53
  2. Probléme avec les doublons
    Par albatof dans le forum SQLite
    Réponses: 2
    Dernier message: 16/06/2008, 16h40
  3. [Problème] Suppression de doublons pour grep
    Par maloute80 dans le forum Langage
    Réponses: 12
    Dernier message: 20/12/2007, 09h54
  4. Division relationnelle : problème avec les doublons
    Par ced dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/12/2007, 16h49
  5. Vérifier les doublons dans un fichier texte
    Par Shyboy dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2007, 09h34

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