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/02/2008, 23h12   #1
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3
Par défaut [SQL] Comptage d'enregistrements

Bonjour à tous.

Je voudrais compter le nombre de résultats obtenus suite à une requête.
Le problème, c'est que le résultat est toujours le même, même si je change la requête.

Concrètement :

J'ai essayé ce code :


Code PHP :
1
2
3
4
5
6
7
<?php
//$mot est une variable obtenue par POST
 
$query = mysql_query("SELECT * FROM bdd_clips WHERE artiste LIKE ('%$mot%') OR titre LIKE ('%$mot%') ORDER BY id DESC");
$total_clips = mysql_num_rows($query);
echo 'Résultat : ' . $total_clips . 'trouvés.';
?>


Le problème, c'est que le résultat obtenu est toujours 3, c'est à dire le nombre total d'enregistrements dans ma table. Peu importe la valeur de $mot, même si cette variable contient une valeur commune à seulement 1 ou 2 enregistrements.

J'ai aussi essayé avec ce code :


Code PHP :
1
2
3
4
5
6
<?php
$query1 = mysql_query("SELECT COUNT(*) AS nb_clips FROM bdd_clips WHERE artiste LIKE ('%$mot%') OR titre LIKE ('%$mot%')");
$query2 = mysql_fetch_array($query1);
$total_clips = $query2['nb_clips'];
echo 'Résultat : ' . $total_clips . 'trouvés.';
?>


Ca fait le même effet qu'avec ma première solution, ça affiche le nombre total d'enregistrements de la table, et non pas seulement le nombre d'enregistrements sélectionnés.
Donc je ne suis pas plus avancé

C'est surement tout bête, mais je ne trouve pas la solution :s

Merci de l'aide que vous pourrez m'apporter
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 23h54   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 941
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 941
Points : 6 283
Points : 6 283
Bonsoir,

Tu n'es pas sur le bon forum, mais bienvenue quand même.

Assure toi que $mot n'est pas vide.
Malgrès ma faible expérience de PHP je crois qu'il faut utiliser le tableau $_POST[] ou $_REQUEST[] pour récupérer un paramètre d'un formulaire HTML.
Code php :
$Nom = $_POST['nom'];
A+

PS: ton post va surement être déplacé dans le forum PHP.
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 07h13   #3
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3
(Merci d'avoir déplacé mon post, je n'étais vraiment pas sûr de l'endroit le mieux aproprié, désolé).


J'utilise bien cette méthode plus haut dans mon code

Code PHP :
1
2
3
4
5
6
 
if(isset($_POST['mot']))
{
   $mot = $_POST['mot'];
   ...blablabla...
}

Par ailleurs, j'ai essayé en donnant une valeur unique à $mot, c'est à dire en lui donnant une autre valeur que celle prend par le POST, et le résultat reste le même.

On dirait que c'est le WHERE de ma requête qui est ignoré. Le problème, c'est de savoir pourquoi.
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 11h04   #4
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
Code :
1
2
3
4
5
6
7
8
<?php
//$mot est une variable obtenue par POST

$query = mysql_query("SELECT * FROM bdd_clips WHERE artiste LIKE '%$mot%' OR titre LIKE '%$mot%' ORDER BY id DESC")
 or die(mysql_error());;
$total_clips = mysql_num_rows($query);
echo 'Résultat : ' . $total_clips . 'trouvés.';
?>
essaye comme cela j'ai rajouté le or die pour voir les erreurs de la bdd
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 11h30   #5
Membre éclairé
 
Avatar de FredPsy
 
Homme Frédéric BERTHORELLY
Formateur en informatique
Inscription : décembre 2006
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BERTHORELLY
Âge : 35
Localisation : Djibouti

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 270
Points : 318
Points : 318
Bonjour,

Pourrais tu envoyer la structure de ta base de données.

J'ai fais un test qui fonctionne sur une bdd montée en vitesse, mais il faudrait que je puisse tester avec ta structure.

Merci
__________________
"Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

Je lutte contre le language SMS.
FredPsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 19h04   #6
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3
Tout d'abord, désolé du temps que j'ai mis à répondre, je rentre seulement des cours. En tout cas, merci de l'attention que vous apportez à mon problème

Alors, pour le or die, j'ai essayé, ça ne ressort rien, et c'était prévisible, car le script ne plante pas, il affiche juste un mauvais résultat.

Pour la structure de ma base, cliquez ici.
Pour la structure de ma table, cliquez ici.

J'espère que ça aidera
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 19h40   #7
Membre éclairé
 
Avatar de FredPsy
 
Homme Frédéric BERTHORELLY
Formateur en informatique
Inscription : décembre 2006
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BERTHORELLY
Âge : 35
Localisation : Djibouti

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 270
Points : 318
Points : 318
Merci, je suis deçu, je teste cela de suite.
__________________
"Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

Je lutte contre le language SMS.
FredPsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 19h43   #8
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3
Merci beaucoup
J'ai encore demandé à des amis codant souvent du PHP, d'après eux, ça devrait fonctionner comme je l'aimerais... Donc je sèche complètement...
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 20h10   #9
Membre éclairé
 
Avatar de FredPsy
 
Homme Frédéric BERTHORELLY
Formateur en informatique
Inscription : décembre 2006
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BERTHORELLY
Âge : 35
Localisation : Djibouti

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 270
Points : 318
Points : 318
Je viens de trouver à cause de quoi, tu vas comprendre :
Code :
1
2
select count(*) as nb_clips from bdd_clips where artiste like ('%$mot%') or titre like ('%$mot%')
Il ne doit pas y avoir d'espace entre le count et le (*), sinon ça foire. Etrange tout de même.

, je n'ai jamais vu ça ou alors je n'ai jamais fais attention.

Quoiqu'il en soit, lorsque tu as un problème avec les requêtes Mysql, fais les directement sous PhpMyAdmin (grâce à l'onglet SQL).
Si elles fonctionnent, tu fais un copier dans ton code.
__________________
"Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

Je lutte contre le language SMS.
FredPsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 20h25   #10
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3
Je vais tester ça de suite
Merci bien, j'édite aussitôt pour te donner le résultat.
En tout cas, c'est vrai que ça me serait utile de prendre ce réflexe, directement tester sous PHP MyAdmin...
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 20h46   #11
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3
Bon, désolé mais... ça ne marche pas mieux ^^'

Soit ça affiche toujours 3, soit rien du tout (selon le smodifications que j'y apporte). Ce qui est bizarre, c'est que dans PHP MyAdmin, ça marche, mais pas lorsque la requête est effectuée par le fichier PHP...

Et puis je viens de voir que dans mon tout premier post, il n'y avait déjà pas d'espace entre le count et le (*) :p
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 09h12   #12
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
fais un echo de la requete que tu envoie depuis ton script pour voir si elle est bien formée
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 09h13   #13
Membre éclairé
 
Avatar de FredPsy
 
Homme Frédéric BERTHORELLY
Formateur en informatique
Inscription : décembre 2006
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BERTHORELLY
Âge : 35
Localisation : Djibouti

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 270
Points : 318
Points : 318
Pour un meilleur test, pourrais tu m'envoyer ta page php entièrement (formulaire avec) et faire un export des données de ta base. (Sous PhpMyAdmin, je pense que tu connais ?!)

Merci.

Chez moi, ça fonctionne bien pourtant.

J'attends que tu m'envois ça si tu le veux bien.
__________________
"Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

Je lutte contre le language SMS.
FredPsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 13h11   #14
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3
Alors, je t'ai exporté ma base complète, sur le fichier my_db.sql, ainsi que mon fichier PHP avec toute la page (enfin, le formulaire + le script).
Attention, l'hébergeur sur lequel j'ai mis les fichiers n'accepte pas les fichiers *.php, donc je l'ai renommé en test_script.sql, il faudra que tu modifies son extension
(Je viens juste de penser que j'aurais pû les héberger directement sur mon FTP... Tant pis ^^'

- Clique droit => Enregistrer sous (Pour le fichier *.php)
- Clique droit => Enregistrer sous (Pour le fichier *.sql)
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 15h00   #15
Membre éclairé
 
Avatar de FredPsy
 
Homme Frédéric BERTHORELLY
Formateur en informatique
Inscription : décembre 2006
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BERTHORELLY
Âge : 35
Localisation : Djibouti

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 270
Points : 318
Points : 318
Je m'occupe de ça et on verra bien ce que ça donne.
Merci pour l'envoi.
J'y jette un oeil de suite.
__________________
"Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

Je lutte contre le language SMS.
FredPsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 15h26   #16
Membre éclairé
 
Avatar de FredPsy
 
Homme Frédéric BERTHORELLY
Formateur en informatique
Inscription : décembre 2006
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BERTHORELLY
Âge : 35
Localisation : Djibouti

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 270
Points : 318
Points : 318
J'ai trouvé ton erreur. Classique qui plus est.

tu a confondu le = avec le ==
Code :
1
2
3
4
5
6
7
<?php 
                            if (isset($_POST['mot'])) //Si la variable envoyée par POST existe 
                            {     
                                $mot = $_POST['mot']; //Alors on met sa valeur dans une variable normale 
                                if (($mot = "")) //Si la variable ne contient rien 
                                {
Avec ça, ça fonctionne
Code :
1
2
3
4
5
6
7
<?php 
                            if (isset($_POST['mot'])) //Si la variable envoyée par POST existe 
                            {     
                                $mot = $_POST['mot']; //Alors on met sa valeur dans une variable normale 
                                if (($mot == "")) //Si la variable ne contient rien 
                                {
En fait, avec =, il considère qu'une chaine "vide" ne correspond pas à la clause IF, donc Php passe à la clause ELSE et recherche les vides. Il en trouve trois sur chaque requete, d'où ton résultat.

PS : en faisant un test avec le champ texte vide, la page ne t'indique pas "veuillez rentrer un mot" (C'est ce qu'elle devrait faire). Tu aurais dû t'en apercevoir. Tu aurais alors vu que Php ne traitait pas la clause IF.

Alors qu'avec ==, la clause Else ne recherchera pas les chaines vides mais bien ce que tu a demandé.
__________________
"Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

Je lutte contre le language SMS.
FredPsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 18h38   #17
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3

Je me sentirai presque honteux de cette vilaine erreur lol surtout que j'ai d'autres pages vérifiant si une variable est vide, et je ne l'ai pas répérée...
Je mettrai ça sur le compte de l'erreur d'innattention

En tout cas, je te remercie énormément, ça marche nikel. Ca faisait quatre jours que j'essayais sans cesse de nouvelles syntaxes pour contourner ce problème, mais biensûr, aucune n'était adéquate, ou même correctes (et oui, j'ai fini par essayer d'en inventer XD).
Ce qui me touche le plus, c'est de voir que tu es quelqu'un qui veut vraiment aider, car au point de recréer un base, de tester les scripts, etc... Ca fait vraiment plaisir. Sur d'autres forum, mes topics demandant de l'aide sont très vite tombés dans les oubliettes...

Allez, je file continuer mon site, je te re-remercie
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 19h05   #18
Membre éclairé
 
Avatar de FredPsy
 
Homme Frédéric BERTHORELLY
Formateur en informatique
Inscription : décembre 2006
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BERTHORELLY
Âge : 35
Localisation : Djibouti

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 270
Points : 318
Points : 318
Pas de quoi, quand j'ai le temps, je mets à profit mes connaissances dans le domaine pour aider la communauté.

De plus, c'est galère de passer quatre jours tout seul sur un problème qui peut être réglé avec un peu de bonne volonté

Merci, bonne soirée et bonne continuation.
__________________
"Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

Je lutte contre le language SMS.
FredPsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 19h14   #19
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 3
Points : 3
C'est vraiment sympa de ta part
Bonne soirée à toi aussi.
Noxstyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 22h48   #20
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 941
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 941
Points : 6 283
Points : 6 283
Je ne m'étais pas trompé alors, en écrivant
Citation:
Assure toi que $mot n'est pas vide
Hé Hé Hé (je me moque amicalement)

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h42.


 
 
 
 
Partenaires

Hébergement Web