Flux rss
Rechercher : dans
Par :

[php] probleme affichage moteur de recherche

ottis, le jeudi 23 juin 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.

1

kilian, le jeudi 23 juin 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 vendredi 24 juin 2005 à 20:22:41

Merci beaucoup de ton aide, tout marche parfaitement maintenant.

Répondre à ottis

3

ottis, le vendredi 24 juin 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 vendredi 24 juin 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 samedi 25 juin 2005 à 09:22:50

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

Répondre à ottis

6

kilian, le samedi 25 juin 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 samedi 25 juin 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 samedi 25 juin 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 samedi 25 juin 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 samedi 25 juin 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 samedi 25 juin 2005 à 19:38:18

J'ai toujours la même erreur.

Répondre à ottis

12

kilian, le dimanche 26 juin 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 dimanche 26 juin 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 dimanche 26 juin 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 dimanche 26 juin 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 lundi 27 juin 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 lundi 27 juin 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 lundi 27 juin 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 lundi 27 juin 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 lundi 27 juin 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
[Firefox] Affichage Mot de passe *** Bonjour, Je recherche un moyen d'afficher directement les **** des mots de passe sur FireFox pour l'ouverture de session ... D'avance merci. L'Open source et Linux sont l'avenir de l'informatique ;-) www.commentcamarche.net/forum/affich-2554390-firefox-affichage-mot-de-passe
[Webmaster] Afficher facilement le code php/xhtml de vos pages Si 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... www.commentcamarche.net/faq/sujet-4469-webmaster-afficher-facilement-le-code-php-xhtml-de-vos-pages
Afficher le contenu d'un repertoire en PHP (Résolu) je veux afficher une liste des fichiers d'un repertoires en utilisant PHP, par exemple, sur mon site , j'ai un repertoire mp3 qui contient des mp3, je veux qu'une page "list.php" affiche le contenu de ce repertoire, merçi si vous avez un autre astuce... www.commentcamarche.net/forum/affich-1918120-afficher-le-contenu-d-un-repertoire-en-php
[PHP] Détecter la résolution d'affichagePHP ne fournit pas de fonction permettant la détection de la résolution d'affichage car l'information concernant l'affichage du visiteur n'est pas fournie nativement par le protocole HTTP. Javascript par contre permet de détecter la résolution grâce... www.commentcamarche.net/faq/sujet-849-php-detecter-la-resolution-d-affichage
[PHP] Comment afficher l'adresse IP d'un visiteur ?Pour afficher l'adresse IP d'un visiteur sur votre site, insérez ce code dans la zone où vous voulez qu'elle s'affiche. www.commentcamarche.net/faq/sujet-21-php-comment-afficher-l-adresse-ip-d-un-visiteur
[PHP] Lister le contenu d'un répertoireGrâce à PHP, il est possible d'afficher le contenu d'un répertoire et de ses sous-répertoires. Voici ci-dessous une fonction permettant de parcourir récursivement les répertoires et sous-répertoires et d'en afficher les fichiers : function... www.commentcamarche.net/faq/sujet-6773-php-lister-le-contenu-d-un-repertoire
[php]fonction contraire du md5? (Résolu)bonjour je sais bien qu'il existe la fonction md5 en php, qui sert à brouiller un mot de passe. là le mot de passe est complètement illisible. quel est... www.commentcamarche.net/forum/affich-2304829-php-fonction-contraire-du-md5
[php] affichage d'un nb décimal (Résolu)bonjour je sais que c'est une question bidon mais je sais plus komment on formate l'affichage d'un décimal!! je m'explique je récupère un float depuis mysql en php pour afficher le résultat j'utilise un printf("%f",$resulat[0])> mon pb c'est que... www.commentcamarche.net/forum/affich-1600705-php-affichage-d-un-nb-decimal
Meilleur site ou moteur recherche musiqueBonjour, je cherche bon site musique à télécharger et aussi quel est le meilleur moteur de recherche pour musique? Merci. www.commentcamarche.net/forum/affich-9542681-meilleur-site-ou-moteur-recherche-musique
PHP - Affichage de texte sur le navigateurLe 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... www.commentcamarche.net/contents/php/phpaffich.php3
PHP - Créer un moteur de rechercheIdé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... www.commentcamarche.net/contents/php/phpmoteur.php3
Web - Moteur de rechercheIl 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... www.commentcamarche.net/contents/www/moteur-recherche.php3