Aller au contenu

Est-il possible de faire une recherche sans MySQL?


Sujets conseillés

Posté

Est-il possible de faire une recherche d'un ou plusieurs mots dans une liste de variables :?:

Exemple :

J'ai 3 variables PHP

<?php

$variable1 ='Salut comment ça va bien ?'

$variable2 ='Très bien et toi'

$variable3 ='Comment ça ?'

?>

Je fais une recherche avec un champ Imput et un bouton

<form name="search" method="post" action="search.php">

<input name="work_search" type="text" value="Recherchez" size="9" maxlength="30">

<input type="submit" name="Submit" value="OK">

</form>

Si par exemple je tape "salut" dans le Imput, alors il me echo '$variable1'

Si je tape "ça" ds le Imput, alors il me echo '$variable1<br>$variable3'

Si je tape "bien", alors il me echo '$variable1<br>$variable2'

etc...

Est-ce que c'est possible ? :(

Combien de page faut-il créer (je pense 2 , une pour la recherche, une pour le résultat)

Merci beaucoup, ça m'eviterait de mettre toutes mes variables dans une base de donnée MySQL (que je ne comprend rien au MySQL) ;)

Posté

Je pense que c'est possible en utilisant la fonction ereg (voir la doc de php pour plus d'infos).

Mai c'est quand même très limité comme méthode, à mon avis il vaut mieu se mettre à mysql ;)

Posté

Bonjour,

pour cela, il te faut structurer ta liste de variables. Par exemple, dans un tableau. Ensuite, tu fais un petit programme pour poser la question. Enfin, lorsque la question est posée, tu fais une recherche dans le tableau.

Pour cela, tu créé une seule page =>

S'il y a une question posée, alors faire la recherche

sinon, poser la question.

Pour la premiere partie, il te suffit de tester la variable $POST. Si elle existe et est non vide, alors c'est qu'une question a été posée. Dans ce cas là, commences la recherche. Il y a plusieurs facons de faire une recherche dans une liste de variables. Tout depend de ce que tu veux chercher : une expression exacte, contenant une partie du mot, etc..

Pour la deuxieme partie, un simple formulaire tel que celui que tu as posté fait l'affaire.

Pour ce qui est de Mysql, il n'est pas obligé de s'en servir. Pour une liste de variables définie à l'avance et stable, un tableau de variables suffit largement. Pas la peine de s'encombrer d'une base de données. Par contre, si ta liste de variables est ammenée à grandir, ou à changer régulièrement, alors c'est vrai qu'une base de données peut etre nécessaire (mais pas forcément indispensable).

Voilà. Si tu as d'autres questions, n'hésites pas.

A+, Anonymus.

Posté

Merci bcp, ça a l'air cool tout ça mais t'aurais pas un exemple rapide à me filer ???

Parceque je connais pas beaucoup de trucs en PHP, je commence juste.

Et j'aimerais faire ça dans 2 pages... Une avec le formulaire, et une qui affiche le résultat.

Pour ce qui est de la liste de variables, je l'ai mise sur une page indépendante "base.php" et j'ai mis dans chacune des pages où j'en ai besoin :

<?php require("base.php");?>

Je pense que c'est mieux. B)

Posté

J'ai déjà essayé de faire un truc avec la fonction ereg, c'est pas mal, mais c'est trop stricte, c'est à la majuscule et à l'accent près, et surtout si on tape plusieurs mots éspacés, ça recherche l'expression...

Et puis, c'est pas super pour faire une recherche, car il ne peut trouver qu'une seule variable, celle qu'on a indiqué en premier :

Page n°1 -> "index.php"

-----------------------------------------------------------

<html>

<head>

<title>Recherche</title>

<?php require("base.php");?>

</head>

<body>

<form name="search" method="post" action="search.php">

<input name="work_search" type="text" id="work_search" value="Recherche" size="20" maxlength="20" onFocus="if (value == 'Recherche') {value =''}" onBlur="if (value == '') {value = 'Recherche'}">

<input type="submit" name="Submit" value="OK !">

</form>

<br><br>

<?php

echo "<b>Variables:<br><br>Variable 1 :</b> $variable1<br><b>Variable 2 :</b> $variable2<br><b>Variable 3 :</b> $variable3";

?>

</body>

</html>

Page n°2 -> "base.php"

-> On inclut les variables

-----------------------------------------------------------

<?php

$variable1 ='Salut comment ça va bien ?';

$variable2 ='Très bien et toi';

$variable3 ='Comment ça ?';

?>

Page n°3 -> "search.php"

Si qqn pourrait me trouver un meilleur moyen de faire cette page en PHP sans MySQL

-----------------------------------------------------------

<html>

<head>

<title>Test PHP</title>

<?php require("base.php");?>

</head>

<body>

<?

if (ereg("$work_search","$variable1"))

{echo "$variable1";}

elseif (ereg("$work_search","$variable2"))

{echo "$variable2";}

elseif (ereg("$work_search","$variable3"))

{echo "$variable3";}

else {echo "Désolé, on a pa trouvé !";}

?>

<br><br>

<a href="index.php">Retour à la recherche</a>

</body>

</html>

Posté (modifié)

Bonjour,

commences par mettre tes variables dans un tableau. Ainsi :

$variable1=,

$variable2=,

$variable3=,

devient

$tab[0]='Salut comment ça va bien ?';
$tab[1]='Très bien et toi';
$tab[2]='Comment ça ?';

Ensuite, tu peux effectuer tes recherches dans le tableau en entier, en parcourant le tableau tout simplement :

foreach($tab as $key => $value){

if (ereg("$work_search",$value)){
 echo ""<br>.$value;
 }
}

Notes que tu peux rajouter autant de variables que tu veux à $tab ($tab[3], $tab[... )

Enfin, il faut que tu décomposes les termes de la requete. Ainsi, il te faut trouver les espaces, les '+', et pour chaque terme, trouver s'il existe dans ton tableau. Donc :

$a_word = explode(" ",$work_search);

Ceci te retourne un tableau contenant chacun des mots, et la séparation n'est autre que l'espace.

Et donc, tu cherches dans le tableau chaque terme de la requete, ce qui donne (à peu près):

foreach($a_word as $key => $value){
  foreach($tab as $key2 => $value2){

    if (eregi("$value",$value2)){
     echo ""<br>.$value2;
     }
}


}

Notes également que j'ai bien mis 'eregi' et non 'ereg', ce qui fait que la recherche ne tient pas compte de la casse, autrement dit, pas compte des majuscules/minuscules.

Voilà, ca devrait t'aider. N'hésites pas à poster si tu ne comprends pas quelque chose, et désolé pour le retard de la réponse. :(

A+, Anonymus.

Modifié par anonymus
Posté

Nan, t'excuse pas pour ton retard :rolleyes: , c'est pas super urgent...

Donc, j'avais 2 ou 3 trucs que j'avais pas compris.

Déjà, quand je met echo "$tab[0]" , ça marche, il m'affiche le contenu de $tab[0]

Mais si je met echo "$tab" , il m'affiche Array , Pourquoi ?

Aussi, si je met :

$a ='Comment ça va bien ?'

$b = explode(" ",$a);

echo "$b";

il affiche aussi Array

___________________________________________

Aussi, qu'est ce que $key, on ne le voit apparaitre que dans la fonction foreach, à quoi correspond t-il ?

___________________________________________

Le mieux serait que tu m'écrive le contenu des trois pages :

base.php -> pour le tableau de variables (qui ne contient que du PHP) :

<?php

$tab[0]='Salut comment ça va bien ?';

$tab[1]='Très bien et toi';

$tab[2]='Comment ça ?';

?>

index.php -> page HTML qui contient entre-autre ce formulaire de recherche :

<form name="search" method="post" action="search.php">

<input name="work_search" type="text" id="work_search" value="Recherche" size="20" maxlength="20" onFocus="if (value == 'Recherche') {value =''}" onBlur="if (value == '') {value = 'Recherche'}">

<input type="submit" name="Submit" value="OK !">

</form>

search.php -> page PHP qui possède le script de recherche et qui affiche les résultats (->phrase entière de la variable dont un des mot contenus dans sa phrase à été recherché<br>autre phrase si il y en a une autre<br>autre phrase si il y en a une autre<br>etc...)

Si t'a le temps de me faire ça, ce serait génial !

Je voudré une recherche tel que si on tape plusieurs mots éspacés, ça peux afficher une phrase ne contenant qu'un seul mot tapé sur les 2, mais qui lessera la priorité si il y a une phrase qui a les 2.

Voilà, si t'a des trucs en plus comme l'affichage du nombre de réponses trouvées t'hésite pas mé c pa du tout obligatoire... Fait moi (si t'a le temps) un bon truc assez simple.

Merci bcp ! C de la balle ce site, c le premier où je trouve de l'aide bien. :D

Posté (modifié)
Mais si je met echo "$tab" , il m'affiche Array

$tab est un tableau, donc un array. Donc, $tab t'affiche Array. Pour avoir les valeurs du tableau, il faut les demander : $tab[0] est égal à la valeur du tableau situé à l'index 0, $tab[5] est égal à la valeur du tableau situé à l'index 5, etc...

$a ='Comment ça va bien ?'

$b = explode(" ",$a);

echo "$b";

il affiche aussi Array

explode retourne un tableau. Ainsi, pour avoir la valeur de $b, il faut la demander explicitement.

$b[0]='Comment';

$b[1]='ça';

$b[2]='va';

$b[3]='bien';

Le probleme, c'est que l'on ne connait pas forcément par avance le nombre de valeurs retournées par explode. Dans le cas ci dessus, il y a 4 valeurs. Mais si l'on ne connait pas la valeur de $a (de ton exemple), on ne peut savoir si la fonction va retourner 1,2 ou 5 valeurs. On doit donc parcourir le tableau, du premier élément au dernier.

Aussi, qu'est ce que $key,

Pour parcourir un tableau, on utilise la fonction foreach. Elle s'emploie comme ceci :

foreach($tableau as $key => $value){

}

Fais un essai =>

<?
// là, on a un tableau :
$petit_tableau[0]='var un';
$petit_tableau[1]='var deux';
$petit_tableau[5]='var trois';
$petit_tableau['un index']='var quatre';
$petit_tableau['autre index']='var trente deux';

// on va le parcourir :

foreach ($petit_tableau as $cle => $valeur){

echo "<p>".$petit_tableau;
echo"<br><b> -- ".$cle."</b>";
echo"<br>---- ".$valeur;
echo "<br>tableau[".$cle."]=\"".$valeur."\"";
}
?>

Le mieux serait que
HELP !!!!
Je voudré une recherche tel que si on tape plusieurs mots éspacés, ça peux afficher une phrase ne contenant qu'un seul mot tapé sur les 2, mais qui lessera la priorité si il y a une phrase qui a les 2.
:blink: Tu peux réexpliquer ? Quelqu'un a compris ?

A+, Anonymus.

Modifié par anonymus
Posté (modifié)

Fais les essais avec le mot 'comment', puis avec 'ca' et 'toi'.

Pour avoir la meme chose, mais sensible à la casse, changes la fonction stristr en strstr.

fichier base.php

Salut comment ça va bien ?
Très bien et toi
Comment ca ?

fichier index.php

<?

// --------------------------------------------------------
// On teste le bouton submit.
// S'il n'a pas été cliqué, alors on passe au formulaire.
// --------------------------------------------------------

if ( ! isset ( $_POST['submit'] ) ) {

?>

<form name="search" method="post" action="index.php">
<input name="query" type="text" value="Recherche" size="20" maxlength="20" >
<input type="submit" name="submit" value="OK !">
</form>

<?
}

// --------------------------------------------------------
// Si le bouton a été pressé, alors
// on passe au module de test et de recherche.
// --------------------------------------------------------

else{

// on décompose la chaine passée en POST
$each_word=explode(" ",$_POST['query']);

// on ouvre le fichier base.php
$fp=fopen("base.php",'r');

// on parcours le fichier, ligne par ligne
while($line=fgets($fp,4096)){

// pour chaque mot de la chaine passée en parametre,
foreach ($each_word as $key => $value){

 // si il y a equivalence entre le mot recherché et un des mots de la ligne du fichier base.php,
 if($a=stristr($line,$value)){

  // on affiche la ligne.
  echo "<br>".$line;
  }
 }
}

// mission terminée, on ferme le fichier.
fclose($fp);

// --------------------------------------------------------
// et on affiche un bouton de retour.

echo"<form ><input type=submit  value=retour></form>";

}

?>

A+, Anonymus.

ps : - si tu as d'autres questions, n'hesites pas,

- tout ca est un peu long, mais ca peut resservir à quelqu'un d'autre :)

Modifié par anonymus
Posté (modifié)

EXPLICATIONS EN FRANCAIS...

Le mieux ça serait que tu me programme le contenu des trois pages

T'imagine que t'a une recherche à faire, tu tape "Salut bien"

(-> on va dire que c'est comme "Internet Explorer" tu peux pas mettre que "Internet" ou que "Explorer" , t'est obligé d'écrire 2 mots séparés par un espace "Internet Explorer"  :wacko: )

Donc, la recherche va chercher les mots séparés "Salut" et "bien".

Maintenant, t'a les 3 résultats possible :

Très bien et toi

Salut comment ça va bien ?

Comment ça ?

Il va forcément trouver "Très bien et toi" et "Salut comment ça va bien ?", mais il affichera "Très bien et toi" avant "Salut comment ça va bien ?" vu que la variable est dans cet ordre là.

Pourtant, dans "Salut comment ça va bien ?", il y a à la fois "Salut" et "bien" (les 2 mots recherchés), alors que dans "Très bien et toi", il n'y a que "bien".

Il faudrait donc une recherche qui place "Salut comment ça va bien ?" en priorité avant "Très bien et toi"

T'as compris ? Sinon tu redemande ce que t'as pas compris... c'est pas grave. :)

Voilà

Sinan,

T'as du te faire ch**r à faire toute la recherche mais je suis désoler de te rapeller que à la base c'était que recherche dans une liste de variables... :blush:

Franchement, je suis hyper désolé pke je dois vous em***der avec mes trucs... Je sais pas trop si on est vraiment vraiment capable de faire ça en PHP et sans base de donnée MySQL (la base de donnée étant le tableau de variables base.php)

<edit=dan: merci de garder un langage en accord avec les règles du forum>

Modifié par Dan
Posté

Je te rappelle tes termes :

...t'aurais pas un exemple rapide à....

Mais bon...

page search :

<?
if ( isset ( $_POST['submit'] )  ) {
$each_word=explode(" ",$_POST['query']);
$tab_result =array();
include("base.php");
foreach ($each_word as $key => $value){
 foreach($tab as $key2 => $value2){
 if($a=stristr($value2,trim($value))){
   $tab_result[] = $key2;
   }
 }
 }
}

sort($tab_result);
$temp='-1';

foreach($tab_result as $key => $value){
if ($value != $temp){
 $temp=$value;
 echo "<br>".$tab[$value];
 }
}

echo"<form action=\"index.php\"><input type=submit  value=retour></form>";

?>

page index

<form name="search" method="post" action="search.php">
<input name="query" type="text" value="Recherche" size="20" maxlength="20" >
<input type="submit" name="submit" value="OK !">
</form>

page base

<?php
$tab[0] ='Salut comment ça va bien ?';
$tab[1] ='Très bien et toi';
$tab[2] ='Comment ça ?';
?>

Anonymus.

Posté

Salut,

En gros tu veux que l'on te crées ton script ? ;)

D'après se que j'ai plus ou moins compris tu voudrais créer un moteur de recherche sur ton site et il ne possede pas de base mysql ?

Un exemple tout simple mais très efficace que propose un membre du forum sur son site moteur en javascript

;)

Posté

Bon ben voilà, je crois que ce forum est pratiquement clos parce que t'a fait exactement ce que je voulais (-> Anonymous) !!!! :D

Je suis trop content tu peux pas savoir, merci beaucoup.

Ya juste une erreur, c'est quand tu valide le formulaire avec la touche entrée...

si yaurait un petit remède à ça, ça serait bien. :unsure:

Sinan on peut trouver un script pour ne pas pouvoir valider avec la touche entrée.

Je ne sais pas si c'est possible mais ça aurait été bien si on pourrait voir le nombre de résultats trouvés. Mais c'est vraiment pas grave si on peut pas ;) .

Sinan je sais pas quoi dire à part MERCI BEAUCOUP et que j'adore ce site et que je vais le recommender à plein de potes.

:D:)

Posté

Ah nan c'est bon j'ai trouvé pourquoi ça marchait pas quand on validait avec entrée...

Il fallait supprimer " if ( isset ( $_POST['submit'] ) ) "

Sinon, autre question... (elle va durer moins longtemps)

j'ai la base.php :

<?php

$tab[0] ='Salut comment ça va bien ?';

$tab[1] ='Très bien et toi';

$tab[2] ='Comment ça ?';

?>

est ce qu'on peut afficher le nombre de variables $tab en PHP (-> ici, 3) ???

Posté

Pour connaitre le nombre de variables $tab, il suffit de dire

echo count($tab);

.

Il faut faire attention, dans ton cas par exemple, car le tableau est indexé à partir de 0 jusqu'à 2, alors que le nombre renvoyé sera égal à 3. Il y a donc 3 variables, la $tab[0], la $tab[1], la $tab[2].

Notes bien que pour un tableau tel que celui ci, ca marche aussi :

$mois['janvier']='bonne annee';
$mois['fevrier']='vacances d'hivers';
$mois['mars']='rien de special';
$mois['avril']='ne te decouvre pas d'un fil';
echo count($mois);
// renvoie 4;

Pour connaitre le nombre de lignes renvoyées, et corriger 2-3 petits bugs, ca donne :

<?
if ( isset ( $_POST['submit'] )  ) {
$each_word=explode(" ",$_POST['query']);
$tab_result =array();
include("base.php");
foreach ($each_word as $key => $value){
 foreach($tab as $key2 => $value2){
 if($a=@stristr($value2,trim($value))){
   $tab_result[] = $key2;
   }
 }
 }
}

if (isset($tab_result) ){
sort($tab_result);
$temp='-1';
$valeur_renvoyees='';
$nb_var_renvoyees=0;

foreach($tab_result as $key => $value){
if ($value != $temp){
 $temp=$value;
 $valeur_renvoyees .= "<br>".$tab[$value];
 $nb_var_renvoyees++;
 }
}

echo "Soit un total de ".$nb_var_renvoyees." lignes";
echo "<br>".$valeur_renvoyees;
}
else{
echo" Aucun resultat";
}
echo"<form action=\"index.php\"><input type=submit  value=retour></form>";

?>

Voilà, A+.

Anonymus.

  • 2 semaines plus tard...
Posté

Maintenant, on imagine que j'ai 150 $tab[]

Sur une page, je veux afficher les $tab de 0 à 50

Sur une autre, je veux afficher les $tab de 50 à 100,

Sur une autre, de 100 à 125 et sur une autre, de 125 à 150.

Suis-je obligé de faire echo '$tab[0]$tab[1]$tab[2]$tab[3]$tab[4]$tab[5],etc.' ??? :(

Merci !

Posté

Salut Benzen,

Tu devrais un jour te décider à ouvrir un manuel php, non ? :lol:

for($i=0; $i<150;$i++)
   echo $tab[$i];

Dan

Posté

Essaie ceci

$var = $_GET['var'];

$max_count=count($tab);

if(!isset($var) OR ($var<0) OR ($var>$max_count))$var=0;
?>
<a href="./essai.php?var=0">page  </a> - <a href="./essai.php?var=50">page </a> - <a href="./essai.php?var=100">page  </a>
<?

for($i=$var; $i<$max_count;$i++){
echo "<br>$i : ".$tab[$i];
}

A+, Anonymus.

Posté

Merci beaucoup ! ;)

Pourquoi j'ouvre pas un livre de PHP ??

-Parce que ça sert à rien de dépenser du fric pour une info qui, demandée poliment à Webmaster HUB, m'est répondue gratuitement !! :rolleyes:

Posté
Pourquoi j'ouvre pas un livre de PHP ??

-Parce que ça sert à rien de dépenser du fric pour une info qui, demandée poliment à Webmaster HUB, m'est répondue gratuitement !! :rolleyes:

C'est imparable comme réponse .. :)

Enfin, si tu as obtenu les infos que tu cherchais, c'est tant mieux.

Mais plus sérieusement, si tu veux progresser dans l'utilisation de php, tu devrais tout de même te documenter un peu . Il existe quelques tutoriaux sur le web qui te permettraient de découvrir rapidement les possibilités de Php et te donneraient sûrement des idées de réalisation. ;)

Dan

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...