Erreur sql et moteur de recherche
Résolu
fredodo13
Messages postés
89
Date d'inscription
Statut
Membre
Dernière intervention
-
fredodo13 Messages postés 89 Date d'inscription Statut Membre Dernière intervention -
fredodo13 Messages postés 89 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous !!
J'essaye de faire un petit moteur de recherche avec un le tuto sur siteduzero sauf que ça passe pas :( si quelqun aurai la gentilesse de m'aider svp...
Mon erreur :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /homepages/8/d246321979/htdocs/test.php on line 45
aucun resultat.recommencer
Mon code :
<?php
mysql_connect("dbXXXX.1and1.fr", "dboXXXXXX", "MDP"); //connexion à la bdd
mysql_select_db("dbXXXXX");
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 titre LIKE '%$recherche%' $sujets_fermes ORDER BY id DESC");
}
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 . ' titre 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
$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
}
$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>Titre:</strong> ' . $resultats['titre'] . '<br />
<strong>Fermé:</strong> ' . $resultats['ferme'] . '<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
?>
MERCI PAR AVANCE
J'essaye de faire un petit moteur de recherche avec un le tuto sur siteduzero sauf que ça passe pas :( si quelqun aurai la gentilesse de m'aider svp...
Mon erreur :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /homepages/8/d246321979/htdocs/test.php on line 45
aucun resultat.recommencer
Mon code :
<?php
mysql_connect("dbXXXX.1and1.fr", "dboXXXXXX", "MDP"); //connexion à la bdd
mysql_select_db("dbXXXXX");
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 titre LIKE '%$recherche%' $sujets_fermes ORDER BY id DESC");
}
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 . ' titre 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
$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
}
$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>Titre:</strong> ' . $resultats['titre'] . '<br />
<strong>Fermé:</strong> ' . $resultats['ferme'] . '<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
?>
MERCI PAR AVANCE
A voir également:
- Erreur sql et moteur de recherche
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Pourquoi mon moteur de recherche change tout seul ✓ - Forum Virus
- Copiez la ligne qui indique aux moteurs de recherche de ne pas référencer la page. ✓ - Forum Référencement
- Consultez le code source de cette page. copiez la ligne qui indique aux moteurs de recherche de ne pas référencer la page. ✓ - Forum Référencement
20 réponses
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
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());
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 ...
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
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
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
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;
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 ?>
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
lol je comprends pas !!!!!!!!!!!!!!!! à quelles lignes ?!!!! sur quels mots !!!! ?
chuis trop nul :(
help Xavier lol
chuis trop nul :(
help Xavier lol
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
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
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.
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
:)
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
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 ?>
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...