Erreur sql et moteur de recherche
Résolu/Fermé
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
-
30 sept. 2010 à 11:33
fredodo13 Messages postés 89 Date d'inscription mercredi 17 mars 2010 Statut Membre Dernière intervention 12 octobre 2022 - 6 oct. 2010 à 18:16
fredodo13 Messages postés 89 Date d'inscription mercredi 17 mars 2010 Statut Membre Dernière intervention 12 octobre 2022 - 6 oct. 2010 à 18:16
A voir également:
- Erreur sql et moteur de recherche
- Erreur 0x80070643 - Accueil - Windows
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Installer qwant moteur de recherche - Télécharger - Navigateurs
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
20 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
30 sept. 2010 à 11:50
30 sept. 2010 à 11:50
Bonjour,
Pour commencer, quelques conseils quand on recherche de l'aide :
- utiliser les balises < code> pour mettre son code, surtout quand il y a plus qu'une ou deux lignes ; c'est beaucoup plus lisible et les indentations apparaissent.
- quand un message d'erreur indique un numéro de ligne, c'est sympa de nous dire à quelle ligne ça correspond !
Si j'ai bien compté (ce qui n'est pas facile avec les retours à la ligne introduits par le forum, d'où mon 2e point ;) ), la ligne fautive est celle-ci :
Apparemment, la requête ne s'est pas bien effectuée.
Je te suggère de remplacer ce code par le suivant, ce qui permettra de localiser l'erreur :
Xavier
Pour commencer, quelques conseils quand on recherche de l'aide :
- utiliser les balises < code> pour mettre son code, surtout quand il y a plus qu'une ou deux lignes ; c'est beaucoup plus lisible et les indentations apparaissent.
- quand un message d'erreur indique un numéro de ligne, c'est sympa de nous dire à quelle ligne ça correspond !
Si j'ai bien compté (ce qui n'est pas facile avec les retours à la ligne introduits par le forum, d'où mon 2e point ;) ), la ligne fautive est celle-ci :
$selection_recherche = mysql_query("SELECT * FROM camping WHERE $valeur_requete $sujets_fermes ORDER BY id DESC"); //requête avec le résultat de la boucle dedans
Apparemment, la requête ne s'est pas bien effectuée.
Je te suggère de remplacer ce code par le suivant, ce qui permettra de localiser l'erreur :
$requete_recherche = "SELECT * FROM camping WHERE $valeur_requete $sujets_fermes ORDER BY id DESC"; $selection_recherche = mysql_query($requete_recherche) or die("Erreur dans $requete_recherche :<br />".mysql_error()); //requête avec le résultat de la boucle dedans
Xavier
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
30 sept. 2010 à 11:52
30 sept. 2010 à 11:52
il doit y avoir un problème avec la syntaxe de ta requête, je te conseil de faire tes mysql_query sous cette forme :
mysql_query("INSERT.....") or die ('Erreur mysql : '.mysql_error());
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
30 sept. 2010 à 11:57
30 sept. 2010 à 11:57
Bonjour,
En regardant de plus près, je pense que le problème vient du fait qu'il manquen une espace entre la fin d'une clause WHERE et le AND/OR suivant :
$valeur_requete .= '' . $and_ou_or . ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\'';
Pas d'espace à la fin ni au début ni dans la variable $and_ou_or : du coup, les clauses sont collées et ça donne quelque chose comme
titre LIKE '%truc%'AND titre LIKE '%bidule%'AND ...
En regardant de plus près, je pense que le problème vient du fait qu'il manquen une espace entre la fin d'une clause WHERE et le AND/OR suivant :
$valeur_requete .= '' . $and_ou_or . ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\'';
Pas d'espace à la fin ni au début ni dans la variable $and_ou_or : du coup, les clauses sont collées et ça donne quelque chose comme
titre LIKE '%truc%'AND titre LIKE '%bidule%'AND ...
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
30 sept. 2010 à 12:25
30 sept. 2010 à 12:25
Hummm deja merci bcp pour vos reponses !!!
on avance en faites comme un con j'avais oublié de changé le champs "titre" de l'exemple en "nom" comme dans ma base :s
Par contre la requette fonctionne mais affiche TOUS les champs de ma base lol sans selection :s
mon code desormais :
<?php
mysql_connect("xxx.1and1.fr", "dboxxxx", "xxx"); //connexion à la bdd
mysql_select_db("dbxxx");
if (isset($_POST['rechercher'])) //si on a validé le formulaire
{
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['camping'])); //sécurisation des variables
$mode = mysql_real_escape_string(htmlspecialchars($_POST['mode']));
if (isset($_POST['sujets_fermes'])) //si on a coché la case
{
$sujets_fermes = "AND ferme='1'";
}
else //si on ne l'a pas cochée
{
$sujets_fermes = '';
}
if ($mode == "tous_les_mots")
{
$and_ou_or = 'AND'; //on utilisera AND dans la boucle
}
else
{
$and_ou_or = 'OR'; //on utilisera OR dans la boucle
}
if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte
{
$selection_recherche = mysql_query("SELECT * FROM camping WHERE nom LIKE '%$recherche%' $sujets_fermes ORDER BY nom");
}
else //si le mode de recherche n'est pas par expression exacte
{
$mots = explode(" ", $recherche); //séparation des mots
$nombre_mots = count ($mots); //compte le nombre de mots
$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
{
$valeur_requete .= '' . $and_ou_or . 'nom LIKE\'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
}
$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
$requete_recherche = "SELECT *
FROM camping
WHERE $valeur_requete $sujets_fermes ORDER BY nom";
$selection_recherche = mysql_query($requete_recherche) or die("Erreur dans $requete_recherche :<br />".mysql_error()); //requête avec le résultat de la boucle dedans
}
$nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
if ($nombre_resultats == 0) //s'il n'y a pas de résultat
{
echo 'aucun resultat.<a href="test.html">recommencer</a>';
}
else //il y a au moins un résultat
{
echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
{
echo '<strong>Numero:</strong> ' . $resultats['id'] . '<br />
<strong>Nom :</strong> ' . $resultats['nom'] . '<br />
<strong>Village :</strong> ' . $resultats['ville'] . '<br /><br />';
}
echo '<a href="test.html">recommencer</a>';
}
}
else //si on n'a pas validé le formulaire, on l'affiche
{
?>
<form method="post" action="index.php?page=test">
Votre recherche :
<input type="text" name="recherche" />
<br />
Votre mode de recherche :
<select name="mode">
<option value="expression_exacte">Expression exacte</option>
<option value="tous_les_mots">Tous les mots</option>
<option value="un_mot">Au moins un mot</option>
</select>
<br />
Sélectionner uniquement les sujets fermés :
<input name="sujets_fermes" type="checkbox" />
<br />
<input type="submit" value="Rechercher" name="rechercher" />
</form>
<?php
}
mysql_close(); //déconnexion de la bdd
?>
on avance en faites comme un con j'avais oublié de changé le champs "titre" de l'exemple en "nom" comme dans ma base :s
Par contre la requette fonctionne mais affiche TOUS les champs de ma base lol sans selection :s
mon code desormais :
<?php
mysql_connect("xxx.1and1.fr", "dboxxxx", "xxx"); //connexion à la bdd
mysql_select_db("dbxxx");
if (isset($_POST['rechercher'])) //si on a validé le formulaire
{
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['camping'])); //sécurisation des variables
$mode = mysql_real_escape_string(htmlspecialchars($_POST['mode']));
if (isset($_POST['sujets_fermes'])) //si on a coché la case
{
$sujets_fermes = "AND ferme='1'";
}
else //si on ne l'a pas cochée
{
$sujets_fermes = '';
}
if ($mode == "tous_les_mots")
{
$and_ou_or = 'AND'; //on utilisera AND dans la boucle
}
else
{
$and_ou_or = 'OR'; //on utilisera OR dans la boucle
}
if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte
{
$selection_recherche = mysql_query("SELECT * FROM camping WHERE nom LIKE '%$recherche%' $sujets_fermes ORDER BY nom");
}
else //si le mode de recherche n'est pas par expression exacte
{
$mots = explode(" ", $recherche); //séparation des mots
$nombre_mots = count ($mots); //compte le nombre de mots
$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
{
$valeur_requete .= '' . $and_ou_or . 'nom LIKE\'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
}
$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
$requete_recherche = "SELECT *
FROM camping
WHERE $valeur_requete $sujets_fermes ORDER BY nom";
$selection_recherche = mysql_query($requete_recherche) or die("Erreur dans $requete_recherche :<br />".mysql_error()); //requête avec le résultat de la boucle dedans
}
$nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
if ($nombre_resultats == 0) //s'il n'y a pas de résultat
{
echo 'aucun resultat.<a href="test.html">recommencer</a>';
}
else //il y a au moins un résultat
{
echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
{
echo '<strong>Numero:</strong> ' . $resultats['id'] . '<br />
<strong>Nom :</strong> ' . $resultats['nom'] . '<br />
<strong>Village :</strong> ' . $resultats['ville'] . '<br /><br />';
}
echo '<a href="test.html">recommencer</a>';
}
}
else //si on n'a pas validé le formulaire, on l'affiche
{
?>
<form method="post" action="index.php?page=test">
Votre recherche :
<input type="text" name="recherche" />
<br />
Votre mode de recherche :
<select name="mode">
<option value="expression_exacte">Expression exacte</option>
<option value="tous_les_mots">Tous les mots</option>
<option value="un_mot">Au moins un mot</option>
</select>
<br />
Sélectionner uniquement les sujets fermés :
<input name="sujets_fermes" type="checkbox" />
<br />
<input type="submit" value="Rechercher" name="rechercher" />
</form>
<?php
}
mysql_close(); //déconnexion de la bdd
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
30 sept. 2010 à 15:23
30 sept. 2010 à 15:23
une idée alors ? snif
c'est bizare en faite car qd la case check_box est non coché le moteur affiche tous les champs de la base et quand la check box est non coché il n affiche aucun résultat
si quelqu un peut m'aider c'est avec plaisir ...
MERCI BCP
c'est bizare en faite car qd la case check_box est non coché le moteur affiche tous les champs de la base et quand la check box est non coché il n affiche aucun résultat
si quelqu un peut m'aider c'est avec plaisir ...
MERCI BCP
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
30 sept. 2010 à 19:49
30 sept. 2010 à 19:49
up!
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
1 oct. 2010 à 10:19
1 oct. 2010 à 10:19
Je me répète ^^
- utiliser les balises < code> pour mettre son code, surtout quand il y a plus qu'une ou deux lignes ; c'est beaucoup plus lisible et les indentations apparaissent.
- quand un message d'erreur indique un numéro de ligne, c'est sympa de nous dire à quelle ligne ça correspond !
- utiliser les balises < code> pour mettre son code, surtout quand il y a plus qu'une ou deux lignes ; c'est beaucoup plus lisible et les indentations apparaissent.
- quand un message d'erreur indique un numéro de ligne, c'est sympa de nous dire à quelle ligne ça correspond !
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
1 oct. 2010 à 10:21
1 oct. 2010 à 10:21
Fais un echo de la requête, et dis-nous ce qui s'affiche exactement.
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
1 oct. 2010 à 10:39
1 oct. 2010 à 10:39
lol merci pour le temps consacré :)
et bien en faites j'ai pas mis de message d erreur car il n'affiche aucune message d erreur sauf que le moteur m'affiche tous les champs de la base :s
ou je dois mettre ces balises code ? (desole lol)
pour plus de clarté je te mets l'adresse de la page : www.campingverdon.com/test.html
et bien en faites j'ai pas mis de message d erreur car il n'affiche aucune message d erreur sauf que le moteur m'affiche tous les champs de la base :s
ou je dois mettre ces balises code ? (desole lol)
pour plus de clarté je te mets l'adresse de la page : www.campingverdon.com/test.html
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
1 oct. 2010 à 10:51
1 oct. 2010 à 10:51
Alors, les balises < code>, c'est autour du code que tu publies sur CommentCaMarche, pour que l'affichage soit plus clair.
Sinon, le problème vient de la requête que tu génères.
Il faudrait pouvoir la lire, donc rajoute dans ton code :
Sinon, le problème vient de la requête que tu génères.
Il faudrait pouvoir la lire, donc rajoute dans ton code :
$requete_recherche = "SELECT * FROM camping WHERE $valeur_requete $sujets_fermes ORDER BY nom"; $selection_recherche = mysql_query($requete_recherche) or die("Erreur dans $requete_recherche :<br />".mysql_error()); //requête avec le résultat de la boucle dedans echo $requete_recherche;
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
1 oct. 2010 à 11:10
1 oct. 2010 à 11:10
Merci !
Voici le resultat :
Erreur dans SELECT * FROM camping WHERE ANDnom LIKE'%%' ORDER BY nom :
Unknown column 'ANDnom' in 'where clause'
je te mets tout sous balise :
Voici le resultat :
Erreur dans SELECT * FROM camping WHERE ANDnom LIKE'%%' ORDER BY nom :
Unknown column 'ANDnom' in 'where clause'
je te mets tout sous balise :
if (isset($_POST['rechercher'])) //si on a validé le formulaire { $recherche = mysql_real_escape_string(htmlspecialchars($_POST['camping'])); //sécurisation des variables $mode = mysql_real_escape_string(htmlspecialchars($_POST['mode'])); if (isset($_POST['sujets_fermes'])) //si on a coché la case { $sujets_fermes = "AND P1='n'"; } else //si on ne l'a pas cochée { $sujets_fermes = ''; } if ($mode == "tous_les_mots") { $and_ou_or = 'AND'; //on utilisera AND dans la boucle } else { $and_ou_or = 'OR'; //on utilisera OR dans la boucle } if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte { $selection_recherche = mysql_query("SELECT * FROM camping WHERE nom LIKE '%$recherche%' $sujets_fermes ORDER BY nom"); } else //si le mode de recherche n'est pas par expression exacte { $mots = explode(" ", $recherche); //séparation des mots $nombre_mots = count ($mots); //compte le nombre de mots $valeur_requete = ''; for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois { $valeur_requete .= '' . $and_ou_or . 'nom LIKE\'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete } $requete_recherche = "SELECT * FROM camping WHERE $valeur_requete $sujets_fermes ORDER BY nom"; $selection_recherche = mysql_query($requete_recherche) or die("Erreur dans $requete_recherche :<br />".mysql_error()); //requête avec le résultat de la boucle dedans echo $requete_recherche; } $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche if ($nombre_resultats == 0) //s'il n'y a pas de résultat { echo 'aucun resultat.<a href="test.html">recommencer</a>'; } else //il y a au moins un résultat { echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats { echo '<p class="style1">Nom : ' . $resultats['nom'] . '<br /> Village : ' . $resultats['ville'] . '<br /><br /></p>'; } echo '<a href="test.html">recommencer</a>'; } } else //si on n'a pas validé le formulaire, on l'affiche { ?> <form method="post" action="index.php?page=test"> Votre recherche : <input type="text" name="recherche" /> <br /> Votre mode de recherche : <select name="mode"> <option value="expression_exacte">Expression exacte</option> <option value="tous_les_mots">Tous les mots</option> <option value="un_mot">Au moins un mot</option> </select> <br /> Sélectionner uniquement les sujets fermés : <input name="sujets_fermes" type="checkbox" /> <br /> <input type="submit" value="Rechercher" name="rechercher" /> </form> <?php } mysql_close(); //déconnexion de la bdd ?>
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
1 oct. 2010 à 14:38
1 oct. 2010 à 14:38
C'est exactement le problème que je t'avais signalé là :
https://forums.commentcamarche.net/forum/affich-19342214-erreur-sql-et-moteur-de-recherche#3
Pour le résoudre, modifie ta variable $and_ou_or en mettant des espaces autour de AND ou OR.
Xavier
https://forums.commentcamarche.net/forum/affich-19342214-erreur-sql-et-moteur-de-recherche#3
Pour le résoudre, modifie ta variable $and_ou_or en mettant des espaces autour de AND ou OR.
Xavier
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
2 oct. 2010 à 11:47
2 oct. 2010 à 11:47
lol je comprends pas !!!!!!!!!!!!!!!! à quelles lignes ?!!!! sur quels mots !!!! ?
chuis trop nul :(
help Xavier lol
chuis trop nul :(
help Xavier lol
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
2 oct. 2010 à 22:23
2 oct. 2010 à 22:23
Bonjour,
C'est là, rajoute des espaces :
Xavier
if ($mode == "tous_les_mots") { $and_ou_or = 'AND'; //on utilisera AND dans la boucle } else { $and_ou_or = 'OR'; //on utilisera OR dans la boucle }
C'est là, rajoute des espaces :
if ($mode == "tous_les_mots") { $and_ou_or = ' AND '; //on utilisera AND dans la boucle } else { $and_ou_or = ' OR '; //on utilisera OR dans la boucle }
Xavier
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
3 oct. 2010 à 10:50
3 oct. 2010 à 10:50
Bonjour !
C'est fait mais ça marche tjrs po :(
Erreur :
Erreur dans SELECT * FROM camping WHERE OR nom LIKE '%%' ORDER BY nom :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR nom LIKE '%%' ORDER BY nom' at line 1
Je te remets le code :
Et encore une fois merci pour ton temps
C'est fait mais ça marche tjrs po :(
Erreur :
Erreur dans SELECT * FROM camping WHERE OR nom LIKE '%%' ORDER BY nom :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR nom LIKE '%%' ORDER BY nom' at line 1
Je te remets le code :
if (isset($_POST['rechercher'])) //si on a validé le formulaire { $recherche = mysql_real_escape_string(htmlspecialchars($_POST['camping'])); //sécurisation des variables $mode = mysql_real_escape_string(htmlspecialchars($_POST['mode'])); if (isset($_POST['sujets_fermes'])) //si on a coché la case { $sujets_fermes = "AND P1='n'"; } else //si on ne l'a pas cochée { $sujets_fermes = ''; } if ($mode == "tous_les_mots") { $and_ou_or = ' AND '; //on utilisera AND dans la boucle } else { $and_ou_or = ' OR '; //on utilisera OR dans la boucle } if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte { $selection_recherche = mysql_query("SELECT * FROM camping WHERE nom LIKE '%$recherche%' $sujets_fermes ORDER BY nom"); } else //si le mode de recherche n'est pas par expression exacte { $mots = explode(" ", $recherche); //séparation des mots $nombre_mots = count ($mots); //compte le nombre de mots $valeur_requete = ''; for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois { $valeur_requete .= '' . $and_ou_or . ' nom LIKE \'%' . $mots[$nombre_mots_boucle] . '%\'';//modification de la variable $valeur_requete } $requete_recherche = "SELECT * FROM camping WHERE $valeur_requete $sujets_fermes ORDER BY nom"; $selection_recherche = mysql_query($requete_recherche) or die("Erreur dans $requete_recherche :<br />".mysql_error()); //requête avec le résultat de la boucle dedans echo $requete_recherche; } $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche if ($nombre_resultats == 0) //s'il n'y a pas de résultat { echo 'aucun resultat.<a href="test.html">recommencer</a>'; } else //il y a au moins un résultat { echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats { echo '<p class="style1">Nom : ' . $resultats['nom'] . '<br /> Village : ' . $resultats['ville'] . '<br /><br /></p>'; } echo '<a href="test.html">recommencer</a>'; } } else //si on n'a pas validé le formulaire, on l'affiche { ?> <form method="post" action="index.php?page=test"> Votre recherche : <input type="text" name="recherche" /> <br /> Votre mode de recherche : <select name="mode"> <option value="expression_exacte">Expression exacte</option> <option value="tous_les_mots">Tous les mots</option> <option value="un_mot">Au moins un mot</option> </select> <br /> Sélectionner uniquement les sujets fermés : <input name="sujets_fermes" type="checkbox" /> <br /> <input type="submit" value="Rechercher" name="rechercher" /> </form> <?php } mysql_close(); //déconnexion de la bdd ?>
Et encore une fois merci pour ton temps
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 3/10/2010 à 11:58
Modifié par Reivax962 le 3/10/2010 à 11:58
Pourquoi as-tu enlevé cette ligne qui était dans ton code d'origine ?
$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
Le problème vient de là... il faut remettre cette ligne !
Ça semble évident quand on lit la requête donnée dans le message d'erreur.
$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
Le problème vient de là... il faut remettre cette ligne !
Ça semble évident quand on lit la requête donnée dans le message d'erreur.
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
3 oct. 2010 à 12:11
3 oct. 2010 à 12:11
lol je l'ai remis :)
Mais le probleme c'est que le moteur ne fait pas son travail il affiche tous ce qu'est contenu dans la base :s
regarde le resultat : http://www.campingverdon.com/test.html
:)
Mais le probleme c'est que le moteur ne fait pas son travail il affiche tous ce qu'est contenu dans la base :s
regarde le resultat : http://www.campingverdon.com/test.html
:)
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
6 oct. 2010 à 11:16
6 oct. 2010 à 11:16
uP ?
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
6 oct. 2010 à 14:27
6 oct. 2010 à 14:27
Tiens, je croyais avoir répondu...
Donc...
Bonjour !
Ta requête, si on exclut le problème de l'espace manquante, se présente sous cette forme d'après ton message d'erreur :
SELECT * FROM camping WHERE OR nom LIKE '%%'
Le LIKE '%%' indique bien que tous les champs de la base doivent être retournés...
Il doit donc y avoir un soucis dans la façon dont tu récupères les valeurs du formulaire.
Au tout début de ton code, rajoute echo $recherche :
Et regarde ce que tu obtiens...
Xavier
Donc...
Bonjour !
Ta requête, si on exclut le problème de l'espace manquante, se présente sous cette forme d'après ton message d'erreur :
SELECT * FROM camping WHERE OR nom LIKE '%%'
Le LIKE '%%' indique bien que tous les champs de la base doivent être retournés...
Il doit donc y avoir un soucis dans la façon dont tu récupères les valeurs du formulaire.
Au tout début de ton code, rajoute echo $recherche :
if (isset($_POST['rechercher'])) //si on a validé le formulaire { $recherche = mysql_real_escape_string(htmlspecialchars($_POST['camping'])); echo $recherche; ...
Et regarde ce que tu obtiens...
Xavier
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
6 oct. 2010 à 14:53
6 oct. 2010 à 14:53
Bonjour Xavier :)
Toujours le meme probleme snif lol
Je te remets le code en entier
Toujours le meme probleme snif lol
Je te remets le code en entier
if (isset($_POST['rechercher'])) //si on a validé le formulaire { $recherche = mysql_real_escape_string(htmlspecialchars($_POST['camping'])); echo $recherche; //sécurisation des variables $mode = mysql_real_escape_string(htmlspecialchars($_POST['mode'])); if (isset($_POST['sujets_fermes'])) //si on a coché la case { $sujets_fermes = "AND P1='n'"; } else //si on ne l'a pas cochée { $sujets_fermes = ''; } if ($mode == "tous_les_mots") { $and_ou_or = ' AND '; //on utilisera AND dans la boucle } else { $and_ou_or = ' OR '; //on utilisera OR dans la boucle } if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte { $selection_recherche = mysql_query("SELECT * FROM camping WHERE nom LIKE '%$recherche%' $sujets_fermes ORDER BY nom"); } else //si le mode de recherche n'est pas par expression exacte { $mots = explode(" ", $recherche); //séparation des mots $nombre_mots = count ($mots); //compte le nombre de mots $valeur_requete = ''; for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois { $valeur_requete .= '' . $and_ou_or . ' nom LIKE \'%' . $mots[$nombre_mots_boucle] . '%\'';//modification de la variable $valeur_requete } $valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle $requete_recherche = "SELECT * FROM camping WHERE $valeur_requete $sujets_fermes ORDER BY nom"; $selection_recherche = mysql_query($requete_recherche) or die("Erreur dans $requete_recherche :<br />".mysql_error()); //requête avec le résultat de la boucle dedans echo $requete_recherche; } $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche if ($nombre_resultats == 0) //s'il n'y a pas de résultat { echo 'aucun resultat.<a href="test.html">recommencer</a>'; } else //il y a au moins un résultat { echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats { echo '<p class="style1">Nom : ' . $resultats['nom'] . '<br /> Village : ' . $resultats['ville'] . '<br /><br /></p>'; } echo '<a href="test.html">recommencer</a>'; } } else //si on n'a pas validé le formulaire, on l'affiche { ?> <form method="post" action="index.php?page=test"> Votre recherche : <input type="text" name="recherche" /> <br /> Votre mode de recherche : <select name="mode"> <option value="expression_exacte">Expression exacte</option> <option value="tous_les_mots">Tous les mots</option> <option value="un_mot">Au moins un mot</option> </select> <br /> Sélectionner uniquement les sujets fermés : <input name="sujets_fermes" type="checkbox" /> <br /> <input type="submit" value="Rechercher" name="rechercher" /> </form> <?php } mysql_close(); //déconnexion de la bdd ?>
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
6 oct. 2010 à 16:16
6 oct. 2010 à 16:16
Hum, oui, bien sûr que le problème est toujours le même : ce que je t'ai demandé de faire ne devait pas le corriger, mais donner des informations concernant le problème...
Sinon, en regardant ton code HTML, le problème saute aux yeux :
d'un côté :
<input type="text" name="recherche" />
de l'autre :
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['camping']));
Ce n'est pas le même nom de part et d'autre, il faut que tu corriges ça.
Tu peux donc enlever le echo $recherche...
Sinon, en regardant ton code HTML, le problème saute aux yeux :
d'un côté :
<input type="text" name="recherche" />
de l'autre :
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['camping']));
Ce n'est pas le même nom de part et d'autre, il faut que tu corriges ça.
Tu peux donc enlever le echo $recherche...
fredodo13
Messages postés
89
Date d'inscription
mercredi 17 mars 2010
Statut
Membre
Dernière intervention
12 octobre 2022
3
6 oct. 2010 à 18:16
6 oct. 2010 à 18:16
Et ça marche :) !!!!!!!
Merci beaucop Xavier pour tous le temps que tu as consacré à mon probleme !!!!
Bonne soirée :)
Merci beaucop Xavier pour tous le temps que tu as consacré à mon probleme !!!!
Bonne soirée :)