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 :

[SQL] fonction en php qui count() dans une table sql


Sujet :

PHP & Base de données

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut [SQL] fonction en php qui count() dans une table sql
    Bonjour tout le monde.

    Je vais essayer d'exposé les faîts
    J'ai besoin de réécrire plusieur fois la même requette sql
    Donc je me suis dit, je vais passé en paramèttre mes informations puis un return me renvera le résultat en chiffre

    Et bien à mon grand désespoie ca bug !!!


    Voila ce que j'ai dans ma page. Le paramettrage et l'appel de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        //Configuration de la pagination
        $nb_affiche_par_page = "20";    //Nombre de retour par page.
        $nb_page_max = "5";                //Le nombre de page à affiché au maximum.
        $nom_champ_count = "id_film";    //Le nom du champ sur lequel on contrera le nombre de résultat à affiché.
        $nom_table_count = "id_film";    //Le nom de la table dans lequel on contera le nombre de résultat à affiché.
     
        $nb_page = pagination_nbre($nom_champ_count, $nom_table_count, $nb_affiche_par_page, $connect);
     
        echo $nb_page;
    et enfin ma fonction (en cours d'élaboration du coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        function pagination_nbre($nom_champ, $nom_table, $nb_affiche_par_page, $connect)
        {
            //On recherche le nombre de film à affiché.
            $select_func = "SELECT count(".$nom_champ.") FROM ".$nom_table."";
            $requette_func = @mysql_query($select_func, $connect);
            $reponse_func = @mysql_fetch_assoc($requette_func);
     
            $nb_total_resultat = $reponse_func['count(.$nom_champ.)'];
     
            //Nombre de page à affiché.
            return = ceil($nb_total_resultat/$nb_affiche_par_page);
        }
    Bref ca ne veux pas compter
    J'ai tenter un return sur $select_func et ca me répond une requête juste

    Par contre plus loin ca coince
    Si quelqu'un à une solution à ce problème ca me simplifirais la vie
    Sinon alors ca sera brouillon et y aura du tappage de code en plus
    Merci grandement de vôtre aide.
    Cordialement.

  2. #2
    Membre averti
    Profil pro
    Ingénieur en électronique
    Inscrit en
    Septembre 2004
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur en électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 419
    Points : 333
    Points
    333
    Par défaut
    J'ai pas tout regarder : déjà pour le sql , je suis pas un pro , mais ton select est faut

    $select_func = "SELECT count(".$nom_champ.") FROM ".$nom_table."";

    SELECT COUNT($nom_champ) FROM $nom_table WHERE 1

    Je n'ai jamais mis (".$nom_champ.") , et de " dans du sql , mais bon , je ne sait pas si sa marche , j'utilise '$variable'

    Ps : j'utilise toujours : $row=mysql_fetch_array($res) , sa éviteras $nb_total_resultat = $reponse_func['count(.$nom_champ.)'];

    Sa te feras $nb=$row[0]; pas de cassement de tête , puis niveau temps , je crois que s'est mieux ...

    Ps : je ne suis pas un pro , donc vérifie

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    La partie suivante est incorrecte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse_func['count(.$nom_champ.)']
    Les points ne jouent aucune rôle ici et figure comme simples caractères dans votre chaîne donc sont de trop par rapport au résultat attendu. De plus, la variable $nom_champ ne sera pas interpolée (remplacée par sa valeur) si elle figure dans une chaîne délimitée par des single quotes : il en faudrait des doubles.

    Avant de dire que ça ne fonctionne pas il serait plus intéressant d'en connaître la raison :
    • Développez avec error_reporting à E_ALL, au moins, un index de tableau inexistant étant reporté par une erreur de type notice (ce qui est votre cas)
    • Ne placez pas d'arobase devant vos requêtes : l'affichage ou non des erreurs étant normalement effectué suivant son environnement (développement vs production, où dans le second cas elles ne devraient plus du tout être affichées). Contrôlez plutôt les valeurs de retour de vos fonctions à la place !
    • Utilisez or die(mysql_error()) pour vérifier et obtenir la raison d'une erreur au niveau du SGBD (principalement pour le développement)

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Bon j'ai lue avec attention ce qui a été dit

    • Développez avec error_reporting à E_ALL, au moins, un index de tableau inexistant étant reporté par une erreur de type notice (ce qui est votre cas)
    Euh, au regret de passé pour un vrai noob, c'est quoi cette methode?
    Perso je ne la sonnais pas!

    • Ne placez pas d'arobase devant vos requêtes : l'affichage ou non des erreurs étant normalement effectué suivant son environnement (développement vs production, où dans le second cas elles ne devraient plus du tout être affichées). Contrôlez plutôt les valeurs de retour de vos fonctions à la place !
    Effectivement elle sont présente dans mon exemple mais en developpement elles sont retiré

    Utilisez or die(mysql_error()) pour vérifier et obtenir la raison d'une erreur au niveau du SGBD (principalement pour le développement)
    Idem, en developpement je l'utilise

    Mais la je pense que c'est le code qui s'exécute / interprete mal et margrès toute mes connaissance je bloque la dessus!

    Ps j'ai aussi essayer le code sans count() et avec et pareil ca repond rien

    Bref c'est la merdouille !
    Cordialement!

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Draner
    Euh, au regret de passé pour un vrai noob, c'est quoi cette methode?
    Perso je ne la sonnais pas!
    Vous avez pourtant le choix entre :


    Une proposition (non testée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        function pagination_nbre($nom_champ, $nom_table, $nb_affiche_par_page, $connect)
        {
            $select_func = sprintf('SELECT COUNT(%s) FROM %s', $nom_champ, $nom_table);
            $requete_func = mysql_query($select_func, $connect) or die(sprintf('[%s:%d] %s : %s', __FILE__, __LINE__, $select_func, mysql_error()));
     
            return = ceil(mysql_result($requete_func, 0, 0) / $nb_affiche_par_page);
        }
    Notes :
    • avec MySQL vous n'êtes pas obligés de faire une requête COUNT : on peut utiliser la propriété SQL_CALC_FOUND_ROWS lors de la requête comportant la clause LIMIT afin que le nombre total de tuples (ne tient pas compte de la partie LIMIT) soit calculé puis aller le récupérer via la fonction FOUND_ROWS().
    • si c'est le nombre total d'enregistrements qui vous intéresse et suivant le moteur de la table, un COUNT(*) sera plus rapide.
    • la connexion peut être omise pouvant être globale, ce paramètre est facultatif pour toutes les fonctions mysql_*.
    • utilisez la fonction var_dump sur vos variables pour visualiser ce qu'elle contienne. Elle pourrait s'avérer utile pour le retour de fonctions comme mysql_fetch_assoc


    Redonnez nous votre code au fur et à mesure que vous y apportez des corrections ainsi que toute information utile (comme les messages d'erreur).

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Bonjour.

    Voila ce qui se passe avec la nouvelle fonction.... Rien
    Ca plante le site!

    Bon je reprend les bonnes vielles methodes combiné avec l'exemple donné ci dessus

    Je vous tiens au courrant des résultat
    Cordialement.

    Ps: Il n'y a même pas de message d'erreur

    Rectification... j'ai modifier et la non plus ca marche pas
    Bon bah je supprime cette fonction, ce n'est pas gênant c'est juste que ca va me faire tapper plus de lignes.

Discussions similaires

  1. (VBA SQL) insertion d'un count dans une table
    Par tieumss dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/01/2009, 10h24
  2. Réponses: 5
    Dernier message: 02/05/2008, 14h46
  3. [Access] Probleme de count dans une requete sql
    Par castelligreg dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/04/2006, 16h20
  4. [sql]Probleme de count dans une requete sql (sous access)
    Par castelligreg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2006, 16h06

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