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
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



A voir également:

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
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 :
$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
0
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
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());
0
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
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 ...
0
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
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
?>
0

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
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
0
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
up!
0
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
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 !
0
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
Fais un echo de la requête, et dis-nous ce qui s'affiche exactement.
0
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
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
0
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
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 :

$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;
0
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
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 :

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
?>
0
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
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
0
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
lol je comprends pas !!!!!!!!!!!!!!!! à quelles lignes ?!!!! sur quels mots !!!! ?

chuis trop nul :(


help Xavier lol
0
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
Bonjour,

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
0
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
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 :

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
0
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
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.
0
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
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

:)
0
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
uP ?
0
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
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 :
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
0
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
Bonjour Xavier :)

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
?>
0
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
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...
0
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
Et ça marche :) !!!!!!!

Merci beaucop Xavier pour tous le temps que tu as consacré à mon probleme !!!!

Bonne soirée :)
0