Sharemanga: [resolu]problème moteur de recherche php - Sharemanga

Aller au contenu

Règles de la section "Problèmes et discussions informatique"

-Cette section est destinée aux problèmes de matériel informatique, de logiciel, de divxbox/platines divx.
-Pour tous les problèmes , il est demandé de donner un maximum d'information pour pouvoir vous aider (ex: configuration de l'ordinateur, symptômes, etc...).
-Les problèmes liés aux vidéos doivent être postés dans la section "Problèmes vidéos et audios"
-Merci de lancer une recherche (ici) avant de lancer un nouveau sujet au cas où ce problème existe déjà, et a déjà été résolu.
Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Ce sujet est fermé

[resolu]problème moteur de recherche php où quand tester en local ça fonctionne pas

Posté mardi 14 novembre 2006 à 21:16 (#1) L'utilisateur est hors-ligne   pikka 

  • Pokemon De Luxe
  • PipPipPipPipPipPip
  • Voir le blog
  • Groupe : Modérateur Section
  • Messages : 645
  • Inscrit(e) : 22/04/2005

bonjour à tous et à toutes :w00t:


Dans l'optique de la création d'une base documentaire (rien de professionnel je vous rassure) je voudrais mettre en place un petit moteur de recherche php/mysql. Mes connaissances dans ce langage étant très limitées (et celles des autres personnes du projet aussi, boulay inside attitude :ph34r: ) nous avons décidé d'en récupérer un tout fait.
Après maintes (pas sûr de l'orthographe moi) recherches sur le web, nous sommes tombés la dessus : site du moteur de recherche

Ce petit moteur nous paraissait plutôt bien car il gère les accents, les majuscules... Mais, car il y a toujours un mais... lors des tests en local avec easyphp et bien le moteur ne marche pas. :P :crying:
Je m'explique avec les paramètres de bases, donc ceux proposés par l'auteur (base de données: devel, table:search, utilisateur: root, pass:aucun) aucun résultat n'est retourné (même avec les mots de l'exemple) et le formulaire reste à la page de saisie avec l'intitulé "Entrer au moins un mot", le texte tapé préalablement dans la case rechercher disparaissant.

Nous avons contacté l'auteur et webmaster mais toujours pas de réponse depuis deux semaines.Je m'en remet donc à sharemanga et ces codeurs php pour nous éclairer :sifle: .

La seule modification que nous ayons apporté est la définition du champ id car phpmyadmin renvoyait une erreur. Celui-ci avait les caractéristiques suivantes:
id tinyint(255) DEFAULT '0' NOT NULL auto_increment
que nous avons modifié par :
id int(15) NOT NULL auto_increment.


Etant absente pour deux jours (déplacement pour le boulot oblige ;) ) je ne pourrais donner plus de précisions avant ce délai.
En vous remerciant d'avance,

  • Vous pouvez télécharger le dossier avec tous les fichiers du moteur de recherche ICI
  • Voir un exemple sur le site de l'auteur (lui forcément ça marche :pinch: )
Pour ceux, qui pour X raisons n'auraient pas confiance (et ils ont tort :lol: ) dans l'archive proposée ci-dessus contenant le moteur voici les codes souces des pages php.

Fichier config.inc :

[Voir le message caché (spoiler)]
<? 



$host=&#34;localhost&#34;; #pour free c'est sql.free.fr
$user=&#34;root&#34;; #pour free c'est ton login
$password=&#34;none&#34;; #pour free c'est ton mot de passe de connexion/mail

$base=&#34;devel&#34;; #pour free c'est ton login
$table=&#34;search&#34;; #nom de la table &#40;par defaut&#41;

$limit=10; //nombre de résultats par page.

?>


Fichier form :
[Voir le message caché (spoiler)]
<br><Center>
<form action=&#34;search.php3&#34; method=&#34;POST&#34;>
<p>
<input type=&#34;text&#34; size=&#34;20&#34; name=&#34;recherche&#34;>
<input type=&#34;submit&#34; name=&#34;B1&#34; value=&#34;Envoyer&#34;>
</p>
<p>
<input type=&#34;radio&#34; checked name=&#34;operateur&#34; value=&#34;OR&#34;>OU
<input type=&#34;radio&#34; name=&#34;operateur&#34; value=&#34;AND&#34;>ET
</p>
Essayez avec les mots clés suivants &#58; cours php newsletter pdf ip html php3
</form><br></center>


Fichier search :
[Voir le message caché (spoiler)]
<?
// ------------------------------------------------------------------------- //
// Un moteur de recherche en php //
// ------------------------------------------------------------------------- //
// Copyright &#40;C&#41; 2000 - Grégory KOKANOSKY //
// ------------------------------------------------------------------------- //
// Web&#58; http&#58;//gregory.kokanosky.free.fr/ //
// Email&#58; gregory.kokanosky@free.fr //
// ------------------------------------------------------------------------- //
// Ce programme est libre, vous pouvez le redistribuer et/ou le modifier //
// selon les termes de la Licence Publique Générale GNU publiée par la Free //
// Software Foundation &#40;version 2 ou bien toute autre version ultérieure //
// choisie par vous&#41;. //
// //
// Ce programme est distribué car potentiellement utile, mais SANS AUCUNE //
// GARANTIE, ni explicite ni implicite, y compris les garanties de //
// commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à //
// la Licence Publique Générale GNU pour plus de détails. //
// //
// Vous devez avoir reçu une copie de la Licence Publique Générale GNU en //
// même temps que ce programme; si ce n'est pas le cas, écrivez à la Free //
// Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, //
// MA 02111-1307, États-Unis. //
// ------------------------------------------------------------------------- //





include&#40;&#34;include/config.inc.php3&#34;&#41;; //fichier de config
include&#40;&#34;include/header.html&#34;&#41;; //header html
include&#40;&#34;include/form.php3&#34;&#41;; //formulaire de recherche
if &#40;!isset&#40;$debut&#41;&#41; $debut = 0;
if &#40;!empty&#40;$recherche&#41;&#41;
{
$recherche=strtolower&#40;$recherche&#41;; //on passe en minuscule
$mots = str_replace&#40;&#34;+&#34;, &#34; &#34;, trim&#40;$recherche&#41;&#41;; //on remplace les + par des espaces
$mots = str_replace&#40;&#34;\&#34;&#34;, &#34; &#34;, $mots&#41;; //idem pour \
$mots = str_replace&#40;&#34;,&#34;, &#34; &#34;, $mots&#41;; //idem pour ,
$mots = str_replace&#40;&#34;&#58;&#34;, &#34; &#34;, $mots&#41;; //idem pour &#58;
$recherche=rawurlencode&#40;$recherche&#41;; //on encode la recherche

$tab=explode&#40;&#34; &#34; , $mots&#41;;
$nb=count&#40;$tab&#41;;

$sql=&#34;select * from search where 1 and mot_cles like \&#34;%$tab&#91;0&#93;%\&#34; &#34;;

for&#40;$i=1; $i<$nb; $i++&#41;
{
$sql.=&#34;$operateur mot_cles like \&#34;%$tab&#91;$i&#93;%\&#34; &#34;;
}

$sql2=$sql; //requete permettant de connaitre le nombre de résultats
$sql.=&#34; Limit $debut,$limit &#34;; // requête limitante.

mysql_connect&#40;$host,$user,$password&#41;;
$result2 = mysql_db_query&#40;$base,$sql2&#41;;
$result = mysql_db_query&#40;$base,$sql&#41;;

if&#40;$result&#41;
{
$nrows = mysql_num_rows&#40;$result2&#41;;
$flag = 1;
if&#40;mysql_num_rows&#40;$result&#41;==0&#41; echo &#34;<center><b>Pas de Résultat</b></center><br>&#34;;
else
{
include&#40;&#34;include/header_tab.html&#34;&#41;;
while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41;
{
echo $row&#91;&#34;id&#34;&#93;.&#34; | &#34;.$row&#91;&#34;titre&#34;&#93;;
$url = $row&#91;&#34;url&#34;&#93;;
echo &#34; | <a href=\&#34;$url\&#34;>$url</a><br>&#34;;
echo &#34;Description &#58; &#34;.$row&#91;&#34;description&#34;&#93;.&#34;<br><br>&#34;;
}
include&#40;&#34;include/footer_tab.html&#34;&#41;;
mysql_free_result&#40;$result&#41;;





/****************** Mise en place de la navigation. ************************************/
$nombre=ceil&#40;$nrows/$limit&#41;;

if&#40;$debut>0&#41;
{
echo &#34;<a href=search.php3?recherche=$recherche&operateur=$operateur&debut=&#34;.&#40;$debut-$limit&#41;.&#34;><<</a> &#34;;
}

if &#40;$nombre>1&#41;
{
for&#40;$i=1; $i<=$nombre; $i++&#41;
{
echo &#34;<a href=search.php3?recherche=$recherche&operateur=$operateur&debut=&#34;.&#40;&#40;$i-1&#41;*$limit&#41;.&#34;>&#34;.$i.&#34;</a> &#34;;
}
}
if&#40;&#40;$debut+$limit&#41;<$nrows&#41;
{
echo &#34;<a href=search.php3?recherche=$recherche&operateur=$operateur&debut=&#34;.&#40;$debut+$limit&#41;.&#34;>>></a>&#34;;
}

echo &#34;</CENTER>&#34;;

}

}
echo &#34;La requete SQL execute est &#58; $sql&#34;;
}

else
{
echo&#40;&#34;<center><br><b>Entrer au moins un mot</b></center>&#34;&#41;;
}


include&#40;&#34;include/footer.html&#34;&#41;;
?>


Création de la table search
[Voir le message caché (spoiler)]
#
# Table structure for table 'search'
#

CREATE TABLE search &#40;
id tinyint&#40;255&#41; DEFAULT '0' NOT NULL auto_increment,
titre varchar&#40;255&#41; NOT NULL,
url varchar&#40;255&#41; NOT NULL,
description text NOT NULL,
mot_cles text NOT NULL,
PRIMARY KEY &#40;id&#41;
&#41;;

#
# Dumping data for table 'search'
#

INSERT INTO search VALUES &#40; '1', 'phpinfo', 'http&#58;//www.phpinfo.net', 'Site sur php et mysql.
Comportant un forum, de la documentation, des scripts.
Une valeur sûr.', 'php et mysql php3 php4
forum articles doc'&#41;;
INSERT INTO search VALUES &#40; '2', 'Ma Page', 'http&#58;//gregory.kokanosky.free.fr', 'Site web personnel.
Scripts php/mySQL &#58; phpMyNewsLetter et phpMyGenealogy.
Documentation sur le protocole ip, sur le html au format pdf.', 'script php php3 php4 mysql phpmunewsletter newsletter ip html pdf'&#41;;
INSERT INTO search VALUES &#40; '3', 'Da Linux French Page', 'http&#58;//linuxfr.org', 'Da Linux French page est un site Linux francais communautaire.
Au programme news, sondages, discussions.', 'Linux news dacode mandrake debian red hat slackware slashdot info dacode LUG'&#41;;


Les codes du footer et du header (page HTML) ne sont pas mis car ils me semblent inhérents au problème.

[EDIT] même avec password="" dans le fichier config.inc cela ne change rien.
Image IPB

Posté mardi 14 novembre 2006 à 21:59 (#2) L'utilisateur est hors-ligne   Lesrode 

  • Alien modérateur
  • PipPipPipPipPipPipPipPip
  • Voir le blog
  • Groupe : Membres
  • Messages : 1 172
  • Inscrit(e) : 16/08/2003

Là comme ça à première vue, je dirais un problème de connexion SQL...
Dans le fichier "search" remplace
mysql_connect&#40;$host,$user,$password&#41;;
par
mysql_connect&#40;$host,$user,$password&#41; or die &#40;&#34;Erreur de connexion&#34;&#41;;

Tu verras alors si c'est bien ça.. Si c'est le cas, vérifie tes infos de connexion dans config.inc.

Sinon, un truc qui t'aidera pour la suite avec un serveur en local : dans le fichier php.ini trouve l'option "display_errors" et mets la sur "On"
Une fois que t'auras fait ça, relance ton script et PHP te signalera les erreurs qu'il peut y avoir ;)

PS : désolé, je sais plus où se trouve le php.ini dans EasyPHP mais je crois que tu peux y accéder par le menu dans la barre des tâches (souvenir inside...)

hope that helped :sifle:

Posté mardi 14 novembre 2006 à 22:32 (#3) L'utilisateur est hors-ligne   pikka 

  • Pokemon De Luxe
  • PipPipPipPipPipPip
  • Voir le blog
  • Groupe : Modérateur Section
  • Messages : 645
  • Inscrit(e) : 22/04/2005

"Lesrode" dit :

Tu verras alors si c'est bien ça.. Si c'est le cas, vérifie tes infos de connexion dans config.inc.

Désolé ce n'est pas ça :lol: pourtant ça m'aurait bien arrangée que ça le soit...

"Lesrode" dit :

désolé, je sais plus où se trouve le php.ini dans EasyPHP

Voila le chemin des 2 fichiers php.ini: C:/.../EasyPHP1-8\apache ou C:/.../EasyPHP1-8\conf_files
vu que je savais pas lequel j'ai mis les 2 sur on :sifle:
=> il me signale aucune erreur :P
Image IPB

Posté mercredi 15 novembre 2006 à 00:18 (#4) L'utilisateur est hors-ligne   Lesrode 

  • Alien modérateur
  • PipPipPipPipPipPipPipPip
  • Voir le blog
  • Groupe : Membres
  • Messages : 1 172
  • Inscrit(e) : 16/08/2003

Ah! J'ai une autre idée :lol:

Toujours dans le php.ini (celui du dossier apache, l'autre ça doit être le fichier de conf par défaut), tu as sans doute l'option register_globals=Off, ce qui est une bonne chose, sauf que le script est codé en considérant qu'elle est réglée sur On

Dans ce cas, c'est normal que tu n'aies pas de message d'erreur (c'est pas parce qu'un script ne fait pas ce qu'on aimerait qu'il contient des erreurs de codage ;)) car le moteur de recherche est contenu dans la clause
if &#40;!empty&#40;$recherche&#41;&#41;
{
...
// le moteur de recherche
...
}
else
{
echo&#40;&#34;<center><br><b>Entrer au moins un mot</b></center>&#34;&#41;;
}


Si ton register_globals est sur Off comme je le pense, la clause if sera toujours fausse car la variable $recherche n'existe pas.
Donc en gros, tu mets register_globals = On dans ton php.ini et ton souci devrait être réglé (enfin j'espère :sifle:)

PS : le script pourrait être remanié pour fonctionner en register_globals=Off, mais là de suite j'avoue que je suis moyen motiv' :P
PPS : je l'avais pas précisé mais tu t'en doutes sûrement : il faut évidemment relancer le serveur Apache pour qu'il prenne en compte les modifs du fichier php.ini

Posté jeudi 16 novembre 2006 à 21:31 (#5) L'utilisateur est hors-ligne   pikka 

  • Pokemon De Luxe
  • PipPipPipPipPipPip
  • Voir le blog
  • Groupe : Modérateur Section
  • Messages : 645
  • Inscrit(e) : 22/04/2005

"Lesrode" dit :

Si ton register_globals est sur Off comme je le pense

héhéhé et tu penses bien !!!! :rolleyes:

Mais... hélas, je viens juste de retester et ... ça ne marche toujours pas :pinch: pourtant j'y croyais :crying:

Bon j'y ai quand même réfléchis un petit peu à cette affaire et je ne vois que ces causes pour le problème :

  • mon antivirus empèche l'interrogation de la base (ça je doute vraiment car d'autres script php fonctionnent sur mon PC...)
  • la variable qui définit les mots à chercher est erronée quelque part mais où...
  • le script de restitution des données est erroné et empèche la visualisation de ces dernières
En tout cas merci de te pencher sur mon problème et pour ton aide Lesrode ;) :sifle:

PS :

Citation

PPS : je l'avais pas précisé mais tu t'en doutes sûrement : il faut évidemment relancer le serveur Apache pour qu'il prenne en compte les modifs du fichier php.ini

Je suis blonde mais quand même!!! quoique des fois :unsure: :unsure: :unsure: :unsure: :unsure: :unsure: :unsure: :unsure: ...... non j'ai rien dit 0:) :lol: :lol: :lol: :lol:
Image IPB

Posté jeudi 16 novembre 2006 à 23:43 (#6) L'utilisateur est hors-ligne   Lesrode 

  • Alien modérateur
  • PipPipPipPipPipPipPipPip
  • Voir le blog
  • Groupe : Membres
  • Messages : 1 172
  • Inscrit(e) : 16/08/2003

Bon, là comme ça j'avoue que j'ai plus d'idée. Alors j'ai testé... Téléchargé le script, installé sur mon serveur, balancé le dump MySQL, configuré le config.inc, appelé le script...

Comme je m'y attendais, la recherche ne renvoyait rien.

Ni une, ni deux, je modifie mon php.ini avec register_globals=On, je relance Apache, je renvoie mon navigateur sur l'url, et là, la recherche me renvoie des résultats...

C'est pourquoi je me permets d'insister, es-tu certain que ton register_globals est bien réglé sur "On" ? :sifle:
Pour en être certain, une page phpinfo.php contenant
<? phpinfo&#40;&#41;; ?>
te l'assurera

Car pour le coup, le script d'origine fonctionne...

Posté samedi 18 novembre 2006 à 11:15 (#7) L'utilisateur est hors-ligne   pikka 

  • Pokemon De Luxe
  • PipPipPipPipPipPip
  • Voir le blog
  • Groupe : Modérateur Section
  • Messages : 645
  • Inscrit(e) : 22/04/2005

Sortie de nul part, à la vitesse de la lumière il vient me sauver j'ai nommé Lesrode :lol:

Je m'explique :

"Lesrode" dit :

C'est pourquoi je me permets d'insister

et tu as bien fait !!! Il y a un subterfuge caché dans le fichier php.ini :huh:

Au début du fichier, dans la section About this file register_globals était sur Off.
Quand la première fois tu m'as dit de mettre sur On j'ai modifié sur la ligne ci-dessous.
- register_globals = Off	   &#91;Security, Performance&#93;
; Global variables are no longer registered for input data &#40;POST, GET, cookies,
; environment and other server variables&#41;. Instead of using $foo, you must use


Or, avec la page que tu m'as dit de "construire" pour m'assurer que le register_globals était sur On me renvoyait le contraire. J'ai donc effectuer une petite recherche dans le fichier php.ini et j'ai trouvé ça dans la section Data Handling
You should do your best to write your scripts so that they do not require
; register_globals to be on; Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = Off


Je l'ai passé sur On et tout fonctionne maintenant :w00t: :w00t: :w00t:


:) :confet: :confet: Merci merci merci Lesrode :confet: :confet: :confet:

Mais, il y a une petite question qui me turlupine tout de même depuis ce matin, si mon hébergeur a mis l'option register_globals sur Off le script ne fonctionnera pas :blink: :blink: faut faire comment dans ces cas-ci?
Image IPB

Posté dimanche 19 novembre 2006 à 19:44 (#8) L'utilisateur est hors-ligne   Lesrode 

  • Alien modérateur
  • PipPipPipPipPipPipPipPip
  • Voir le blog
  • Groupe : Membres
  • Messages : 1 172
  • Inscrit(e) : 16/08/2003

Content que ça fonctionne maintenant :P C'est vrai que dans les fichiers de conf qu'on édite à la main, il faut s'assurer de modifier véritablement l'option et non pas les explications en commentaires (dont les lignes commencent généralement par ; ou #)
Je n'y avais pas pensé, mais l'avantage c'est que maintenant tu le sauras pour les prochaines fois 0:)

Voir le messagepikka, le 18/11/2006 à 11:15, dit :

Mais, il y a une petite question qui me turlupine tout de même depuis ce matin, si mon hébergeur à mis l'option register_globals sur Off le script ne fonctionnera pas :crying: :P faut faire comment dans ces cas-ci?

Alors avant tout, il faut savoir que les hébergements de pages perso laissent le register_globals sur On, justement pour pas que les codeurs non chevronnés se prennent trop la tête sur leurs scripts. Donc si tu penses hébeger ton moteur chez Free ou autre, pas besoin de vraiment s'en préocuper.
Pour les hébergement pro, ça dépend, j'en ai déjà vu qui laissaient sur On, mais en général c'est plutôt sur Off par défaut (comme je te le disais, c'est mieux). Outre l'aspect plus sécurisé, les scripts codés pour du register_globals Off sont plus clairs, car on est obligé de faire appel aux variables avec leur véritable nom (et pas un nom simplifié comme c'est par exemple le cas de ton script).

Prenons l'exemple de ton moteur. Le formulaire a la méthode POST. Dans ce cas, quand tu soumets ton formulaire, PHP crée une variable $_POST de type Array (tableau) qui contient toutes les données passées au formulaire.
A partir de là, tu peux appeler chaque champs du formulaire (dans notre cas, 'recherche' et 'operateur') gràce à la syntaxe de tableau associatif. Pour la valeur passée au champ 'recherche', il faudra donc appeler $_POST['recherche'] et non pas seulement $recherche (comme c'est le cas actuellement)
Alors, au début c'est un peu rébarbatif, mais au final, tu as une maîtrise totale de tes variables, car si dans ton script tu crées une variables $toto, elle n'influera pas sur $_POST['toto'] et inversement.

J'ai pris quelques minutes pour remanier le script afin qu'il fonctionne avec register_globals=Off (l'avantage, c'est qu'il fonctionnera aussi avec register_globals=On, alors que comme on peut le voir, l'inverse n'est pas vrai ;))
J'ai fait ça de manière assez simple pour éviter de trop toucher au code déjà fait, mais normalement ça devrait fonctionner comme il faut.
Dans la page search.php3, après les include du début, il faut juste remplacer
if &#40;!isset&#40;$debut&#41;&#41; $debut = 0;

par
if &#40;isset&#40;$_GET&#91;'debut'&#93;&#41;&#41; {$debut=$_GET&#91;'debut'&#93;;}
else {$debut=0;}
if &#40;isset&#40;$_POST&#91;'recherche'&#93;&#41;&#41; {$recherche=$_POST&#91;'recherche'&#93;;}
else if &#40;isset&#40;$_GET&#91;'recherche'&#93;&#41;&#41; {$recherche=$_GET&#91;'recherche'&#93;;}
if &#40;isset&#40;$_POST&#91;'operateur'&#93;&#41;&#41; {$operateur=$_POST&#91;'operateur'&#93;;}
else if &#40;isset&#40;$_GET&#91;'operateur'&#93;&#41;&#41; {$operateur=$_GET&#91;'operateur'&#93;;}

Ce bout de code initialise les variables du script avec les valeurs passées soit par le formulaire ($_POST) soit dans l'url ($_GET)

Enjoy :blink:

Posté lundi 20 novembre 2006 à 19:17 (#9) L'utilisateur est hors-ligne   pikka 

  • Pokemon De Luxe
  • PipPipPipPipPipPip
  • Voir le blog
  • Groupe : Modérateur Section
  • Messages : 645
  • Inscrit(e) : 22/04/2005

J'ai fait la modification et... tout marche pour le mieux :lol: :huh: :P :)

Encore merci Lesrode !!! :)
Si je peux t'aider dans quoique ce soit hésite pas ;) :ph34r:
Image IPB

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Ce sujet est fermé


1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

Thème et langage