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 :

Mon SELECT COUNT me renvoie toujours 1 [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut Mon SELECT COUNT me renvoie toujours 1
    Bonjour,

    Petit problème...quoiqu'il arrive mon Select Count me renvois 1...même quand ma table est vide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $nombre=mysql_query("SELECT COUNT(email) FROM profiles WHERE email='$email'") or die ("<h1>erreur insert ".mysql_error()."</h1>");
        $nombre=mysql_num_rows($nombre);
    	print $nombre;
     
    	if($nombre<0) //---Si il n'existe pas, alors on ajoute---//
    	{
    	 mysql_query("INSERT INTO profiles (email) VALUES ('$email') ") or die ("<h1>erreur insert ".mysql_error()."</h1>");
    	 print ("<h1>insertion réalisée !</h1><br>"); //---OK ajout effectué---//
    	}
    	else print ("<h1>Email déjà existant !</h1><br>"); //---Email déjà existant---//
    Si quelqu'un peut m'aider...
    while(1)printf("BUG");

  2. #2
    Invité
    Invité(e)
    Par défaut
    peux-tu afficher ta requête sur ta page et voir si la condition est bien respectée?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "SELECT email FROM profiles WHERE email='".$email."'";

  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Non je pense qu'il faut enlever les simples quotes, moi j'aurai écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "SELECT email FROM profiles WHERE email=$email;
    Au passage,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "SELECT email FROM profiles WHERE email='".$email."'";
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "SELECT COUNT(email) FROM profiles WHERE email='$email'"
    sont identiques
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    essaie de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $nombre=mysql_query("SELECT COUNT(email) as nbr_email FROM profiles WHERE email='$email'") or die ("<h1>erreur insert ".mysql_error()."</h1>");
        $nombre=mysql_fetch_object($nombre);
    	//print $nombre;
    	
    	if($nombre->nbr_email==0) //---Si il n'existe pas, alors on ajoute---//
    	{
    	 mysql_query("INSERT INTO profiles (email) VALUES ('$email') ") or die ("<h1>erreur insert ".mysql_error()."</h1>");
    	 print ("<h1>insertion réalisée !</h1><br>"); //---OK ajout effectué---//
    	}
    	else print ("<h1>Email déjà existant !</h1><br>"); //---Email déjà existant---//

  5. #5
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Buchs => Si tu enlèves les quotes la requête ne marchera pas (car je suppose que le champ mail est une chaîne de caractères...).
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  6. #6
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par JWhite
    Buchs => Si tu enlèves les quotes la requête ne marchera pas (car je suppose que le champ mail est une chaîne de caractères...).
    Ben je sais pas, il a pas préciser ou chaine de caractere et si c'est un int, les 2 manières de l'écrire fonctionne
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    avec une variable qui s'appelle $email on s'imagine bien que c'est une chaine de caractère

  8. #8
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par buchs
    Ben je sais pas, il a pas préciser ou chaine de caractere et si c'est un int, les 2 manières de l'écrire fonctionne
    Arf oui tu as raison dans ma tête un mail c'est du texte mais en fait c'est peut-être l'id du mail (ça serait plus logique mais le nom du champ est pas très bien choisi alors). Dsl
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  9. #9
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Merci de vos nombreuses réponses

    Ma requête donne ceci (j'ai corriger en concaténé de façon plus propre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nombre=mysql_query(" SELECT COUNT(email) FROM profiles WHERE email='".$email."'") or die ("<h1>erreur insert ".mysql_error()."</h1>");
    A l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(email) FROM profiles WHERE email='XxX@hotmail.com'
    Donc c'est Ok pour moi...

    mais il me renvoit tjrs 1...que j'ai 30 000 email identique ou non...

    J'ai tenter en mettant le AS NBRE et faire le test sur NBRE mais le résultat est le même...

    J'en suis donc là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $nombre=mysql_query(" SELECT COUNT(email) FROM profiles WHERE email='".$email."'") or die ("<h1>erreur insert ".mysql_error()."</h1>");
        $nombre=mysql_num_rows($nombre);
    	print $nombre;   	
    	if($nombre<=0) //---Si il n'existe pas, alors on ajoute---//
    	{
    	 mysql_query("INSERT INTO profiles (email) VALUES ('$email') ") or die ("<h1>erreur insert ".mysql_error()."</h1>");
    	 print ("<h1>insertion réalisée !</h1><br>"); //---OK ajout effectué---//
    	}
    	else print ("<h1>Email déjà existant !</h1><br>"); //---Email déjà existant---//
    Où est ce que j'aurais pu me tromper ?
    while(1)printf("BUG");

  10. #10
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par JWhite
    Arf oui tu as raison dans ma tête un mail c'est du texte mais en fait c'est peut-être l'id du mail (ça serait plus logique mais le nom du champ est pas très bien choisi alors). Dsl
    Non c'est moi qui m'excuse, j'avais pas fait attention au nom de la variable, sinon j'aurai pas réagis comme ça

    Donc ton comptage te rend toujours UN maintenant?
    Essai d'afficher ta requete sur une page web, tu verra ce que ta BDD recois comme ça
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    ben je dit pas que ce que tu fait est faux mais moi j'y trouve bizzare car tu fait un select count puis un mysql_num_rows de çà

    select count compte le nombre de résultat retourné donc un (int)
    et mysql_num_rows te retourne le nombre de ligne que le résultat contient.

    peut tu afficher le code si tu l'a fait à ma maniere ?

  12. #12
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par maximenet
    ben je dit pas que ce que tu fait est faux mais moi j'y trouve bizzare car tu fait un select count puis un mysql_num_rows de çà

    select count compte le nombre de résultat retourné donc un (int)
    et mysql_num_rows te retourne le nombre de ligne que le résultat contient.

    peut tu afficher le code si tu l'a fait à ma maniere ?
    Ben ouai forcement, select count(email) ne renvoi qu'une seule colonne, celle de COUNT et pas d'autre, donc si tu les comptes, c'est logique qu'il te renvoi toujours un !
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  13. #13
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    A mon avis ton erreur vient de là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre=mysql_num_rows($nombre);
    Car tu comptes le nombre de lignes renvoyées, or si je ne dis pas de bêtises ta requête va te renvoyer 1 ligne avec le nombre d'occurences de ton email trouvé !!!

    Pour corriger déjà en 1er lieu donne une valeur à ton count --> count(email) as nb_emails

    ensuite teste la valeur du champ nb_emails retourné

    EDIT : grilled par les autres au dessus
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  14. #14
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Merci de vos réponse...

    Ca marche finalement... j'avais fais une petite erreur au vu de l'exemple proposé par maximenet.

    Voici la solution si cela peut aider quelqu'un à l'avenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        $nombre=mysql_query(" SELECT COUNT(email) as NBRE  FROM profiles WHERE email='".$email."'") or die ("<h1>erreur insert ".mysql_error()."</h1>");
        $nombre=mysql_fetch_object($nombre);
     
    	if($nombre->NBRE<=0) //---Si il n'existe pas, alors on ajoute---//
    	{
    	 mysql_query("INSERT INTO profiles (email) VALUES ('$email') ") or die ("<h1>erreur insert ".mysql_error()."</h1>");
    	 print ("<h1>insertion réalisée !</h1><br>"); //---OK ajout effectué---//
    	}
    	else print ("<h1>Email déjà existant !</h1><br>"); //---Email déjà existant---//
    while(1)printf("BUG");

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    si tous tes emails sont unique tu avais aussi le possibilité de faire un

    " SELECT id FROM profiles WHERE email='".$email."'"

    et sur ce résultat là tu peux faire un mysql_num_rows pour voir s'il te retourne au moin une ligne alors, l'email est présent, s'il te retourne 0 ligne, alors il n'est pas présent.

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

Discussions similaires

  1. mon formulaire de connexion renvoie toujours faux
    Par jerem070695 dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2008, 08h03
  2. requête count(*) renvoie toujours 0
    Par expertimeUser dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/08/2007, 14h29
  3. COUNT avec LEFT JOIN qui renvoie toujours 1
    Par Christophe_ dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/06/2007, 14h20
  4. Plusieurs Count dans mon select
    Par thomfort dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/03/2007, 17h39
  5. mon select count(*) marche pas
    Par zorba49 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 05/08/2005, 08h28

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