Systeme de recherche

Signaler
Messages postés
7
Date d'inscription
vendredi 27 mai 2005
Statut
Membre
Dernière intervention
13 juin 2005
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour, je suis un petit nouveau en PHP (je m'y
suis mis il y a seulement 3 semaine) et je suis en train de faire un
systeme de recherche pour un site que je suis en train de faire,
malheureusement lorsque je tape un mot existant, la recherche me
renvoie un message me disant qu'aucun film ne correspond dans la base
de données qui, elle, contient ce mot j'en suis sur! Pouvez-vous
m'aider


Le code est le suivant:






Code:, ----
<? session_start();?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<title>Gregobois</title>

<link href="css/style.css" rel="stylesheet" type="text/css">

<?

echo'';

?>

<?

//include("connexion.inc.php");

include("fonction.php");

connection();

headerG();

?>

Section recherche

<table border="0" cellspacing="2" cellpadding="1">

----,

<?

if ($_POST['sujet']==\"\")

{

echo 'Aucun mot n\'a été tapé, veuillez en rentrer un.

';

}

else

{

$sujet = htmlentities(addslashes($_POST['sujet']));

if (strlen($sujet)<3)

{

echo 'Veuillez entrez plus de 3 lettres svp.

';

}

else

{

$sql = \"SELECT acceuil.accueil,
materiel.Description_materiel, pieces.Description_piece FROM acceuil,
materiel, pieces WHERE acceuil.accueil LIKE %\".$sujet.\"% OR
materiel.Description_materiel LIKE %\".$sujet.\"% OR
pieces.Description_piece LIKE %\".$sujet.\"%\";

@$result = mysql_query($sql);

if(!$sql)

{

echo 'Erreur lors de l\'execution de la
requete

';

}

else

{

@$test = mysql_num_rows($sql);

if ($test >0)

{

while ($donnees =
mysql_fetch_array($sql))

{

echo '----
';

echo '';

echo '';

echo '----
';

echo
', '.result.'</td>';

echo '';

}

}

else

{

echo'Aucun résultat n\' a été
trouvé.

';

}

}

}

}

?>

</td>













</html>


<?


footer();


?>
</td></tr></tbody>
</table>

6 réponses

Messages postés
88
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
24 janvier 2006

Bonjour,

deja ta requéte n'est pas super il faudrait ke tu fasse les jointures
entre les tables que tu inclu sinon ca renvoie pas forcement ce qu'on
souhaite et c'est un peu génant.

Tu peut également enlever les guillemet et les points pour la concatenation, les variables sont interprété dans le texte.

sinon le principe a l'air pas mal.

bonne continuation
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



remplace <? par <?php et if ($_POST['sujet']= ="") par if(!isset($_POST['sujet']) OR empty($_POST['sujet']))



Ensuite je vois ça :



echo '<tr>';

echo '<td>';

echo '</tr>';

echo '<tr>';


echo '<td>'.result.'</td>';


echo '</tr>';



tu peux le remplacer par ça :



echo '<tr></tr>

<tr><td>',$result,'</td>

</tr>';



Ensuite ton mot à rechercher contient des accents ou des mots html ? si
oui sous quel format est-il stocké dans la base de données (ton mot est
encodé en HTML ou est sous forme brute avec les accents ?)



Ensuite vince je vois pas en quoi mettre une jointure dans la requête va te donner plus de résultats...

<hr size ="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
7
Date d'inscription
vendredi 27 mai 2005
Statut
Membre
Dernière intervention
13 juin 2005

C'est sympa les gars mes vos deux reponses ne resolvent pas mon
probleme, malgré tout ca, il me dit qu'il ne trouve pas le mot....



Dans la base, les champs sont remplie avec du texte qui sont aux format text.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,



une jointure, pourquoi faire en effet...? Il recherche juste un mot dans 3 tables differentes, on se fiche des jointures.



Tu fais un htmlentities et un addslashes sur ta variable post : bref,
tu y ajoutes des \ et tu transformes les entites en leur code. Est-ce
que tes textes sont enregistres ainsi dans ta base ?



mysql_real_escape-string() est a privilegier dans des cas d'insertions dans une base mysql, au passage.



Et, cela m'etonne qu'Antho n'en ai pas parle, mais les index FULLTEXT de mysql sont plus adaptes a des recherches.
Messages postés
88
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
24 janvier 2006

Bein la jointure permet de ne pas récupérer des résultats qui n'ont
aucun rapport, il fait une requéte sur 3 tables et affiche un attribut
de chaque table. Si il n'y a pas de jointure le SGBD fait tous les
assemblages possibles ce qui risque de ramener des informations entre
les 3 tables qui n'on aucun rapport.

enfin bon si vous dites que ca sert a rien tant mieux moi je pense
autre choses. Je dois dire que je conné mal mysql j'ai l'habitude de
travailler sous oracle bien plus puissant !!
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
" Et, cela m'etonne qu'Antho n'en ai pas parle, mais les index FULLTEXT de mysql sont plus adaptes a des recherches."



A force de le dire, on oublie... (lol)



Bah les indexs FULLTEXT sont meilleurs si ta table contient beaucoup
d'enregistrements (ils permettent aussi une meilleure précision que les
LIKE pourris). Le problème des indexs FULLTEXT est qu'ils prennent
énormément de place dans la base.

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>