Eviter doublons dans une base de donnee

Résolu
billboy -  
 angelusflm -
Bonjour,

je créé un formulaire avec un ajout de pseudo. Mon problème est le suivant: si un je saisi un pseudo déjà présent dans la bbd, il s'enregistre quand même. Pourriez-vous m'indiquer comment résoudre ce petit souci?

merci.
Configuration: Windows XP
Firefox 2.0.0.14

18 réponses

  1. mindslight Messages postés 87 Statut Membre 12
     
    function user_exists($login)
    {
    $sql = 'SELECT `id`
    FROM `ma table`
    WHERE `login` = \'' . addslashes($login) . '\'
    LIMIT 1';
    $res = mysql_query($sql) or die (mysql_error());
    return (mysql_num_rows($res) == 1);
    }
    3
  2. angelusflm
     
    Dans la même mesure, j'aimerai vérifier que mon champs "date" n'est pas déjà dans la base sinon ca retourne une erreur mais pas seulement. J'aimerai en plus effectuer une modification dans la base, si la personne conforme qu'elle souhaite écraser le contenu précédent.

    Je suis pour le moment que sur la partie "vérification" du champs qui ne fonctionne pas bien sur :p. Je vous joints mon code qui est un peut plus complexe que le précédent puisque j'ai une boucle "for" qui me permet d'ajouter autant d'entré que d'utilisateurs. En gras le code de vérification

    <?php
    if(isset($_POST['valider']))
    {
    
    $indice = $_POST['numIndice'];
    $valider = $_POST['valider'];
    $date = $_POST['date'];
    
    function user_exists($date)
    {
    $sql = 'SELECT date FROM presence WHERE date = \'' . addslashes($date) . '\' LIMIT 1';
    $res = mysql_query($sql) or die (mysql_error());
    return (mysql_num_rows($res) == 1);
    }
    
    
    if(empty($_POST["date"]))
    {
    echo "Attention un des champs n'est pas correctement remplit.<a href='accueil.php'>Verifier</a>.";
    }
    
    
    else
    {
    if (user_exists($date))
    {
    echo('date deja enregistrer!<br />');
    }
    else
    { 
    
    
    if ( $indice > 0 ) {
    
    for ( $i=0; $i < $indice; $i++ )
    {
    
    $nservice=$_POST['nservice'.$i];
    $agent=$_POST['agent'.$i];
    $nchrono=$_POST['nchrono'.$i];
    $etat=$_POST['etat'.$i];
    $login=$_POST['login'.$i];
    
    $requete ="INSERT INTO presence (id,nservice,date,agent,nchrono,etat,login) values ('','$nservice','$date','$agent','$nchrono','$etat','$login')";
    
    mysql_query($requete);
    
    }
    
    mysql_close();
    echo "La date &agrave; bien &eacute;t&eacute; prise en charge pour les ".$indice." agent";
    
    }
    
    }
    else
    echo "Merci de bien remplir le formulaire";
    ?>
    
     vous pouvez retourner au <a href="accueil.php">menu principal</a>
    1
  3. Remad Messages postés 1694 Statut Membre 720
     
    Met le tuple "pseudo" en clef primaire, sa devrait éviter les doublons
    0
  4. mindslight Messages postés 87 Statut Membre 12
     
    Bonjour,

    le plus simple est de faire une premiere requette afin de verifier
    si l'utilisateur n'existe pas deja.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. vlmath Messages postés 833 Statut Contributeur 160
     
    Salut,

    Il te suffit de mettre ton champs pseudo comme clé primaire (primery key), et les doublons sur cette clef sont interdit.

    @Bientôt
    0
  7. billboy
     
    je ne peut pa metre le pseudo en en cle primaire car je possede un ID.

    mindslight, pourais tu m'indiquer quel requette pourai m'aider? merci
    0
  8. mindslight Messages postés 87 Statut Membre 12
     
    re,

    tu peux aussi utiliser des clefs primaires composites.
    0
  9. mindslight Messages postés 87 Statut Membre 12
     
    quel sont les champs de ta table et le nom de ta table sql ?
    0
  10. billboy
     
    je suis novice en ph peut tu m'expliquer ce que c'est une cle primaire composite sil te plait?? merci
    0
  11. billboy
     
    ma table:
    id
    nom
    prenom
    adress
    pseudo
    login
    0
  12. mindslight Messages postés 87 Statut Membre 12
     
    une clef primaire composite est une clef generer sur plusieurs champs,
    mais je pense que de faire une pre-requette est plus simple
    0
  13. mindslight Messages postés 87 Statut Membre 12
     
    merci,

    je redige ta requette tout de suite...
    0
  14. billboy
     
    voici mon code :

    <?
    include ('config.php');
    $login=$_POST['login'];
    $mdp=$_POST['mdp'];

    if(empty($_POST["login"])||empty($_POST["mdp"]))
    {
    echo "Atention un des champs n'est pas correctement remplit.<a href='adminlogin.php'>Verifier</a>.";
    }

    else
    {
    $req=" INSERT INTO jean (login, mdp) values ('$login','$mdp')";
    mysql_query($req);
    mysql_query($query);
    include("enregistrement.php");
    }
    ?>

    pourais tu m'indiquer ou je dois mettre la fonction que tu m'a proposer?merci
    0
  15. mindslight Messages postés 87 Statut Membre 12
     
    <?php
    include ('config.php');
    $login=$_POST['login'];
    $mdp=$_POST['mdp'];

    function user_exists($login)
    {
    $sql = 'SELECT `id`
    FROM `ma table`
    WHERE `login` = \'' . addslashes($login) . '\'
    LIMIT 1';
    $res = mysql_query($sql) or die (mysql_error());
    return (mysql_num_rows($res) == 1);
    }

    if(empty($_POST["login"])||empty($_POST["mdp"]))
    {
    echo "Atention un des champs n'est pas correctement remplit.<a href='adminlogin.php'>Verifier</a>.";
    }

    else
    {
    if (user_exists($login))
    {
    echo('utilisateur deja enregistrer!<br />');
    }
    else
    {
    $req=" INSERT INTO jean (login, mdp) values ('$login','$mdp')";
    mysql_query($req) or die(mysql_error());
    }
    include("enregistrement.php");
    }
    ?>
    0
  16. mindslight Messages postés 87 Statut Membre 12
     
    petite remarque pour ameliorer ton code:

    - utilise plus de fonction.
    - toujours utiliser mysql_query($req) or die(mysql_error());
    - protege t'es requette contre les vilains hacker ;-) avec des addslashes() comme dans ma fonction
    0