Rechercher : dans
Par :

[php] probleme affichage moteur de recherche

Dernière réponse le 29 mar 2007 à 16:12:50 ottis, le 23 jun 2005 à 18:22:17 
 Signaler ce message aux modérateurs

Bonjour,
J'amerais bien mettre en place sur mon site un moteur de recherche. Etant une tanche en prog, je me suis inspiré d'un script que j'ai trouvé sur le net. Dans ce script les resultats de la recherche sont affichés comme ceci :
nom trouvé
lien trouvé

Ce que je voudrais, sa serait un affichage dans ces eaux la mais je n'y arrive pas :

echo'<a href='lien trouve'>'nom trouve'</a>';


Voici le code d'affichage des resultats d'origine :

while ($nbre_mots < sizeof($motclef)) { 
 if (strlen($motclef[$nbre_mots]) > 2) { 
  $query_nom = mysql_query ("SELECT nom, lien FROM $table WHERE nom LIKE '%$motclef[$nbre_mots]%' "); 
  $query_lien = mysql_query ("SELECT nom, lien FROM $table WHERE lien LIKE '%$motclef[$nbre_mots]%' "); 
  while ($row_nom = mysql_fetch_array($query_nom)) { 
  echo 'Animes trouvé'; 
  echo '<br>'; 
  echo 'nom:'; 
  echo '<br>'; 
  printf ("%s", $row_nom[0]); 
  echo '<br>'; 
  echo 'lien:'; 
  echo '<br>'; 
  printf ("%s", $row_nom[1]); 
  echo '<br>';
  } 
 } 
 $nbre_mots++; 
} 


Merci d'avance.

Meilleures réponses pour « [php] probleme affichage moteur de recherche » dans :
PHP - Créer un moteur de recherche Voir Idée générale Le moteur de recherche ci-dessous ne correspond qu'à une idée possible de moteur de recherche simple, ne gérant qu'un seul mot clé. Le concept du fonctionnement de ce moteur est de créer une base de donnée contenant les mots clés de...
[Webmaster] Afficher facilement le code php/xhtml de vos pages VoirSi vous voulez proposer a vos visiteurs de voir la source de vos fichiers (PHP ou HTML), il y a plusieurs solutions. En php Afficher le code php Afficher le code html En html Informations Voir aussi En php Afficher le code php La...
[IE 7 et 8] Modifier le moteur de recherche par défaut VoirPour Internet Explorer 7 Ouvrez Internet Explorer. Faites un clic sur la flèche dans la barre de recherche en haut à droite. Cliquez sur "Modifier les paramètres de recherche par défaut". Vous pouvez : Définir un moteur de recherche...
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...
Web - Moteur de recherche VoirIl existe une énorme quantité d'informations sur Internet (plusieurs millions ou milliards de documents), et ces informations sont pour la plupart renouvelées quotidiennement. Le moteur de recherche est un élément indispensable pour s'y...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

kilian, le 23 jun 2005 à 20:59:41

Dans la requête Sql, nom est invoqué en premier, puis lien en deuxième,
donc le tableau $row[0] contient le nom, et $row[1] le lien.

Donc ça donnerais ça:

while ($nbre_mots < sizeof($motclef)) { 
 if (strlen($motclef[$nbre_mots]) > 2) { 
  $query_nom = mysql_query ("SELECT nom, lien FROM $table WHERE nom LIKE '%$motclef[$nbre_mots]%' "); 
  $query_lien = mysql_query ("SELECT nom, lien FROM $table WHERE lien LIKE '%$motclef[$nbre_mots]%' "); 
  while ($row_nom = mysql_fetch_array($query_nom)) { 
  
  echo '<a href="'.$row[1].'">'.$row[0].'</a>';
  } 
 } 
 $nbre_mots++; 
}


Je te conseille de glaner quelques renseignements sur l'affichage de données en php, sur le rôle des guillemets (simples ou double) et sur la concatenation.

Répondre à kilian

2

ottis, le 24 jun 2005 à 20:22:41

Merci beaucoup de ton aide, tout marche parfaitement maintenant.

Répondre à ottis

3

ottis, le 24 jun 2005 à 21:17:24

Il y a une dernière chose que j'aimerais savoir.
Le script de recherche s'effectue pour le moment que sur une seule table. Est-il possible de sélectionner plusieurs tables avec $table ?

Un peu comme ceci :

$table = "table1_tbl+table2_tbl+etc...";


J'ai effectuer plusieurs recherches mais je n'ai rien trouvé et j'aimerais finir ce petit script assez rapidement.
J'apprendrais le php plus sérieusement après, je le jure ^^.
Merci d'avance.

Répondre à ottis

4

kilian, le 24 jun 2005 à 21:56:12

Tu voudrais faire une recherche sur ces tables de quelle façon?
Par exemple tu voudrais faire la recherche dans ces tables et afficher les mots trouvés sans te soucier de leur provenance (leur table correspondante)?

Ou bien tu voudrais afficher à quelle table correspond chaque mot clef trouvé.

Répondre à kilian

5

ottis, le 25 jun 2005 à 09:22:50

Je voudrais afficher les mots trouvés sans me soucier de leur provenance.

Répondre à ottis

6

kilian, le 25 jun 2005 à 12:59:11

Alors on va dire que le nom de tes tables est stocké comme ceci:

$table1="table1";
$table2="table2";


Bon je pars du principe que dans ces tables tu as un champs "nom" et un champs "lien". Sinon il faudra adapter.
Ca donne donc ceci:
while ($nbre_mots < sizeof($motclef)) { 
 if (strlen($motclef[$nbre_mots]) > 2) {
   $like="%$motclef[$nbre_mots]%";
  $query_nom = mysql_query ("SELECT lien.$table1, nom.$table1,lien.$table2,nom.$table2, FROM $table1,$table2 WHERE (nom.$table1 LIKE '$like') AND nom.table2 LIKE '$like' "); 

  while ($row_nom = mysql_fetch_array($query_nom)) { 
  
  echo '<a href="'.$row[0].'">'.$row[1].'</a>';
  echo '<a href="'.$row[2].'">'.$row[3].'</a>';
  } 
 } 
 $nbre_mots++; 
}


J'ai simplifié quelques trucs. Et j'ai supprimé $query_lien qui ne servait à rien.

Répondre à kilian

7

ottis, le 25 jun 2005 à 13:45:15

D'accord donc par exemple si j'ai 3 tables ça donne ça :

while ($nbre_mots < sizeof($motclef)) { 
 if (strlen($motclef[$nbre_mots]) > 2) {
   $like="%$motclef[$nbre_mots]%";
  $query_nom = mysql_query ("SELECT lien.$table1, nom.$table1,lien.$table2,nom.$table2,lien.$table3,nom.$table3,  FROM $table1,$table2,$table3 WHERE (nom.$table1 LIKE '$like') AND nom.table2 LIKE '$like' AND nom.table3 LIKE '$like' "); 

  while ($row_nom = mysql_fetch_array($query_nom)) { 
  
  echo '<a href="'.$row[0].'">'.$row[1].'</a>';
  echo '<a href="'.$row[2].'">'.$row[3].'</a>';
  echo '<a href="'.$row[4].'">'.$row[5].'</a>';
  } 
 } 
 $nbre_mots++; 
}


Ne manque-t-il pas $ ?
WHERE (nom.$table1 LIKE '$like') AND nom.$table2 LIKE '$like' AND nom.$table3 LIKE '$like' "); 

Répondre à ottis

8

kilian, le 25 jun 2005 à 13:52:09

Si. J'ai fait une coquille.
Et j'ai aussi oublié des parenthèses au cas ou.
Et peut être qu'il vaut mieux utiliser OR que AND. Là j'ai un doute.

Donc:

WHERE (nom.$table1 LIKE '$like') OR (nom.$table2 LIKE '$like') OR (nom.$table3 LIKE '$like') "); 


Faudrait tester pour voir. Je ne sais pas ce que ça va donner.
Peut être qu'il vaut mieux faire une requête séparée pour chaque table.

Répondre à kilian

9

ottis, le 25 jun 2005 à 14:03:35

J'ai tout testé mais il m'affiche ce message d'erreur :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource


Qu'entends-tu pas requête séparée ?

Répondre à ottis

10

kilian, le 25 jun 2005 à 15:05:39

C'est sûrement la virgule en trop à côté de nom.$table3 entre select et from.

Répondre à kilian

11

ottis, le 25 jun 2005 à 19:38:18

J'ai toujours la même erreur.

Répondre à ottis

12

kilian, le 26 jun 2005 à 13:22:49

Ecris voir ceci en dessous du mysql_query:

echo "SELECT lien.$table1, nom.$table1,lien.$table2,nom.$table2,lien.$table3,nom.$table3 FROM $table1,$table2,$table3 WHERE (nom.$table1 LIKE '$like') OR (nom.$table2 LIKE '$like') OR (nom.$table3 LIKE '$like') ";


Ca devrait afficher la requête à l'écran..... Tu peux pourrait l'écraire ici?

Si ça n'affiche rien, transforme mysql_fetch_array par @mysql_fetch_array....

Répondre à kilian

13

ottis, le 26 jun 2005 à 13:48:48

Voila se qui s'affiche :

SELECT lien.dossiersA_tbl, nom.dossiersA_tbl,lien.dossiersB_tbl,nom.dossiersB_tbl,lien.­dossiersC_tbl,nom.dossiersC_tbl FROM dossiersA_tbl,dossiersB_tbl,dossiersC_tbl WHERE (nom.dossiersA_tbl LIKE '%blabla%') OR (nom.dossiersB_tbl LIKE '%blabla%') OR (nom.dossiersC_tbl LIKE '%blabla%')  

Répondre à ottis

14

kilian, le 26 jun 2005 à 17:08:22

Tu es sûr que tu as bien un champs "nom" et un champs "lien" dans les tables dossiersA_tbl, dossiersB_tbl et dossiersC_tbl?

Répondre à kilian

15

ottis, le 26 jun 2005 à 18:14:17

Oui, toutes mes tables ont exactement la meme structure, mais certaines sont encores vides. Elles possèdent toutes ces 2 champs.

Répondre à ottis

16

kilian, le 27 jun 2005 à 02:45:18

Argh oui excuse, j'ai fait tout de travers.
En fait ce n'est pas "champs.table" mais "table.champs".

Donc remplace ton mysql_query par:

mysql_query("SELECT $table1.lien, $table1.nom,$table2.lien,$table2.nom,$table3.lien,$table3.nom FROM $table1,$table2,$table3 WHERE ($table1.nom LIKE '$like') OR ($table2.nom LIKE '$like') OR ($table3.nom LIKE '$like') ");

Répondre à kilian

17

kilian, le 27 jun 2005 à 02:50:18

Bon, maintenant, tu auras peut être des erreurs car certains pourront être remplis et pas d'autres.

PS: Je viens de tester chez moi. Ce genre de requête n'est pas trop appropriée car tu auras le bon resultat pour une table mais pas forcément pour l'autre. Donc il faut faire une requête distincte pour chaque table.

Je verrais ça demain, mais en gros, il faut que tu fasses comme au début pour une seule table et que tu répètes l'opération pour les autres tables (requête, affichage).

Répondre à kilian

18

ottis, le 27 jun 2005 à 10:12:56

Je n'ai plus de message d'erreur mais rien ne s'affiche.
Encore merci de passer du temps sur mon problème.

Répondre à ottis

19

kilian, le 27 jun 2005 à 12:02:18

Ok, voilà ce qu'il faudrait que tu fasses:

while ($nbre_mots < sizeof($motclef)) { 
 if (strlen($motclef[$nbre_mots]) > 2) { 
  $query_nom1 = mysql_query ("SELECT nom, lien FROM $table1 WHERE nom LIKE '%$motclef[$nbre_mots]%' "); 

  $query_nom2=mysql_query("SELECT nom, lien FROM $table2 WHERE nom LIKE '%$motclef[$nbre_mots]%' "); 

  $query_nom3=mysql_query("SELECT nom, lien FROM $table3 WHERE nom LIKE '%$motclef[$nbre_mots]%' "); 
 
  echo "<br><br>$table1 : <br><br>";
  while ($row1 = mysql_fetch_array($query_nom)) { 
  
          echo '<a href="'.$row1[1].'">'.$row1[0].'</a>';
  }
  
   echo "<br><br>$table2 : <br><br>";
   while ($row2 = mysql_fetch_array($query_nom)) { 
  
            echo '<a href="'.$row2[1].'">'.$row3[0].'</a>';
  } 

  echo "<br><br>$table3 : <br><br>";
   while ($row_nom3 = mysql_fetch_array($query_nom)) { 
  
             echo '<a href="'.$row[1].'">'.$row[0].'</a>';
  } 
 
 } 
 $nbre_mots++; 
}/


Voilà, en espérant qu'il n'ya pas de fautes....

Répondre à kilian

20

ottis, le 27 jun 2005 à 14:38:50

Ca marche !!
Il y avait 2-3 petites erreurs mais je les ai corrigé et maintenant c'est nikel. Merci beaucoup de ton aide.

Répondre à ottis
Collection CommentÇaMarche.net