Moteur de recherche foireux
Résolu/Fermé
A voir également:
- Moteur de recherche foireux
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Copernic moteur de recherche - Télécharger - Navigateurs
- Installer qwant moteur de recherche - Télécharger - Navigateurs
- Moteur de recherche sans censure - Accueil - Services en ligne
10 réponses
Salut, oui je note plusieurs problèmes.
Je connais pas la fonction fetchAll, mais on va partir qu'elle est bonne pour se concentrer sur le reste.
Déjà, toutes tes requêtes SQL ont un LIMIT 4, ce qui te retournera maximum 4 résultats par requête. Donc si tu veux tous les résultats il te faudra l'enlever. D'ailleurs normalement il te faudrait mettre LIMIT 0,4 pour que ça marche et pas LIMIT 4 (mais bon peut-etre que ça dépend du SGBD).
Lorsque je fais un LIKE je met toujours mon paramètre entre apostrophe => LIKE '$select'.
Ensuite tes 2 surfaces dans ton formulaire (select3) sont à la valeur 100 ce qui te retournera toujours le même résultat.
Dernier point, chaque fois que t'exécute une requete, tu donne le résultat à $donnees. Sauf que tu l'ajoute pas, tu écrase celui qu'il y avait avant. Il faut ajouter chaque résultat récupérés dans chaque fetchAll() à ton tableau.
Moi déjà pour tester chaque requetes je ferais un
Je connais pas la fonction fetchAll, mais on va partir qu'elle est bonne pour se concentrer sur le reste.
Déjà, toutes tes requêtes SQL ont un LIMIT 4, ce qui te retournera maximum 4 résultats par requête. Donc si tu veux tous les résultats il te faudra l'enlever. D'ailleurs normalement il te faudrait mettre LIMIT 0,4 pour que ça marche et pas LIMIT 4 (mais bon peut-etre que ça dépend du SGBD).
Lorsque je fais un LIKE je met toujours mon paramètre entre apostrophe => LIKE '$select'.
Ensuite tes 2 surfaces dans ton formulaire (select3) sont à la valeur 100 ce qui te retournera toujours le même résultat.
Dernier point, chaque fois que t'exécute une requete, tu donne le résultat à $donnees. Sauf que tu l'ajoute pas, tu écrase celui qu'il y avait avant. Il faut ajouter chaque résultat récupérés dans chaque fetchAll() à ton tableau.
Moi déjà pour tester chaque requetes je ferais un
foreach($kenel->fetchAll() as $row){ //affichage des résultats de la requete en cours }
Pour le 100 j'avais la tête ailleurs c'est réglé.
Pour le code je l'ai arrangé.
Qu'est-ce que ça change d'écrire pleinement $kenel->fetchAll() ou par l'intermédiaire de la variable $donnees qui a la même valeur ?
Et puis malgré cela rien ne s'affiche.
Pour le code je l'ai arrangé.
<?php require_once ('annonce.params.php'); $tra = $_POST['select']; $bien = $_POST['select2']; $surface = $_POST['select3']; //echo $tra.$bien.$surface; $kenel = $bdd->query('SELECT * FROM Annonce WHERE type_transaction = "'.$tra.'" AND type_bien = "'.$bien.'" AND surface_carrez "'.$surface.'"') or die (mysql_error()); $donnees = $kenel->fetchAll(); foreach ($donnees as $row) { // CONTENU } mysql_close; ?>
Qu'est-ce que ça change d'écrire pleinement $kenel->fetchAll() ou par l'intermédiaire de la variable $donnees qui a la même valeur ?
Et puis malgré cela rien ne s'affiche.
Salut,
Non ça change rien d'écrire avec la variable $donnes ou avec $kenel->fetchAll(). C'est juste pour avoir moins de code.
La je vois que ton mysql_close n'a pas de parenthèse. Ca devrait être mysql_close();
Essai de faire des echo "TEST....<quelque chose>..."; tout le long de ton script pour voir où c'est que t'as un problème.
Bon normalement ça devrait pas posé de problème mais moi je fais mes requêtes avec des guillemets pas des apostrophes.
Au final pour trouver d'où vient ton erreur tu devrais utiliser ce code :
T'aura plus qu'a trouvé à quel moment t'as plus d'affichage sur les echo et t'aura forcement ton erreur. Et si t'as toujours rien qui s'affiche, tu pourra lancer ta requete SQL directement dans ton serveur de BDD pour voir si elle retourne vraiment quelque chose.
Non ça change rien d'écrire avec la variable $donnes ou avec $kenel->fetchAll(). C'est juste pour avoir moins de code.
La je vois que ton mysql_close n'a pas de parenthèse. Ca devrait être mysql_close();
Essai de faire des echo "TEST....<quelque chose>..."; tout le long de ton script pour voir où c'est que t'as un problème.
Bon normalement ça devrait pas posé de problème mais moi je fais mes requêtes avec des guillemets pas des apostrophes.
Au final pour trouver d'où vient ton erreur tu devrais utiliser ce code :
<?php echo "BEGIN <br>"; require_once ('annonce.params.php'); echo "INIT VARS <br>"; $tra = $_POST['select']; $bien = $_POST['select2']; $surface = $_POST['select3']; echo "INIT QUERY <br>"; echo "QUERY : SELECT * FROM Annonce WHERE type_transaction = '$tra' AND type_bien = '$bien' AND surface_carrez '$surface' <br>"; $kenel = $bdd->query("SELECT * FROM Annonce WHERE type_transaction = '$tra' AND type_bien = '$bien' AND surface_carrez '$surface'") or die (mysql_error()); $donnees = $kenel->fetchAll(); echo "BEGIN FETCH <br>"; foreach ($donnees as $row) { // CONTENU } echo "CLOSE <br>"; mysql_close(); echo "CLOSED <br>"; ?>
T'aura plus qu'a trouvé à quel moment t'as plus d'affichage sur les echo et t'aura forcement ton erreur. Et si t'as toujours rien qui s'affiche, tu pourra lancer ta requete SQL directement dans ton serveur de BDD pour voir si elle retourne vraiment quelque chose.
Salut. L'echo ne s'affiche plus après la requête SQL. C'est cette requête qui plante.
$kenel = $bdd->query("SELECT * FROM Annonce WHERE type_transaction = '$tra' AND type_bien = '$bien' AND surface_carrez '$surface'") or die (mysql_error()); $donnees = $kenel->fetchAll();
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Normalement tu devrais avoir accès phpMyAdmin, ça devrait pouvoir te permettre de tester directement ta requete.
Il te faut lancer l'interface de phpMyAdmin (généralement c'est http://localhost/phpMyAdmin, ou http://localhost/home/mysql), sélectionner ta base de données, cliquer sur "SQL" ou "Requete SQL", fin un truc du genre, et coller ta requête finale (celle de ton echo, pas celle avec les $bien, $surface, etc.). Le serveur te dire d'où vient le problème.
Tu pourrais me dire ton niveau en programmation, que je puisse m'adapter à toi dans mes propos?
Il te faut lancer l'interface de phpMyAdmin (généralement c'est http://localhost/phpMyAdmin, ou http://localhost/home/mysql), sélectionner ta base de données, cliquer sur "SQL" ou "Requete SQL", fin un truc du genre, et coller ta requête finale (celle de ton echo, pas celle avec les $bien, $surface, etc.). Le serveur te dire d'où vient le problème.
Tu pourrais me dire ton niveau en programmation, que je puisse m'adapter à toi dans mes propos?
T'inquiète pas je comprends ce que tu dis.
Mon niveau c'est Html/Php/Notions de bases en programmation.
Pour le vocabulaire c'est pas un problème.
Par contre dans Phpmyadmin je dois metttre quelle requête si ce n'est pas la requête SELECT ?
Mon niveau c'est Html/Php/Notions de bases en programmation.
Pour le vocabulaire c'est pas un problème.
Par contre dans Phpmyadmin je dois metttre quelle requête si ce n'est pas la requête SELECT ?
Ok ça sera plus simple alors ^^
Tu met bien ta requete du SELECT. Je voulais simplement dire de mettre la requete avec les variables remplacées par les valeurs du formulaire. Donc la requete qui s'affiche à ton écran avec le echo qui contient le SELECT :
Tu met bien ta requete du SELECT. Je voulais simplement dire de mettre la requete avec les variables remplacées par les valeurs du formulaire. Donc la requete qui s'affiche à ton écran avec le echo qui contient le SELECT :
echo "QUERY : SELECT * FROM Annonce WHERE type_transaction = '$tra' AND type_bien = '$bien' AND surface_carrez '$surface' <br>";
Donc j'ai remarqué qu'en ne remplissant pas un champ ou en mettant une autre valeur ma requête ne trouvait rien.
Il aurait fallu que je mette OR au lieu de AND peut-être ?
Sinon cette requête trouve la ligne lorsque j'indique tous les critères.
C'est sûrement la syntaxe de la requête qui foire dans le php.
Il aurait fallu que je mette OR au lieu de AND peut-être ?
Sinon cette requête trouve la ligne lorsque j'indique tous les critères.
C'est sûrement la syntaxe de la requête qui foire dans le php.
$kenel = $bdd->query("SELECT * FROM Annonce WHERE type_transaction = '$tra' OR type_bien = '$bien' OR surface_carrez '$surface'")
Du coup 2 choses à faire :
Rajouter un value = "" dans les champs de ton formulaire qui ne correspondent à aucun choix. Exemple :
Ensuite modifier ta requête pour qu'elle utilise des LIKE de cette façon :
La ça devrait marcher
Rajouter un value = "" dans les champs de ton formulaire qui ne correspondent à aucun choix. Exemple :
<option value = "" selected>Type de transaction</option>
Ensuite modifier ta requête pour qu'elle utilise des LIKE de cette façon :
"SELECT * FROM Annonce WHERE type_transaction LIKE '%$tra%' AND type_bien LIKE '%$bien%' AND surface_carrez LIKE '%$surface%'"
La ça devrait marcher