Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vérifier si le pseudo n'est pas dans la table déjà

    26 novembre 2005 à 16:06:38

    Bonjour,

    Je suis en train de concevoir un script d'inscription, et j'aimerais savoir comment faire pour vérifier si la variable $_POST['pseudo'] (venant du formulaire) n'est pas égale à une variable déjà présente dans une table de la bdd.
    Voici déjà le début de mon code :


    $reponse = mysql_query("SELECT pseudo FROM bi_membres"); // Requête SQL


            // On fait une boucle pour lister tout ce que contient la table :

            while ($donnees = mysql_fetch_array($reponse) )
            {
                    $donnees['pseudo']=' . $pseudo_sql . '; //on change le nom des variables. On met _sql en suffixe, pour ne pas tout melanger

            }

    // Après je sais pas comment faire pour comparer la variable du formulaire et vérifier si elle n'est pas égale à aucune des entrées du champ pseudo de la table des memebres.


    Merci de m'aider !
    :D
    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2005 à 16:07:54

      SELECT COUNT is your friend. :)
      • Partager sur Facebook
      • Partager sur Twitter
        26 novembre 2005 à 16:08:48

        mais select count permet de compter le nombre d'entrées non ??
        Pas de comparer si une variable précise est égale à une entrée...
        • Partager sur Facebook
        • Partager sur Twitter
          26 novembre 2005 à 16:10:24

          Tu teste juste si le pseudo existe dans la table.
          <?php
          $req = mysql_query("SELECT `pseudo` FROM `membres` WHERE `pseudo` = '" . $_POST['pseudo'] . "';");
          if( mysql_num_rows($req) > 0 ){
          // Instructions à faire en cas d'existence du pseudo dans bdd
          }
          else {
          //Si ca existe pas.
          }
          ?>
          • Partager sur Facebook
          • Partager sur Twitter
          Mon profil Github - Zeste de Savoir, pour la beauté du zeste
            26 novembre 2005 à 16:14:28

            Citation : ramses9167

            mais select count permet de compter le nombre d'entrées non ??
            Pas de comparer si une variable précise est égale à une entrée...


            Et bien, où est le problème? Il suffit de compter si le pseudo entré renvoit 1, et si il renvoit 1, le pseudo est déjà pris.
            Talus > Utilise SELECT COUNT plutôt que mysql_num_rows, c'est plus rapide.
            • Partager sur Facebook
            • Partager sur Twitter
              26 novembre 2005 à 16:17:44

              999888 > Certes, mais comme tout bon programmeur est une feignasse de premier ordre, c'est soulant d'ecrire une ligne de plus pour enregistrer le resultat de la variable :p
              • Partager sur Facebook
              • Partager sur Twitter
              Mon profil Github - Zeste de Savoir, pour la beauté du zeste
                26 novembre 2005 à 16:20:47

                Citation : Talus

                999888 > Certes, mais comme tout bon programmeur est une feignasse de premier ordre, c'est soulant d'ecrire une ligne de plus pour enregistrer le resultat de la variable :p


                Ca ne sort en aucun cas une ligne de plus, avec un mysql_result c'est tout aussi court.
                Et puis :

                Citation : Talus

                Programmer, c'est une chose. Bien Programmer, c'en est une autre.


                :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  26 novembre 2005 à 16:20:49

                  donc, on fait un select count avec where pseudo du formulaire=pseudo sql. Si le renvoi est 1 ou plus, on réaffiche le formulaire avec l'erreur ?

                  Merci de votre aide les zéros ! :):D^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 novembre 2005 à 16:22:29

                    Citation : ramses9167

                    donc, on fait un select count avec where pseudo du formulaire=pseudo sql. Si le renvoi est 1 ou plus, on réaffiche le formulaire avec l'erreur ?

                    Merci de votre aide les zéros ! :):D^^


                    Oui c'est ça, sauf que c'est WHERE pseudo SQL = pseudo du formulaire, enfin bon je suppose que c'est ce que tu voulasi dire. ;)
                    Mais bon, logiquement ça ne peut pas renvoyer plus de 1, puisque tu veux justement empêcher qu'il y ait plus d'un pseudo...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 novembre 2005 à 16:37:45

                      999888 > Tu aimes ma citation, j'me trompe ? Oui, vrai que l'on peut le mettre dans un seul mysql_result. Mais c'est lourd comme écriture :p (rq : j'utilise souvent cette syntaxe)
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Mon profil Github - Zeste de Savoir, pour la beauté du zeste
                        26 novembre 2005 à 16:39:52

                        <?php
                        $sql = 'SELECT COUNT(*) > 0 FROM table WHERE pseudo = "'.$pseudo.'"';
                        $res = mysql_query($sql);

                        if(mysql_result($res,0))
                        {
                        // déjà un pseudo
                        }
                        else
                        {
                        // pas déjà de pseudo
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 novembre 2005 à 16:42:15

                          Re-Plop,

                          winzou, faut pas eviter les * comme selections dans une bdd ? trop lent :p (surtout pour choisir UN champ dans la bdd)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Mon profil Github - Zeste de Savoir, pour la beauté du zeste
                            26 novembre 2005 à 16:43:37

                            nan mais la ya un count hein :D C'est pas du tout pareil :D
                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 novembre 2005 à 16:44:37

                              Même :p (oui je suis un chieur)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Mon profil Github - Zeste de Savoir, pour la beauté du zeste
                                26 novembre 2005 à 16:45:11

                                Citation : winzou

                                <?php
                                $sql = 'SELECT COUNT(*) > 0 FROM table WHERE pseudo = "'.$pseudo.'"';
                                $res = mysql_query($sql);

                                if(mysql_result($res,0))
                                {
                                // déjà un pseudo
                                }
                                else
                                {
                                // pas déjà de pseudo
                                }

                                C'est plus rapide comme ça qu'avec le > 0 dans la condition où ça se vaut?

                                Citation : winzou

                                nan mais la ya un count hein :D C'est pas du tout pareil :D


                                Donc, dans un COUNT, mieux vaut mettre un * qu'un nom de champ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 novembre 2005 à 16:48:26

                                  999888 > En fait, si le count affiche + d'un enregistrement (donc pas null), alors le resultat de mysql_result retroune TRUE? Sinon, bah comme la requete retourne un NULL, alors mysql_result retourne FALSE. Je ne l'explique pas très bien, j'avoue, mais bon.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Mon profil Github - Zeste de Savoir, pour la beauté du zeste
                                    26 novembre 2005 à 16:58:12

                                    Mais Count(*) et * n'ont rien à voir hein :D

                                    COUNT(*) -> il compte le nombre de ligne dans la table, très rapide !
                                    COUNT(col) -> il compte le nombre de ligne dans la table, mais seulement les lignes où la colonne "col" n'est pas NULL. C'est donc pas mal plus lent.

                                    le > 0 dans la requete, ca lui permet d'être très très rapide dans certain cas :
                                    - soit il a un index sur la colonne pseudo, et il sait à peu près combien de ligne il a, et il sait si c'est supérieur ou non à 0, et alors il retourne direct true ou false (1 ou 0 en fait), sans même regarder dans la table ! (vu qu'on demande pas le nombre exact)
                                    - soit il a pas d'index et il va parcourir la table. Sauf qu'il s'arrete dès qu'il trouve une ligne, donc c'est pas mal plus rapide en cas de grosse table.

                                    Ensuite, le mysql_result ne retourne pas true ou false, mais 0 ou 1 (car les true de mysql == 1, et false == 0). Et comme php ne fait pas la différence entre 0 et false, ni 1 ou true, bah on peut mettre directement

                                    if(mysql_result())
                                    au lieu de
                                    if(mysql_result() == 1)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 novembre 2005 à 16:59:55

                                      Ok, merci pour ces éclaircissements. :)
                                      Ha tiens aussi, tant qu'on parle d'index, j'aimerais bien des informations à ce sujet :
                                      _Quand mettre un champ en index?
                                      _Quand mettre un champ en primaire?
                                      _Quand mettre un champ en unique?
                                      Parce que je vois ces boutons dans phpMyAdmon mais bon, à part les cours de m@teo qui disent de faire comme ça et puis point barre, j'en sais pas beaucoup plus...
                                      Merci d'avance. (J'en profite parce que je vois que tu t'y connais. :p )
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        26 novembre 2005 à 17:29:55

                                        winzou > Ah, merci pour ces infos :) (et c'est aussi ce que j'entendais par true & false)
                                        999888 > Un peu que winzou s'y connait ; il était dans la cave :D
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Mon profil Github - Zeste de Savoir, pour la beauté du zeste
                                          26 novembre 2005 à 17:47:52

                                          On met une colonne en primaire quand la colonne identifie la ligne. Par exemple, un id est une très bonne clef primaire, car tu es sur qu'il n'y en a pas deux pareil dans une table. Il vaut mieux que cette colonne primaire soit numérique, pour accélérer les perf ;)

                                          On met une colonne en index lorsque tu fais beaucoup de where dessus. Par exemple dans un forum, tu fais beaucoup de requete sur la table des post ou tu met WHERE topic_id = 5. Il faut donc mettre topic_id en index, ca accélère énormément les requetes.

                                          Une coloone unique, c'est un index avec une information en plus : comme la primaire, il n'y a pas 2 lignes qui peuvent avoir la même valeur. C'est donc un peu plus rapide car mysql sait que quand il aura trouvé une ligne, il n'y en a pas d'autre.

                                          La différence entre primaire et unique ? Il ne peut y avoir qu'une seule primaire, c'est la plus importante. Alors que tu peux mettre plusieurs unique.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            26 novembre 2005 à 18:37:33

                                            Citation : winzou

                                            On met une colonne en primaire quand la colonne identifie la ligne. Par exemple, un id est une très bonne clef primaire, car tu es sur qu'il n'y en a pas deux pareil dans une table. Il vaut mieux que cette colonne primaire soit numérique, pour accélérer les perf ;)

                                            On met une colonne en index lorsque tu fais beaucoup de where dessus. Par exemple dans un forum, tu fais beaucoup de requete sur la table des post ou tu met WHERE topic_id = 5. Il faut donc mettre topic_id en index, ca accélère énormément les requetes.

                                            Une coloone unique, c'est un index avec une information en plus : comme la primaire, il n'y a pas 2 lignes qui peuvent avoir la même valeur. C'est donc un peu plus rapide car mysql sait que quand il aura trouvé une ligne, il n'y en a pas d'autre.

                                            La différence entre primaire et unique ? Il ne peut y avoir qu'une seule primaire, c'est la plus importante. Alors que tu peux mettre plusieurs unique.


                                            D'accord, merci énormément, et dernière question bête : Pourquoi ne pas mettre tous les champs en index?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              27 novembre 2005 à 12:16:06

                                              Parce que les index ca prend de la place, et ca ralenti les insertion / mise à jour.

                                              Et si tu as trop d'index, mysql aura aussi du mal à choisir lequel utiliser (il peut pas en utiliser 36 en même temps). Il essaie de choisir celui qui sera le plus restrictif (cad qui renverra le moins de ligne, le plus précis quoi), mais si t'en as partout, ca lui prendra du temps de faire cette étape. Et si il voit que ca lui prend trop de temps, il fini par en utiliser un au hasard (ou presque :p).
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Vérifier si le pseudo n'est pas dans la table déjà

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown