Page 1 sur 2

Moteur de recherche

Posté : 26 mai 2010, 19:44
par spidercrash
bonjour a tous,

Je fait des teste de moteur de recherche pour mon site par rapport au titre du produit voici le script de ma page de traitement
<?php
include ('php/connect.php');



echo "
<html>

<head>

<title>Résultat de la recherche</title>

</head>

<body>";

if (($Mot == "")||($Mot == "%")) {
// Si aucun mot clé n'a été saisi,
// le script demande à l'utilisateur
// de bien vouloir préciser un mot clé

	echo "
	Veuillez entrer un mot clé s'il vous plaît!
	<p>";

}

else {
// On selectionne les enregistrements contenant le mot clé
// dans les keywords ou le titre
	$query = "SELECT distinct count(titreannonce) FROM annonces
	WHERE titreannonce LIKE \"%$Mot%\"
	OR titreannonce LIKE \"%$Mot%\"
	";

	$result = mysql_query($query);

	$row = mysql_fetch_row($result);

	$Nombre = $row[0];

// Si aucun enregistrement n'est retourné,
// on affiche un message adéquat
if ($Nombre == "0") {
	echo "
	<h2>Aucun résultat ne correspond à votre recherche</h2>

	<p>

	";

}

// Sinon, on affiche le nombre d'enregistrements correspondant
// et les résultats eux-mêmes
else {
	$query = "SELECT distinct titreannonce,descriptionannonce, FROM annonces
	WHERE titreannonce LIKE \"%$Mot%\"
	OR titreannonce LIKE \"%$Mot%\" ORDER by titreannonce ASC";

	$result = mysql_query($query);

	// Si un seul enregistrement est trouvé, on affiche un message au singulier
	if ($Nombre == "1") {
	echo "
	<a name=\"#resultat\"><h2>Résultat: Un article trouvé</h2></a>

	<p>";

	}
	// Dans le cas contraire le message est au pluriel...
	else {
	echo "
	<a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a>

	<p>";

	}
	while($row = mysql_fetch_row($result))
	{
		echo "
		<p>\n
		<b>$row[2]</b>\n
		<br><a href=\"../$row[0]\">Visualiser l'article</a>\n
		<p>\n
		";

	}
}

}

// on ferme la base
mysql_close();

?>

</body>

</html>
Le probléme quand l'article n'est pas trouver le message apparait bien comme quoi pas d'article portant se nom n'a pas était trouvé.
cependant si il trouve quelques chose le nombre d'article trouvé apparait bien mais pas l'affichage de l'article.

j'ai cette erreur.
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /xxx/xxx/www/recherche.php on line 79
je doit avoir un probléme avec ma requete je pence

Re: Moteur de recherche

Posté : 26 mai 2010, 20:15
par stealth35
affiche tes erreurs
$result = mysql_query($query) or exit($query . '<br />' .  mysql_error());
EDIT 1: et en mysql c'est guillemet simple pas double :wink:
toujours tester tes requêtes avant

EDIT 2: et t'as mis 2 fois titreannonce dans ta requete...

:mrgreen: t'es fatigué ?

Re: Moteur de recherche

Posté : 26 mai 2010, 20:50
par spidercrash
merci ou c'est vrai il y avait pas mal d'erreur la fatigue :lol:
<?php
include ('php/connect.php');



echo "
<html>

<head>

<title>Résultat de la recherche</title>

</head>

<body>";

if (($Mot == "")||($Mot == "%")) {
// Si aucun mot clé n'a été saisi,
// le script demande à l'utilisateur
// de bien vouloir préciser un mot clé

	echo "
	Veuillez entrer un mot clé s'il vous plaît!
	<p>";

}

else {
// On selectionne les enregistrements contenant le mot clé
// dans les keywords ou le titre
	$query = "SELECT distinct count(titreannonce) FROM annonces
	WHERE titreannonce LIKE '%$Mot%'";
 $result = mysql_query($query) or exit($query . '<br />' .  mysql_error());
	$result = mysql_query($query);

	$row = mysql_fetch_row($result);

	$Nombre = $row[0];

// Si aucun enregistrement n'est retourné,
// on affiche un message adéquat
if ($Nombre == "0") {
	echo "
	<h2>Aucun résultat ne correspond à votre recherche</h2>

	<p>

	";

}

// Sinon, on affiche le nombre d'enregistrements correspondant
// et les résultats eux-mêmes
else {
	$query = "SELECT distinct titreannonce,descriptionannonce FROM annonces
	WHERE titreannonce LIKE '%$Mot%'
	ORDER by titreannonce ASC";

	$result = mysql_query($query);

	// Si un seul enregistrement est trouvé, on affiche un message au singulier
	if ($Nombre == "1") {
	echo "
	<a name=\"#resultat\"><h2>Résultat: Un article trouvé</h2></a>

	<p>";

	}
	// Dans le cas contraire le message est au pluriel...
	else {
	echo "
	<a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a>

	<p>";

	}
	while($row = mysql_fetch_row($result))
	{
		echo "
		<p>\n
		<b>$row[2]</b>\n
		<br><a href=\"../$row[0]\">Visualiser l'article</a>\n
		<p>\n
		";

	}
}

}

// on ferme la base
mysql_close();

?>

</body>

</html>

Par contre il m'affiche le resultat sous la forme d'un lien visualiser l'article.

Code : Tout sélectionner

<br><a href=\"../$row[0]\">Visualiser l'article</a>\n
je peut faire apparaitre directement les articles présent sous forme de titre de l'article ?
je pence qu'il faudrait que je face une boucle reprend un echo $data[titreannonce] non ?

Re: Moteur de recherche

Posté : 26 mai 2010, 20:57
par stealth35
je peut faire apparaitre directement les articles présent sous forme de titre de l'article ?
je pence qu'il faudrait que je face une boucle reprend un echo $data[titreannonce] non ?
pas compris

Re: Moteur de recherche

Posté : 26 mai 2010, 21:15
par Berzemus
remarque subliminale:
On ne fait pas un moteur de recherche avec LIKE mais avec MATCH ... AGAINST()

Re: Moteur de recherche

Posté : 26 mai 2010, 21:19
par stealth35
remarque subliminale:
On ne fait pas un moteur de recherche avec LIKE mais avec MATCH ... AGAINST()
en moteur MyISAM bien sur :wink:

Re: Moteur de recherche

Posté : 26 mai 2010, 21:44
par spidercrash
Je viens de regarder pour les moteur MyISAM en faite faut que je transforme a ma requete sql a se que j'ai comprit pour que cela face quelques chose du genre

$query = "SELECT distinct count(titreannonce) FROM annonces
WHERE MATCH('%$Mot%') AGAINST ('*' IN BOOLEAN MODE);"
non ?
sinon doit je changer tout mon code ? ou juste mes requete

Re: Moteur de recherche

Posté : 26 mai 2010, 21:47
par stealth35
juste les requetes, mais la elle est pas bonne, faut aussi que tes champs sois en FULLTEXT

Re: Moteur de recherche

Posté : 27 mai 2010, 10:23
par spidercrash
Tu veut dire que dans ma table annonces mon champs titreannonce soit en fulltext ? car je les mit en VARCHAR.

sinon pour la requete cela pourrai etre ca ?
$query = "SELECT distinct count(titreannonce) FROM annonces
WHERE MATCH (titreannonce) against ('$Mot' IN BOOLEAN MODE)");

Re: Moteur de recherche

Posté : 27 mai 2010, 10:43
par stealth35
juste ca
SELECT DISTINCT COUNT(titreannonce) FROM annonces WHERE MATCH (titreannonce) AGAINST ('$Mot')
(juste pour toi essaye de respecter la casse c'est plus lisible)

FULLTEXT c'est un type d'index
faut faire avant sur ta base
ALTER TABLE `annonces` ADD FULLTEXT (`titreannonce`)
ou dans phpmyadmin quand tu va dans structure dans ton champs action y'a un T bleu tu cliques dessus

Re: Moteur de recherche

Posté : 27 mai 2010, 10:53
par spidercrash
merci pour ta réponse je vais essayer cela des que j'ai accées a mon serveur.
Cependant pour info :wink: pourquoi mettre titreannonce en fulltext ? sur ma table cela ne changera rien derrière pour les autre enregistrement ?

Re: Moteur de recherche

Posté : 27 mai 2010, 10:59
par stealth35
merci pour ta réponse je vais essayer cela des que j'ai accées a mon serveur.
Cependant pour info :wink: pourquoi mettre titreannonce en fulltext ? sur ma table cela ne changera rien derrière pour les autre enregistrement ?
non FULLTEXT c'est un type d'index, sans ca MATCH ... AGAINST ne marche pas

Re: Moteur de recherche

Posté : 27 mai 2010, 11:05
par spidercrash
oK, apres je pourrai afficher le resultat de la recherche sous forme de tableau,
MyIsam fonctionne t'il avec les jointures de table ?
car j'ai une table photo et annonce

Re: Moteur de recherche

Posté : 27 mai 2010, 11:09
par stealth35
oK, apres je pourrai afficher le resultat de la recherche sous forme de tableau,
MyIsam fonctionne t'il avec les jointures de table ?
car j'ai une table photo et annonce
c'est pareil ca change rien

Re: Moteur de recherche

Posté : 27 mai 2010, 15:24
par spidercrash
par contre je fait mes recherche sur le titre je viens de m'apercevoir quand la recherche est inférieur a 4 caractères il me trouve pas l'article mais si je change le titre de l'article et je lui met 5 caractères a se moment la il le trouve bien :D.

votre avis m'interresse dois-je laisser une recherche seulement sur le titre ou sur le titre et la description du produit ?