Systeme de recherche

neji_44 Messages postés 7 Date d'inscription vendredi 27 mai 2005 Statut Membre Dernière intervention 13 juin 2005 - 27 mai 2005 à 12:12
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 28 mai 2005 à 13:56
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

vince1415 Messages postés 88 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 24 janvier 2006
27 mai 2005 à 13:04
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
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
27 mai 2005 à 14:53
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>
0
neji_44 Messages postés 7 Date d'inscription vendredi 27 mai 2005 Statut Membre Dernière intervention 13 juin 2005
27 mai 2005 à 16:24
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.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 mai 2005 à 11:14
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vince1415 Messages postés 88 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 24 janvier 2006
28 mai 2005 à 13:37
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 !!
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 mai 2005 à 13:56
" 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>
0
Rejoignez-nous