Moteur de recherche : afficher le nombre de résultats [Résolu]

Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
- - Dernière réponse : PetoleTeam
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
- 8 juil. 2010 à 19:29
[b]Bonjour,
j'ai récupéré le code source d'un moteur de recherche sur un site, que j'ai ensuite adapté pour qu'il soit plus beau, etc...
Cependant, je n'arrive pas à afficher le nombre de résultats trouvés lorsqu'une recherche est effectué. :s
Voici ma source (fichier "bdd.js") :/b


// appel de la fonction principal et formatage de l'apres reponse
function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
searchLinks(jsi, text);
document.write("<hr>");
document.write("[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].Desc.toLowerCase().indexOf(keyword) != -1) {
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].Name.toLowerCase().indexOf(keyword) != -1) {
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].URL.toLowerCase().indexOf(keyword) != -1){
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
}
}


Merci d'avance pour votre aide qui me sera fort utile !
Afficher la suite 

20/50 réponses

Meilleure réponse
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
3
Merci
Bonjour,

j'y suis presque il me semble...
oui mais sans bien comprendre car
  if (Total =  = links[q]) // occurrence trouve
    count++; // Increment compteur
ne veut toujours rien dire

solution et explication ? svp
Déjà largement données au cours de ce topic

Parfois il est utile de poser ses valises pour mieux les reprendre

ci dessous en clair ce que tu cherches à faire...
//  =================================================
DEBUT FONCTION ( LINKS : Tableau , MotCle : CHAINE)
  
  DECLARATION et INITIALISATION Compteur à 0
  
  ECRITURE_DOCUMENT de l'Entête

  POUR TOUS les Indices du Tableau LINKS
  
    SI TROUVE MotCle DANS LINKS.CATEGORIE[Indice en Cours] ALORS
      ECRITURE_DOCUMENT des Infos du Lien
      INCREMENTATION du Compteur
      CONTINU à Indice Suivant
    FIN SI
    
    SI TROUVE MotCle DANS LINKS.DESCRIPTION[Indice en Cours] ALORS
      ECRITURE_DOCUMENT des Infos du Lien
      INCREMENTATION du Compteur
      CONTINU à Indice Suivant
    FIN SI  
    
    SI TROUVE MotsCle DANS LINKS.NAME[Indice en Cours] ALORS
      ECRITURE_DOCUMENT des Infos du Lien
      INCREMENTATION du Compteur
      CONTINU à Indice Suivant
    FIN SI    

    SI TROUVE MotsCle DANS LINKS.URL[Indice en Cours] ALORS
      ECRITURE_DOCUMENT des Infos du Lien
      INCREMENTATION du Compteur
      CONTINU à Indice Suivant
    FIN SI      
  
  FIN POUR
  
  RETOURNE le Compteur

FIN FONCTION


je ne penses pas pouvoir t'aider plus...
;O)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PetoleTeam
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
Pour vous simplifier le travail, voici la source sans les sites :

// appel de la fonction principal et formatage de l'apres reponse
function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
searchLinks(jsi, text);
document.write("<hr>");
document.write("[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].Desc.toLowerCase().indexOf(keyword) != -1) {
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].Name.toLowerCase().indexOf(keyword) != -1) {
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
if (links[q].URL.toLowerCase().indexOf(keyword) != -1){
document.write("
");
document.write("
[ + links[q].URL + " + links[q].Name + "]
");
document.write( links[q].Desc + "
");
document.write("
"+links[q].URL +"

");
document.write("
");
continue;
}
}
}



Merci encore d'avance.
J'ai essayé avec un truc du genre :
total=0
if (w > -1) total += searchLinks(jsi, text);
}
document.write("</table>
Pages trouvé(s): "+total+"
</html>");

mais sans succés et en plus avec des erreurs...
Commenter la réponse de loicseg
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
UP svp
PS : je ne sais pas si c'est possible, mais peut-on afficher les résultats sur plusieurs page avec ce genre de script ? Encore merci d'avance !
Commenter la réponse de loicseg
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
Bonjour,
merci d'utiliser les balises de code, cela facilite la lecture.

Je vais répondre à la première question.
Dans ta fonction searchLinks, incrémente un compteur à chaque fois que tu as une occurrence, demande à la fonction de retourner cette valeur, si tu le demandes gentillement elle le fera sans problème, et dans la fonction appellante tu récupères la valeur à des fins d'affichage.


;O)
Commenter la réponse de PetoleTeam
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
Merci pour ta reponse mais je ne my connais pas trop en javascript, jai surtout modifie ce ki concernai l'apparence avec les balise style. pourrais tu men dire plus ou eventuellement me donner un lien, jai regarder plusieurs site je ne comprend absolument pas comment installer ce que je veux... merci d'avance pour vos réponse et encore merci pour celle ci
Commenter la réponse de loicseg
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
un petit exemple pour te montrer le mécanisme
<html>
<head>
<script type="text/javascript">
var T_Nombre = [1,2,3,5,2,4,5,6,9,7,3,0];
//-------------------------
function Affiche_Nbr( num_){
  //-- appel fonction et recup compteur
  var Nbr = Get_Nombre( num_);
  //-- Formattage sortie ecran
  var szTmp = "il y a " + Nbr +" chiffre " +num_ +" dans le tableau!";
  //-- Affichage resultat
  alert( szTmp);

}
//-------------------------
function Get_Nombre( num_){
  //-- compteur a zero
  var count = 0;
  //-- Parcours du tableau
  for( var i =0, Max = T_Nombre.length; i < Max; i++){
    if( num_ == T_Nombre[i])  // occurrence trouve
      count++;                // Increment compteur
  }
  //-- return le compteur
  return( count);
}
//-- Appel combien de 5 dans le tableau
Affiche_Nbr( 5);
</script>
</head>


</html>

à adapter à ton besoin...

;O)
Commenter la réponse de PetoleTeam
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
Merci pour cette réponse,
mon probléme en fait est que je ne sais pas comment définir la variable, je sais ce qu'est une variable, mais je ne sais pas comment la parametrer pour mon cas :s
la javoue que je bloque completement la dessus
Commenter la réponse de loicseg
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
je pense qu'une certaine partie du code est déjà écrit dans ma source mais pour le reste j'ai vraiment du mal :S pourriez vous m'expliquer un peu plus comment réaliser ce que je veux sans forcément me donner un code deja pret mais plus de pistes pour que je comprenne, et ainsi progresser :) merci d'avance.
Commenter la réponse de loicseg
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
Bonjour,
l'exemple que je t'ai fourni est, me semble t-il, autoporteur

c'est dans la fonction appelant la fonction searchLinks, dans ton cas validate_form, que tu défini ta variable Total
function validate_form() {
  txt = document.form.search.value;
  jsi = new makeLinks(linksize);
  //---------------------------------------------------------
  //-- Appel de la fonction searchLinks,
  //-- en retour Total vaudra le nombre d'occurrence trouvées
  //---------------------------------------------------------
  var Total = searchLinks(jsi, txt);
  // la suite de la fonction....
}

il va de soit que dans la fonction searchLinks il te faut gérer un compteur comme indiqué dans mon exemple précédent, afin que Total ne soit pas undefined...

;O)
Commenter la réponse de PetoleTeam
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
Voici ce que j'ai :
(jai retire les commentaires que je pense avoir compris)

function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
searchLinks(jsi, text);
var Total = searchLinks(jsi, text);
document.write("<hr>");
document.write("Nouvelle recheche
");
}

function Affiche_Nbr( num_){
var Nbr = Get_Nombre( num_);
//-- Formattage sortie ecran
var szTmp = "il y a " + Nbr +" chiffre " +jsi +" dans le tableau!";
document.write( szTmp);
}


//-- Appel combien d'occurence dans la bdd
Affiche_Nbr( jsi);

//-------

// La fonction de recherche elle-meme
function searchLinks(links, keyword){
var count = 0;
for( var i =0, Max = Total.length; i < Max; i++){
if( jsi_ == Total[i])
count++;
}
return( count);
}



ceci ne fonctionne toujours pas : en fait c pr affiche nbr je ne sais pas quoi mettre :s, je pense que je ne suis pas loin du code mais quelque chose ne vas toujours pas
Commenter la réponse de loicseg
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
quand j'ecris :

var Total = searchLinks(jsi, text);

la fonction search links est appele deux fois :s
Commenter la réponse de loicseg
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
Bonjour,
dans la fonction il y a un appel de trop
function validate_form() {
  text = document.form.search.value;
  jsi = new makeLinks(linksize);
  // searchLinks(jsi, text); ==============// LIGNE A SUPPRIMER //==
  var Total = searchLinks(jsi, text);
  document.write("<hr>");
  document.write("Nouvelle recheche
");
} 

la fonction Affiche_Nbr était la pour te montrer le principe des appels, elle n'a rien à faire dans ta source

c'est la fonction searchLinks qu'il faut que tu modifies pour qu'elle te retourne le nombre trouvé
// La fonction de recherche elle-meme
function searchLinks(links, keyword){
  //-- compteur a zero
  var count = 0;
  //-------------------------------------------
  // ICI tu fais tes tests et incrémentes count
  // à chaque fois que tu trouves une occurence
  //-------------------------------------------
  //-- En final on retourne le Nbr d'occurence
  return( count);
}

Total vaudra dans la fonction validate_form.

;O)
Commenter la réponse de PetoleTeam
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
Je galere vraiment :

function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
var Total = searchLinks(jsi, text);
document.write("<hr>");
        document.write(Total+"résultats");
   	document.write("Nouvelle recheche
");
}

function searchLinks(links, keyword){
var count = 0;
for( var i =0, Max = Total.length; i < Max; i++){
    if( links == Total[i])
      count++;         
  }
return( count);
}



je ne comprend pas ce qui ne va toujours pas
Commenter la réponse de loicseg
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
mais pourquoi changes tu le contenu de ta fonction searchLinks, reprends celle que tu avais au début et rajoutes simplement le compteur...

;O)
Commenter la réponse de PetoleTeam
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
var Total = searchLinks(jsi, text);
document.write("<hr>");
document.write(Total+"Nouvelle recheche
");
}

function searchLinks(links, keyword){


function Get_Nombre( links){
//-- compteur a zero
var count = 0;
//-- Parcours du tableau
for( var i =0, Max = Total.length; i < Max; i++){
if( links == Total[i]) // occurrence trouve
count++; // Increment compteur
}
//-- return le compteur
return( count);
}


aucune erreur générée (enfin il me semble) mais rien ne s'affiche...
desole je ne suis vraiment pas doué :s
Commenter la réponse de loicseg
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
var Total = searchLinks(jsi, text);
document.write("<hr>");
document.write(Total+" resultats
")
document.write("Nouvelle recheche
");
}

function searchLinks(links, keyword){


function Get_Nombre( links){
//-- compteur a zero
var count = 0;
//-- Parcours du tableau
for( var i =0, Max = links.length; i < Max; i++){
if( Total == links[i]) // occurrence trouve
count++; // Increment compteur
}
//-- return le compteur
return( count);
}


toujours sans erreur mais j'obtiens : undefined
Commenter la réponse de loicseg
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
je ne vois pas d'autre moyen :

function validate_form() {
text = document.form.search.value;
jsi = new makeLinks(linksize);
var Total = searchLinks(jsi, text);
document.write("<hr>");
document.write(Total+" resultats
")
document.write("Nouvelle recheche
");
}

function searchLinks(links, keyword){


function Get_Nombre( links){
  //-- compteur a zero
  var count = 0;
  //-- Parcours du tableau
  for( var i =0, Max = Total.length; i < Max; i++){
    if( links == Total[i])  // occurrence trouve
      count++;                // Increment compteur
  }
  //-- return le compteur
  return( count);
}
Commenter la réponse de loicseg
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
la fonction validate_form telque tu viens de l'écrire est conforme, à l'exception que tu n'affiches plus le total mais c'est un détail, il te faut ajouter
document.write("</table>
Pages trouvé(s): "+Total+"
</html>");
d'après ton script du début.

Pour la suite OUBLIES les fonctions que j'ai mis pour exemple et reprende la fonction searchLinks que tu avais au début du post, c'est dans celle ci que tu dois gérer le compteur...
je repétes
mais pourquoi changes tu le contenu de ta fonction searchLinks, reprends celle que tu avais au début et rajoutes simplement le compteur...

;O)
Commenter la réponse de PetoleTeam
Messages postés
168
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
30 septembre 2011
0
Merci
function searchLinks(links, keyword){
  var count = 0;
  for (var i =0, Max = Total.length; i < Max; i++){
    if( links == Total[i])  // occurrence trouve
      count++;                // Increment compteur
  }
  //-- return le compteur
  return( count);
}


???
Commenter la réponse de loicseg
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
Non
je parles de celle là
// La fonction de recherche elle-meme 
function searchLinks(links, keyword) {
  // la ligne d'en-tete de la reponse a la base de donnees 
  document.write("[ + links[q].URL +  " + links[q].Name + "]
");
      document.write(links[q].Desc + "
");
      document.write("
" + links[q].URL + "

");
      document.write("
");
      continue;
    }
    if (links[q].Desc.toLowerCase().indexOf(keyword) != -1) {
      document.write("
");
      document.write("
[ + links[q].URL +  " + links[q].Name + "]
");
      document.write(links[q].Desc + "
");
      document.write("
" + links[q].URL + "

");
      document.write("
");
      continue;
    }
    if (links[q].Name.toLowerCase().indexOf(keyword) != -1) {
      document.write("
");
      document.write("
[ + links[q].URL +  " + links[q].Name + "]
");
      document.write(links[q].Desc + "
");
      document.write("
" + links[q].URL + "

");
      document.write("
");
      continue;
    }
    if (links[q].URL.toLowerCase().indexOf(keyword) != -1) {
      document.write("
");
      document.write("
[ + links[q].URL +  " + links[q].Name + "]
");
      document.write(links[q].Desc + "
");
      document.write("
" + links[q].URL + "

");
      document.write("
");
      continue;
    }
  }
}



;O)
Commenter la réponse de PetoleTeam