begin process at 2008 05 16 05:33:16
1 173 216 membres
58 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOTEUR DE RECHERCHE DANS UNE BDD


Information sur la source

Catégorie :Application Classé sous : recherche, mot, texte, moteur, bdd Niveau : Initié Date de création : 28/09/2006 Vu : 11 878

Note :
1 / 10 - par 2 personnes
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Bon alors le code est très simple ! tout est presque dans le titre ^^

Ce moteur de recherche va vous sortir une liste (infinie mais limitable ^^) où il affichera ce que vous lui demanderez d'afficher comme variable, en cherchant dans chaque ligne (de votre base de donnée où vous voulez effectuer la recherche) le(s) mot(s) à chercher.

On peut recherche grace à ce script 1 mot, ou plusieurs mots mais il va cherche la chaîne de mots que vous avez entré et pas prendre 1 mot 1 par 1. C'est le seul inconvéniant. Par contre si vous entrer la moitié de votre mot il va vous trouver votre mot complet !

Voila un exemple du script http://henvimal.a.free.fr/sG.fr dans la page News il y a un ptit moteur de recherche made by me testez le !

Source

  • Bon alors le truc aussi c'est que vous pouvez cherche que dans une table ! pas 2 table ...
  • Donc je vous donne un exemple de table a créer pour que vous compreniez mieux :
  • CREATE TABLE valdemarne (
  • id int(4) NOT NULL auto_increment,
  • rohff varchar(255) default NULL,
  • rimk varchar(255) default NULL,
  • booba varchar(255) default NULL,
  • PRIMARY KEY (id)
  • )
  • Entrez plusieurs ligne avec des mots ke vous rechercherez apres pour TaTer le moteur de recherche koi ^^
  • apres voilà le code à mettre dans une page recherche.php :
  • <table border="0" cellspacing="0" cellpadding="1" width='100%'>
  • <tr>
  • <td align='center'>
  • <form method="get" action="recherche.php">
  • <b>Recherche : </b><input type="text" name="search" size='35' value='<? echo "$search"; ?>'>
  • <input type="submit" value="OK!">
  • </form>
  • </td>
  • </tr>
  • <tr>
  • <td height='10'>
  • </td>
  • </tr>
  • <?
  • $host = "localhost"; // votre host sql (ex: sql.free.fr)
  • $user = "root"; // votre identifiant
  • $pass = ""; // votre password
  • $bdd = "VOTRE_BDD"; // le nom de votre base de donné
  • $table = "valdemarne"; // par défaut le nom de votre table est news mais si vous voulez le changer libre a vous (n'oubliez pas de changer aussi le fichier .sql)
  • $c = @mysql_connect($host,$user,$pass) or die("connection impossible");
  • @mysql_select_db("$bdd",$c) or die("selection impossible");
  • $result = mysql_query("SELECT count(id) FROM ".$table." WHERE `rohff` LIKE '%$search%' OR `rimk` LIKE '%$search%' OR `booba` LIKE '%$search%'");
  • $ret = mysql_fetch_array($result);
  • // nombre de lignes
  • $nb_results = $ret[0];
  • if ($nb_results<=0 OR empty($search)) {
  • if (empty($search)) {
  • echo "<tr><td><p class='texte'>Pas de recherche à effectuer.</td></tr>";
  • } else {
  • echo "<tr><td><p class='texte'>Il y a <b>$nb_results</b> résultats à votre recherche. Recommencez avec un seul mot...</td></tr>";
  • }
  • } else {
  • echo "<tr><td><p class='texte'>Il y a <b>$nb_results</b> résultats à votre recherche.</td></tr>";
  • $sql = "select * from $table WHERE `rohff` LIKE '%$search%' OR `rimk` LIKE '%$search%' OR `booba` LIKE '%$search%' order by id DESC";
  • if($p = @mysql_query($sql,$c)){
  • while($r = @mysql_fetch_array($p)){
  • $id = "$r[id]";
  • $rohff = "$r[rohff]";
  • $rimk = "$r[rimk]";
  • $booba = "$r[booba]";
  • echo "<tr>
  • <td>
  • $rohff
  • </td>
  • <td>
  • $rimk
  • </td>
  • <td>
  • $booba
  • </td>
  • </tr>";
  • }
  • }
  • }
  • ?>
  • </table>
Bon alors le truc aussi c'est que vous pouvez cherche que dans une table ! pas 2 table ...

Donc je vous donne un exemple de table a créer pour que vous compreniez mieux : 
CREATE TABLE valdemarne (
  id int(4) NOT NULL auto_increment,
  rohff varchar(255) default NULL,
  rimk varchar(255) default NULL,
  booba varchar(255) default NULL,
  PRIMARY KEY  (id)
)
Entrez plusieurs ligne avec des mots ke vous rechercherez apres pour TaTer le moteur de recherche koi ^^

apres voilà le code à mettre dans une page recherche.php :
<table border="0" cellspacing="0" cellpadding="1" width='100%'>
<tr>
<td align='center'>
<form method="get" action="recherche.php">
 <b>Recherche : </b><input type="text" name="search" size='35' value='<? echo "$search"; ?>'>
 <input type="submit" value="OK!">
</form>
</td>
</tr>
<tr>
<td height='10'>
</td>
</tr>
<?
$host = "localhost";  // votre host sql (ex: sql.free.fr)
$user = "root";  // votre identifiant
$pass = "";  // votre password
$bdd  = "VOTRE_BDD"; // le nom de votre base de donné
$table = "valdemarne"; // par défaut le nom de votre table est news mais si vous voulez le changer libre a vous (n'oubliez pas de changer aussi le fichier .sql)

$c = @mysql_connect($host,$user,$pass) or die("connection impossible");
@mysql_select_db("$bdd",$c) or die("selection impossible");
$result = mysql_query("SELECT count(id) FROM ".$table." WHERE `rohff` LIKE '%$search%' OR `rimk` LIKE '%$search%' OR `booba` LIKE '%$search%'");
$ret = mysql_fetch_array($result);
// nombre de lignes
$nb_results = $ret[0];
if ($nb_results<=0 OR empty($search)) {
if (empty($search)) {
echo "<tr><td><p class='texte'>Pas de recherche à effectuer.</td></tr>";
} else {
echo "<tr><td><p class='texte'>Il y a <b>$nb_results</b> résultats à votre recherche. Recommencez avec un seul mot...</td></tr>";
}
} else {
echo "<tr><td><p class='texte'>Il y a <b>$nb_results</b> résultats à votre recherche.</td></tr>";

$sql = "select * from $table WHERE `rohff` LIKE '%$search%' OR `rimk` LIKE '%$search%' OR `booba` LIKE '%$search%' order by id DESC";

if($p = @mysql_query($sql,$c)){
while($r = @mysql_fetch_array($p)){
 $id = "$r[id]";
 $rohff = "$r[rohff]";
 $rimk = "$r[rimk]";
 $booba = "$r[booba]";
 
echo "<tr>
<td>
$rohff
</td>
<td>
$rimk
</td>
<td>
$booba
</td>
</tr>";

}
}
}
?>
</table>











Conclusion

Voila tout simple et tout con mais ca marche. Ce code ne demande qu'à être amélioré !
  • signaler à un administrateur
    Commentaire de malalam le 28/09/2006 16:48:57 administrateur CS

    hello,

    merci de justifier les notes pourries avec un COMMENTAIRE.
    J'ai supprimé le 1/10 en attendant un commentaire constructif.

  • signaler à un administrateur
    Commentaire de HenvimaL le 28/09/2006 19:26:28

    je comprends pas ce que tu veux dire ...

  • signaler à un administrateur
    Commentaire de garfield90 le 28/09/2006 20:17:58

    PHP :
    Hello world mal codé
    Gestion d'erreur par die() => je trouve ca pas propre
    Inutilité de définir les variables de connexion (host, table, user, pass, database) car utilisé qu'une fois
    $c est un nom incomprehensible
    Aucune vérification sur la présence de $_GET['search'], au hasard par isset
    -> empty ne sert pas a ca, meme si il y répond presque correctement

    # if ($nb_results<=0 OR empty($search)) {
    # if (empty($search)) {
    => Pourquoi faire une double vérification sur le fait que $search est vide (et non pas non défini)
    => $nb_result est soit false soit >= 0
    ==> si il est égale (===) à false alors il y a une erreur dans ta requete
    ==> si il est égale (===) à 0 alors il n'y a aucune réponse
    - ton script est plus que sujet aux attaques type XSS ( utilise mysql_real_escape_string pour l'empecher )
    - $ret = mysql_num_rows de souvenir ( j'utilise une classe donc à vérifié ;)

    SQL :
    Hello world aussi car utilise la fonction LIKE pour la recherche c'est un classique

    HTML :
    utilisation de table non nécessaire, est mal faite (pas de colspan)
    utilisation de balise obsolète

    CONCLUSION :
    Encore un exemple de code à ne pas faire car :
    - code qui montre beaucoup de mauvaise habitude
    - code mal penser
    - code inutile ( car tout le monde avec un peu de pratique et une utilisation correcte d'un moteur trouvera mieux)

    NOTE :
    0 pour tout ce que j'ai écrit
    0 car c'est loin d'être un code d'initié (débutant à la rigueur car j'estime qu'il n'en a pas le niveau)

  • signaler à un administrateur
    Commentaire de HenvimaL le 28/09/2006 23:06:20

    bon ok j'avoue... en fait j'ai appris le LIKE y'a pas longtemps donc jvoulais faire une source tte bête mais qui s'adapte enfin voila... moi jla trouve utile ...

  • signaler à un administrateur
    Commentaire de JulSoft le 29/09/2006 02:00:20

    On peut efectivement faire ça en une seule requete mysql:
    $result = mysql_query($sql,$c);
    $nb_results = mysql_num_rows($result);
    ... lecture des resultats

  • signaler à un administrateur
    Commentaire de younes371 le 29/09/2006 03:24:29

    JulSoft, je te demande si tu peux copier ici un code améliorer, merci,
    car je travail sur ça, et j aime faire un code améliorer, puisque j ai deja fait comme l exemple cité en haut

  • signaler à un administrateur
    Commentaire de malalam le 29/09/2006 08:12:12 administrateur CS

    henvimal => ce n'est pas à toi que ce message s'adressait, mais à celui qui avait mis 1/10 sans laisser de commentaire. Je viens d'ailleurs d'en supprimer un autre...
    Pour exemple, si Garfield avait mis 1/10, j'aurais laissé sa note. Les mauvaises notes (et les bonnes aussi si possible) doivent être appuyées par un commentaire.

  • signaler à un administrateur
    Commentaire de coockiesch le 29/09/2006 09:24:04

    Younes371 > J'ai fais ceci:
    http://www.phpcs.com/codes/MOTEUR-RECHERCHE-DANS-BDD-II_38782.aspx
    Et ca:
    http://www.phpcs.com/codes/MOTEUR-RECHERCHE-DANS-BDD_25410.aspx

    @++

    R@f

  • signaler à un administrateur
    Commentaire de garfield90 le 29/09/2006 09:32:44

    Coockiesh, tu m'as devancé mais j'aurais fait pire : => moteur de recherche

  • signaler à un administrateur
    Commentaire de coockiesch le 29/09/2006 09:48:01

    Garfield90: pas compris! Tu aurais faire quoi de pire?

    @++

    R@f

  • signaler à un administrateur
    Commentaire de garfield90 le 29/09/2006 11:05:53

    Je lui aurai dis de faire une recherche, c'est encore le plus simple pour trouver quelque chose ;)
    d'ou le " => moteur de recherche ", => ( voir, direction, ... )

    " => [] " <=> "je sors" ;)

  • signaler à un administrateur
    Commentaire de coockiesch le 29/09/2006 11:15:31

    Oui, en tant que boolay reconnu, je connais bien le: tu ==> [ ] ! :-D

    Rechercher un moteur de recherche, c'est le comble, ^^

    @++

    R@f

  • signaler à un administrateur
    Commentaire de younes371 le 29/09/2006 16:20:10

    Merci cookiesh

  • signaler à un administrateur
    Commentaire de guismo1er le 29/09/2006 22:21:04

    utilise REGEXP , c bcp mieux pour tes requetes

  • signaler à un administrateur
    Commentaire de malalam le 30/09/2006 12:21:53 administrateur CS

    les index FULLTEXT sont encore mieux.
    Bon rien à ajouter sur le code...courage, avec un peu de lecture tu l'amélioreras facilement.

  • signaler à un administrateur
    Commentaire de AlBud le 05/10/2006 00:04:49

    Bof bof je vois rien d'exceptionnel surtout en niveau initié.
    N'y vois rien de méchant Henvimal mais quiconque ayant quelques jours de connaissance en php peu pondre un code comme celui là.

    J'aime pas trop les like or like, en plus tu t'ai pas posé la question de trié les résultats pour afficher par exemple les lignes ayant le + de fois ce(s) en premier, tu peux faire cela avec une petite soustraction/division pour resortir un résultat cohérent.

    Pour MALALAM, j'utilise les fulltext mais ce qui m'embete avec ce type d'index c'est qu'il s'agit de mot complet imagine que tu cherche tout ce qui commence par infor... le fulltext te ressord rien, ensuite si un mot est contenu dans + de la moitié des lignes d'un table, il est mis en mot indésirable car non pertinant et ca dès fois ca me gène aussi après tu peux modifier aussi la liste noir mais bon c'est pas le but.

    Tu aura par contre un gain considérable avec un fulltext mais ton script un peu remanié (ordre de pertinence) peux servir à d'autre, après on peux toujours lui ajouter une auto-complétion...

  • signaler à un administrateur
    Commentaire de HenvimaL le 19/10/2006 18:14:21

    Bon en tt cas si vous cherchez un code simple pour rechercher avec LIKE prenez mon code ^^

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS