Problème avec moteur de recherche.

Eléphant du PHP | 75 Messages

17 mars 2010, 11:46

Bonjour,

Je commence un petit script pour un moteur de recherche.
Ce dernier doit être en mesure de recherche le terme voulu dans plusieurs BDD. Ainsi quand un membre décidera de faire une recherche, il tombera sur les pseudos, titres et contenus d'articles qui correspondent à sa recherche.

J'ai fais un premier jet mais je rencontre un problème avec la boucle.
<?php
session_start();
if(isset($_POST['submit'])){
	if(empty($_POST['recherche'])){
		$erreur = 'Le champ recherche est vide';
	}
	else{
		require 'config.php';
		$connexion_sql = mysql_connect(DB_HOST,DB_LOGIN,DB_PASS); 
		$connexion_bdd = mysql_select_db(DB_BDD);
		
		$recherche = mysql_real_escape_string($_POST['recherche']);
		
		$lecture = mysql_query("SELECT titre,contenu,pseudo FROM membre,articles WHERE pseudo LIKE '%$recherche%' OR titre LIKE '%$recherche%' OR nom LIKE '%$recherche%' OR prenom LIKE '%$recherche%'") or die('Erreur :'.mysql_error());
		while($retour = mysql_fetch_array($lecture)){
			if(isset($retour['pseudo']) && $retour['pseudo'] !== null){
				echo 'Résultat de la recherche pour les pseudo : 
				<br /><br />
				'.$retour['pseudo'].
				'<br /><br />';
			}
		}
	}
}
?>
<form method="post">
	<input type="text" name="recherche">
	<input type="submit" name="submit">
</form> 
Dans ma BDD, j'ai trois membre : Jean, JeanJean et Test.

Quand j'enlève le while et que je cherche le mot clé Jean, j'ai le résultat qui s'affiche.
Ensuite, pour afficher plusieurs pseudo, j'ai ajouté une boucle.

Toujours en faisant une recherche sur Jean, voilà son résultat :

R
ésultat de la recherche pour les pseudo :

Jean

Résultat de la recherche pour les pseudo :

JeanJean

Résultat de la recherche pour les pseudo :

Jean

Résultat de la recherche pour les pseudo :

JeanJean

Résultat de la recherche pour les pseudo :

Jean

Résultat de la recherche pour les pseudo :

JeanJean

Résultat de la recherche pour les pseudo :

Jean

Résultat de la recherche pour les pseudo :

JeanJean

Résultat de la recherche pour les pseudo :

Jean

Résultat de la recherche pour les pseudo :

JeanJean

Résultat de la recherche pour les pseudo :

Jean

Résultat de la recherche pour les pseudo :

JeanJean

Résultat de la recherche pour les pseudo :

Jean

Résultat de la recherche pour les pseudo :

JeanJean

Résultat de la recherche pour les pseudo :

Jean

Résultat de la recherche pour les pseudo :

JeanJean
C'est moi où j'ai raté quelque chose ?

Merci. ;)

Eléphant du PHP | 86 Messages

17 mars 2010, 12:04

Salut,

C'est ta requête Sql qui pose problème.
En effet, à partir du moment où tu as plusieurs tables, si tu ne fais pas de jointure, tu obtiens un produit cartésien.

Eléphant du PHP | 75 Messages

17 mars 2010, 13:30

Tu pourrais m'en dire plus sur le type de jointure qui correspond à ma requête SQL ?

Merci. ;)

Eléphant du PHP | 75 Messages

17 mars 2010, 14:24

Après renseignements, j'ai fais quelque chose comme ça, mais j'ai toujours le même problème. :/
		$lecture = mysql_query("SELECT articles.titre,articles.contenu,membre.pseudo FROM membre,articles WHERE membre.pseudo LIKE '%$recherche%' OR articles.titre LIKE '%$recherche%' OR articles.contenu LIKE '%$recherche%'") or die('Erreur :'.mysql_error());

Eléphant du PHP | 86 Messages

17 mars 2010, 15:18

Visiblement tu ne sais pas ce qu'est une jointure donc je t'invite à lire la doc Sql.
Tu dois avoir un champ commun entre tes tables "membre" et "articles".
Exemple de jointure conditionnelle (dans le where) dans ton cas :
SELECT articles.titre,articles.contenu,membre.pseudo FROM membre,articles WHERE membre.id=articles.id_membre AND ...
Tu peux aussi utiliser un LEFT JOIN.