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 :

Requête pour vérifier le nombre de personnes [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut Requête pour vérifier le nombre de personnes

    je fais une requête pour compter le nombre de personnes d'un même nom dans une table.
    Voici mon code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $nom = "'test'";
    $req ="SELECT *, COUNT(DISTINCT Nom) AS nb
    			  FROM maTable WHERE Nom = $nom";
    		$res = mysql_query($req);
    		$row = mysql_fetch_array($res);
    		if($row['nb']>=1) {
    			echo "plusieurs noms";			
    		}
    		else echo " ca marche pas";
    J'ai fait un echo de ma requête, et normalement, elle devrait fonctionner :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT *, COUNT(DISTINCT Nom) AS nb FROM maTable WHERE Nom = 'test'
    Et pourtant, la boucle passe toujours dans le else, alors que j'ai ajouté plusieurs noms test dans la table.

    D'où vient le problème?


  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Tu cherches à faire quoi avec ta requête parce qu'elle n'a pas l'air très logique

    ça, ça devrais passer mais devrais renvoyer toujours la valeur 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req ="SELECT COUNT(DISTINCT Nom) AS nb
    			  FROM maTable WHERE Nom = '$nom'";
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Question bête : T'es sensé récupérer quoi dans $row['nbSoc'] ?

    sinon un simple SELECT COUNT(*) AS nb FROM table WHERE nom="truc" devrait suffire pour ce que tu veux faire.
    Pourfendeur de singletons en croisade

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Avec ta requête SQL tu comptes le nombre de nom différents et égaux à $noms.

    "Combien de noms différents sont égaux à Bob ?"

    Réponse : 1, ben... Bob.


    Donc, tu veux sans doute faire la requête qui vient d'être donnée.
    Most Valued Pas mvp

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Désolé, j'ai oublié une parenthèse après le count distinct.
    Je vais essayer celle proposée.
    Ce que je récupère, avec $row['nb'] (et pas nbSoc), c'est le nombre de noms identiques présents (la valeur de nb ).

    Merci, je vais tester vos propositions.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    J'ai fait comme Seb33300 l'a proposé :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $nom = $_POST['nom'];
    $req ="SELECT COUNT(DISTINCT Nom) AS nb
    	FROM maTable WHERE Nom = '$nom'";
    echo $req;
    $res = mysql_query($req);
    $row = mysql_fetch_array($res);
    if($row['nb']==1) {
    	echo "nom déjà présent";			
    }
    else echo "nom valide";
    Et l'echo de ma requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(DISTINCT Nom) AS nb FROM maTable WHERE Nom = 'test'
    Le résultat affiché est nom valide, alors que la table contient déjà un nom test !
    Le problème vient surement de la construction de mon if, non?


  7. #7
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Si tu veux compter le nombre de noms identiques il faut enlever le DISTINCT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req ="SELECT COUNT(Nom) AS nb
    	FROM maTable WHERE Nom = '$nom'";
    Et du coup il faudra passer le if en >=

    Et qu'est ce que tu veux dire par "Le résultat n'est pas valide ?"
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    C'est ton "Distinct" le problème.

    C'est pas pour rien que je te disais de récupérer la requête écrite par Petibidon.
    Most Valued Pas mvp

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    J'ai suivi la requête de Petibidon, mais là encore, ça ne fonctionne pas

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (isset($_POST['nom']) && $_POST['nom']!='') {
    	$nom = $_POST['nom'];
    	$req ="SELECT COUNT(*) AS nb FROM table WHERE Nom='$nom'";
    	echo $req;
    	$res = mysql_query($req);
    	$row = mysql_fetch_array($res);
    	if($row['nb']==1) {
    		echo "meme societe";			
    	}
    }
    Le problème vient-il du if?

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (isset($_POST['nom']) && $_POST['nom']!='') {
    	$nom = $_POST['nom'];
    	$req ="SELECT COUNT(*) AS nb FROM table WHERE Nom='$nom'";
    	$res = mysql_query($req);
    	$row = mysql_fetch_array($res);
    	echo 'Il y a '.$row['nb'].' enregistrements pour lesquels nom vaut "'.$nom.'"<br/>';
    }
    Après il faudrait que tu nous dises ce que tu veux tester dans ce fameux if...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    En fait, le if teste si on a bien envoyé le nom, à partir du formulaire en méthode post.
    Le formulaire sert à ajouter des données dans la table, si le nom existe déjà, on ne l'ajoute pas et on affiche un message d'erreur.

    Mais là vraiment je sèche, je ne vois pas où est le problème.

    J'ai testé vos codes, ça devrait fonctionner pourtant!
    J'ai bien vérifié que $_POST['nom'] était au bon format, fait un echo de la requête qui donne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(*) AS nb FROM table WHERE Nom='test'

    Et j'ai aussi vérifié que test est bien présent dans la base.

    Vraiment, je comprends pas là...

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    TABLE c'est le nom de ta table ?
    Pourfendeur de singletons en croisade

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    non, j'ai mis table pour l'exemple, elle s'appelle societe dans ma bdd
    Sinon, l'erreur viendrait de là!

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Et si tu rajoutais un echo mysql_error() ou mysql_errno() ça pourrait peut-être donner une piste si il y a vraiment une erreur ?

    Un truc qui me chiffonne aussi, les apostrophes sont valides comme délimiteur en SQL ?
    Pourfendeur de singletons en croisade

  15. #15
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    Perso, j'aurais composé de la sorte, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $sql = "SELECT count(DISTINCT Nom) FROM maTable WHERE Nom = '$nom'";
     
            $val= mysql_fetch_array(mysql_query($sql));
            $nbre = $val[0];
     
            if($nbre==0)
            {
            echo "Il y a $nbre Noms";
            }
    	elseif($nbre>=0)
            { 
            echo "Il y a $nbre Noms";
            }
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    J'ai fait un echo avec mysql_error(), mais ca n'affiche rien car la requête marche. Il me semble que mysql accepte les simple quote ( ' ) comme délimiteur sql. (j'ai fait partout comme ça ailleurs et ca fonctionne).

    Le souci est au niveau de la récupération du résultat de la requête, vu qu'il trouve à chaque fois 0 enregistrement même si il y a plusieurs noms identiques dans la base.

  17. #17
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    As-tu essayé ma suggestion précédente ?
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Merci alain31tl, ton code fonctionne!

    Topic

  19. #19
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par floctc Voir le message
    Merci alain31tl, ton code fonctionne!

    Topic
    Tant mieux !
    Mais ça marchera mieux si tu cliques sur le bouton
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Voila, c'est fait

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

Discussions similaires

  1. [MySQL] Requête pour vérifier base de donné Mysql en php
    Par srab2pac dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/06/2008, 09h48
  2. Requête pour calculer le nombre de ligne
    Par salsero1 dans le forum SQL
    Réponses: 1
    Dernier message: 25/04/2008, 12h05
  3. Requête pour vérifier juste l'existence
    Par ptit.homm dans le forum DB2
    Réponses: 13
    Dernier message: 15/02/2008, 09h53
  4. [8.5]Problème pour calculer le nombre des personnes d'une liste
    Par Gotch59 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 21/06/2007, 09h47
  5. [LDAP] Requête pour vérifier le login et mot de passe
    Par NiGHtyWolf dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/03/2007, 22h44

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