Résultat SELECT count erroné
Résolu
Evelyne31
Messages postés
55
Date d'inscription
Statut
Membre
Dernière intervention
-
Bionik Messages postés 4232 Date d'inscription Statut Modérateur Dernière intervention -
Bionik Messages postés 4232 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je fais une requête pour compter les résultats suite à une recherche via un formulaire php.
Tout se passe bien dans PhpMyAdmin mais rien à faire dans mon fichier de traitement du formulaire de recherche.
Je vous soumets mes 2 requêtes si vous aviez un début de piste ? Merci par avance,
Evelyne
Requête SQL dans PhpMyAdmin qui renvoie bien le bon nombre de résultats :
Requête dans mon fichier php qui renvoie la totalité des enregistrements sans tenir compte du numéro de département sélectionné :
Je fais une requête pour compter les résultats suite à une recherche via un formulaire php.
Tout se passe bien dans PhpMyAdmin mais rien à faire dans mon fichier de traitement du formulaire de recherche.
Je vous soumets mes 2 requêtes si vous aviez un début de piste ? Merci par avance,
Evelyne
Requête SQL dans PhpMyAdmin qui renvoie bien le bon nombre de résultats :
SELECT count(ID_gite) AS total FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement WHERE codeDepartement LIKE '%31%';
Requête dans mon fichier php qui renvoie la totalité des enregistrements sans tenir compte du numéro de département sélectionné :
$clauseWhere = " WHERE codeDepartement LIKE '%".mysql_real_escape_string($_SESSION['recherche']['mot'])."%' "; $retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement "; $clauseWhere; // Critères de recherche $retour_total = mysql_query($retour_total_query) or die (mysql_error()); $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau. $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
A voir également:
- Résultat SELECT count erroné
- Resultat foot - Télécharger - Vie quotidienne
- Lexer resultat - Télécharger - Sport
- 5/90 resultat ✓ - Forum Excel
- Please select boot device - Forum Windows
- Résultat loto bulgarie autriche azerbaïdjan - Forum Loisirs / Divertissements
7 réponses
Salut,
C'est très normal d'avoir tous les enregistrements, t'as déclaré une variable $clauseWhere que t'as jamais utilisé dans ta requête.
Essaies plutôt ceci:
C'est très normal d'avoir tous les enregistrements, t'as déclaré une variable $clauseWhere que t'as jamais utilisé dans ta requête.
Essaies plutôt ceci:
<?php $clauseWhere = " WHERE codeDepartement LIKE '%" . mysql_real_escape_string($_SESSION['recherche']['mot']) . "%' "; $retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere"; $retour_total = mysql_query($retour_total_query) or die(mysql_error()); $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau. $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total. ?>
arth
Messages postés
9374
Date d'inscription
Statut
Contributeur
Dernière intervention
1 293
Pluz'un !
Bonsoir Bionik,
Un grand merci pour ta réponse. Ta solution fonctionne, c'est déjà énorme. Malheureusement je ne comprends pas pourquoi ? Je mets ci-dessous 2 codes (extraits de fichiers php) que j'essaie en vain de comparer pour comprendre. Hormis une modification du MCD donc des requêtes, le déroulement reste le même ?
Merci 1000 fois si tu avais une idée pour m'expliquer ?
Désolée arth, je ne comprends pas ton "Pluz'un !"
Evelyne
Voici un ancien code qui renvoyait un résultat OK (MCD refait depuis) :
Et le nouveau code soumis qui ne marchait pas :
Un grand merci pour ta réponse. Ta solution fonctionne, c'est déjà énorme. Malheureusement je ne comprends pas pourquoi ? Je mets ci-dessous 2 codes (extraits de fichiers php) que j'essaie en vain de comparer pour comprendre. Hormis une modification du MCD donc des requêtes, le déroulement reste le même ?
Merci 1000 fois si tu avais une idée pour m'expliquer ?
Désolée arth, je ne comprends pas ton "Pluz'un !"
Evelyne
Voici un ancien code qui renvoyait un résultat OK (MCD refait depuis) :
Création de la requête switch (($_SESSION["recherche"]["type"])) { case 'codeDepartement': // contient le mot ...$mot_recherche... IMPORTANT => mysql_real_escape_string(...) pour PROTEGER des injections SQL !! $clauseWhere = " WHERE codeDepartement LIKE '%".mysql_real_escape_string($_SESSION['recherche']['mot'])."%' "; $retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g JOIN DEPARTEMENT d ON g.ID_departement = d.ID_departement JOIN COMMUNE c ON g.ID_commune = c.ID_commune ". $clauseWhere; // Critères de recherche $retour_total = mysql_query($retour_total_query) or die (mysql_error()); $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau. $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
Et le nouveau code soumis qui ne marchait pas :
// Création de la requête switch (($_SESSION["recherche"]["type"])) { case 'codeDepartement': // contient le mot ...$mot_recherche... // IMPORTANT => mysql_real_escape_string(...) pour PROTEGER des injections SQL !! $clauseWhere = " WHERE codeDepartement LIKE '%" . mysql_real_escape_string($_SESSION['recherche']['mot']) . "%' "; $retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere"; $retour_total = mysql_query($retour_total_query) or die(mysql_error()); $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau. $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
Bonsoir Bionik,
et merci pour ton aide.
Oui les 2 codes, donc requêtes, sont différents mais la logique reste la même ?
En fait j'ai intégré, selon tes conseils, la variable $clauseWhere dans mes requêtes.
Cela fonctionne et me renvoie le bon résultat (le bon nombre d'enregistrements).
Une 1ère requête qui compte le nombre d'enregistrements pour la pagination se termine normalement par ";
La seconde est concaténée pour intégrer la variable $clauseWhere
Le résultat renvoyé est correct. Par contre j'ai un nouveau message d'erreur :
La ligne 252 est :
while($donnees_messages = mysql_fetch_array($retour_messages)) { ...
Je vous soumets mon code complet en précisant qu'il s'agit d'un fichier php de traitement d'un formulaire de recherche. L'extrait que je donne ci-après concerne un choix de recherche par numéro de département. Je soumets ce code juste pour une relecture rapide par un oeil plus expérimenté que moi. Un grand merci par avance si vous pouviez débloquez ce problème sur lequel je cale depuis lundi :
et merci pour ton aide.
Oui les 2 codes, donc requêtes, sont différents mais la logique reste la même ?
En fait j'ai intégré, selon tes conseils, la variable $clauseWhere dans mes requêtes.
Cela fonctionne et me renvoie le bon résultat (le bon nombre d'enregistrements).
Une 1ère requête qui compte le nombre d'enregistrements pour la pagination se termine normalement par ";
$retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere ";
La seconde est concaténée pour intégrer la variable $clauseWhere
$retour_messages_query = "SELECT g.numGite FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere ". $clauseWhere. // Critères de recherche " ORDER BY numGite ASC LIMIT ".$premiereEntree.", ".$messagesParPage." "; // Pagination
Le résultat renvoyé est correct. Par contre j'ai un nouveau message d'erreur :
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/MAMP/htdocs/archeotheques/lithotheque/lith_structure/lith_traitement_form_rech.php on line 252
La ligne 252 est :
while($donnees_messages = mysql_fetch_array($retour_messages)) { ...
Je vous soumets mon code complet en précisant qu'il s'agit d'un fichier php de traitement d'un formulaire de recherche. L'extrait que je donne ci-après concerne un choix de recherche par numéro de département. Je soumets ce code juste pour une relecture rapide par un oeil plus expérimenté que moi. Un grand merci par avance si vous pouviez débloquez ce problème sur lequel je cale depuis lundi :
<?php session_start(); // je démarre la session // ------------------------ // Création de la requête switch (($_SESSION["recherche"]["type"])) { case 'codeDepartement': // contient le mot ...$mot_recherche... // IMPORTANT => mysql_real_escape_string(...) pour PROTEGER des injections SQL !! /*$clauseWhere = " WHERE codeDepartement LIKE '%" . mysql_real_escape_string($_SESSION['recherche']['mot']) . "%' "; $retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere ". $retour_total = mysql_query($retour_total_query) or die(mysql_error()); $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau. $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total.*/ $clauseWhere = " WHERE codeDepartement LIKE '%" . mysql_real_escape_string($_SESSION['recherche']['mot']) . "%' "; $retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere "; $retour_total = mysql_query($retour_total_query) or die(mysql_error()); $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau. $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total. // ----------------------- // Pagination $messagesParPage = 3; // Nous allons afficher 2 messages par page. //Nous allons maintenant compter le nombre de pages. $nombreDePages = ceil($total/$messagesParPage); // ------------------------ // Récupération du numéro de page if(isset($_GET['page'])) // Si la variable $_GET['page'] existe... { $pageActuelle = intval($_GET['page']); // Récupération via URL if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages... { $pageActuelle = $nombreDePages; } } else { // Sinon $pageActuelle = 1; // La page actuelle est la n°1 } $premiereEntree = ($pageActuelle-1)*$messagesParPage; // On calcule la première entrée à lire mysql_query("SET NAMES 'utf8'"); $retour_messages_query = "SELECT g.numGite FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere ". $clauseWhere. // Critères de recherche " ORDER BY numGite ASC LIMIT ".$premiereEntree.", ".$messagesParPage." "; // Pagination*/ $retour_messages = mysql_query($retour_messages_query); break; ... } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="../lith_css/lith_style_form_rech.css" /> <title>Lithothèque, résultat d'une recherche</title> </head> <body> <?php include("lith_entete_form.php");?> <p class="titre_form">Résultat de votre recherche</p> <span class="centre"><p>Pour le terme recherché : <span class="vert_gras"><?php echo $_SESSION['recherche']['mot']; ?></span>, il y a <span class="vert_gras"><?php echo $total; ?></span> enregistrement<?php if($total>1){ echo 's'; } ?> dans la Lithothèque.</p></span> <?php if($total) { // début du tableau echo '<table id=table1>'."\n"; // première ligne on affiche les titres prénom et surnom dans 2 colonnes echo '<tr>'; echo '<th>Numéros des gîtes</th>'; //echo '<th>Nature des gîtes</th>'; echo '</tr>'."\n"; // lecture et affichage des résultats sur 1 colonne, 1 résultat par ligne. while($donnees_messages = mysql_fetch_array($retour_messages)) { echo '<tr>'; echo '<td ><a href="../lith_page_gite.php?numGite='. $donnees_messages['numGite'] . '">' . $donnees_messages['numGite'] . '</a></td>'; echo '</tr>'."\n"; } echo '</table>'."\n"; // fin du tableau. } else echo 'Il n\'y a pas encore d\'enregistrement dans la Lithothèque correspondant au terme de votre recherche.'; // ------------------------ // Affichage de la PAGINATION echo '<p style="text-align:center;">Page(s) : '; //Pour l'affichage, on centre la liste des pages for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle { //On va faire notre condition if($i==$pageActuelle) //Si il s'agit de la page actuelle... { echo ' [ '.$i.' ] '; } else { //Sinon... echo ' <a href="lith_traitement_form_rech.php?page='.$i.'">'.$i.'</a> '; } } echo '</p>'; ?> <IMG SRC="../lith_images/puce_biface.png"> <a href="../lith_acces/lith_acces.php">Retour accueil Lithothèque</a> <br /><br /> <?php include("lith_pied_page_form_rech.php"); ?> </body> </html>
Bonjour Bionik,
Je te remercie pour cette nouvelle réponse. J'essaie de régler le problème ce matin et espère pouvoir enfin mettre ce post en résolu.
Très bonne journée,
Evelyne
Je te remercie pour cette nouvelle réponse. J'essaie de régler le problème ce matin et espère pouvoir enfin mettre ce post en résolu.
Très bonne journée,
Evelyne
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
re-bonjour,
Mon problème est enfin résolu grâce à ton aide. Il y avait bien 2 fois la clause where dans mes 2 requêtes.
Je mets une partie de mon code ci-dessous pour l'exemple d'une recherche par n° de département. S'il pouvait servir à d'autres ?
Très bonne journée et encore merci Bionik,
Evelyne
Mon problème est enfin résolu grâce à ton aide. Il y avait bien 2 fois la clause where dans mes 2 requêtes.
Je mets une partie de mon code ci-dessous pour l'exemple d'une recherche par n° de département. S'il pouvait servir à d'autres ?
Très bonne journée et encore merci Bionik,
Evelyne
Le code oublié lors du message précédent. Il s'agit du résultat de l'envoi d'un formulaire de recherche et de présenter les résultats sous forme de liste avec pagination.
// ------------------------ // Création de la requête switch (($_SESSION["recherche"]["type"])) { case 'codeDepartement': // contient le mot ...$mot_recherche... // IMPORTANT => mysql_real_escape_string(...) pour PROTEGER des injections SQL !! $clauseWhere = " WHERE codeDepartement LIKE '%" . mysql_real_escape_string($_SESSION['recherche']['mot']) . "%' "; $retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere "; $retour_total = mysql_query($retour_total_query) or die(mysql_error()); $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau. $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total. echo $retour_total_query; // ----------------------- // Pagination $messagesParPage = 3; // Nous allons afficher 2 messages par page. //Nous allons maintenant compter le nombre de pages. $nombreDePages = ceil($total/$messagesParPage); // ------------------------ // Récupération du numéro de page if(isset($_GET['page'])) // Si la variable $_GET['page'] existe... { $pageActuelle = intval($_GET['page']); // Récupération via URL if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages... { $pageActuelle = $nombreDePages; } } else { // Sinon $pageActuelle = 1; // La page actuelle est la n°1 } $premiereEntree = ($pageActuelle-1)*$messagesParPage; // On calcule la première entrée à lire mysql_query("SET NAMES 'utf8'"); $retour_messages_query = "SELECT g.numGite FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere ". //$clauseWhere. // Critères de recherche " ORDER BY numGite ASC LIMIT ".$premiereEntree.", ".$messagesParPage." "; // Pagination*/ $retour_messages = mysql_query($retour_messages_query); echo $retour_messages_query; break;
Non Bionik, j'avais laissé la 2ème est en commentaire par erreur.
Je rectifie ci-dessous pour être sûre que c'est parfait ? Merci.
Evelyne
Je rectifie ci-dessous pour être sûre que c'est parfait ? Merci.
Evelyne
$retour_messages_query = "SELECT g.numGite FROM GITE g JOIN AS_COMMU_DEPAR acd ON g.ID_commune = acd.COMMUNE_ID_commune JOIN DEPARTEMENT d ON d.ID_departement = acd.DEPARTEMENT_ID_departement $clauseWhere ". " ORDER BY numGite ASC LIMIT ".$premiereEntree.", ".$messagesParPage." "; // Pagination $retour_messages = mysql_query($retour_messages_query); echo $retour_messages_query; break;