Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/09/2007, 18h35   #1
En attente de confirmation mail
 
Inscription : avril 2007
Messages : 149
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 149
Points : 45
Points : 45
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 :
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 :
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.
Draner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 18h47   #2
Membre confirmé
 
Matthieu
Étudiant
Inscription : septembre 2004
Messages : 381
Détails du profil
Informations personnelles :
Nom : Matthieu
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 381
Points : 278
Points : 278
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
paterson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 20h00   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
La partie suivante est incorrecte :
Code :
$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)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 21h09   #4
En attente de confirmation mail
 
Inscription : avril 2007
Messages : 149
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 149
Points : 45
Points : 45
Bon j'ai lue avec attention ce qui a été dit

Citation:
  • 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!

Citation:
  • 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é

Citation:
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!
Draner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 22h07   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2007, 09h12   #6
En attente de confirmation mail
 
Inscription : avril 2007
Messages : 149
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 149
Points : 45
Points : 45
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.
Draner est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h03.


 
 
 
 
Partenaires

Hébergement Web