Résultat SELECT count erroné
Résolu/Fermé
Evelyne31
Messages postés
55
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
13 septembre 2016
-
21 mars 2013 à 20:03
Bionik Messages postés 4232 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 - 22 mars 2013 à 12:17
Bionik Messages postés 4232 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 - 22 mars 2013 à 12:17
A voir également:
- Résultat SELECT count erroné
- Lexer resultat - Télécharger - Sport
- Resultat foot - Télécharger - Vie quotidienne
- Please select boot device - Forum Matériel & Système
- Select boot device première utilisation ✓ - Forum Windows
- Reboot and select proper boot device asus - Forum Matériel & Système
7 réponses
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
21 mars 2013 à 22:59
21 mars 2013 à 22:59
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. ?>
Evelyne31
Messages postés
55
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
13 septembre 2016
5
21 mars 2013 à 23:17
21 mars 2013 à 23:17
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.
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
21 mars 2013 à 23:34
21 mars 2013 à 23:34
Je ne connais pas la structure de tes tables mais les deux scripts sont totalement différents.
Regarde bien, les requêtes ne sont pas pareilles, donc pas étonnant que tu n'aies pas le même résultat.
Regarde bien, les requêtes ne sont pas pareilles, donc pas étonnant que tu n'aies pas le même résultat.
Evelyne31
Messages postés
55
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
13 septembre 2016
5
22 mars 2013 à 00:13
22 mars 2013 à 00:13
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>
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
22 mars 2013 à 01:29
22 mars 2013 à 01:29
L'erreur que t'obtiens signifie que tu as donné un boolean en argument.
Regardes la variable $retour_messages_query, elle contient deux fois la variable $clauseWhere avec ces deux concaténations.
Regardes la variable $retour_messages_query, elle contient deux fois la variable $clauseWhere avec ces deux concaténations.
Evelyne31
Messages postés
55
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
13 septembre 2016
5
22 mars 2013 à 09:13
22 mars 2013 à 09:13
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
Evelyne31
Messages postés
55
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
13 septembre 2016
5
22 mars 2013 à 10:43
22 mars 2013 à 10:43
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
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
22 mars 2013 à 10:46
22 mars 2013 à 10:46
Pas de quoi, bonne journée ;)
Evelyne31
Messages postés
55
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
13 septembre 2016
5
22 mars 2013 à 10:55
22 mars 2013 à 10:55
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;
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
22 mars 2013 à 11:10
22 mars 2013 à 11:10
Je revois les deux clauses where ($clauseWhere) dans ta requête $retour_messages_query. Supprime l'un :)
Evelyne31
Messages postés
55
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
13 septembre 2016
5
22 mars 2013 à 12:13
22 mars 2013 à 12:13
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;
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
22 mars 2013 à 12:17
22 mars 2013 à 12:17
Ah ok, je m'en doutais aussi.
21 mars 2013 à 23:01