Page 1 sur 1

Probleme code - fonction recherche

Posté : 27 mai 2011, 10:35
par Ape
Bonjour,

En esperant être dans la bonne partie du forum, je vous expose mon petit problème. Je suis débutant en PHP et en base de donnée, j'ai voulu intégré dans un site que j'ai créer une fonction recherche. Le fait est que sur ce site, l'administrateur peut poster dans certaines sections des articles. Ces articles sont dans une base de donnée. J'ai récupérer sur internet un code déjà fait permettant de réaliser ce que je veux. J'ai changer le code pour qu'il fonctionne avec mon site et ma base de donnée cependant j'ai un bug et je n'arrive pas a comprendre d'ou il viens.

Tout d'abord j'ai mis sur une des pages de mon site le bout de code suivant, sur la page ou j'ai mis ce code j'ai bien le champ recherche qui apparait.:

Code : Tout sélectionner

<form method="post" action="search.php3"> Entrez un mot clé:<br> <input type="text" name="Mot" size="15"> <input type="submit" value="Rechercher" alt="Lancer la recherche!"> </form>
J'ai créer un fichier "search.php3" que j'ai mis sur le ftp de mon site avec ce doce à l'intérieur:

Code : Tout sélectionner

<?php $host = ""; $user = ""; $password = ""; $bdd = ""; mysql_connect($host, $user, $password) or die ("Connexion au serveur impossible"); // on choisit la bonne base mysql_select_db($bdd) or die ("Connexion a la base impossible"); echo " <html> <head> <title>Résultat de la recherche</title> </head> <body>"; if (($Mot == "")||($Mot == "%")) { // Si aucun mot clé n'a été saisi, // le script demande à l'utilisateur // de bien vouloir préciser un mot clé echo " Veuillez entrer un mot clé s'il vous plaît! <p>"; } else { // On selectionne les enregistrements contenant le mot clé // dans les keywords ou le titre $query = "SELECT distinct count(lien) FROM search WHERE keyword LIKE \"%$Mot%\" OR titre LIKE \"%$Mot%\" "; $result = mysql_query($query); $row = mysql_fetch_row($result); $Nombre = $row[0]; // Si aucun enregistrement n'est retourné, // on affiche un message adéquat if ($Nombre == "0") { echo " <h2>Aucun résultat ne correspond à votre recherche</h2> <p> "; } // Sinon, on affiche le nombre d'enregistrements correspondant // et les résultats eux-mêmes else { $query = "SELECT distinct lien,keyword,titre FROM search WHERE keyword LIKE \"%$Mot%\" OR titre LIKE \"%$Mot%\" ORDER by titre ASC"; $result = mysql_query($query); // Si un seul enregistrement est trouvé, on affiche un message au singulier if ($Nombre == "1") { echo " <a name=\"#resultat\"><h2>Résultat: Un article trouvé</h2></a> <p>"; } // Dans le cas contraire le message est au pluriel... else { echo " <a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a> <p>"; } while($row = mysql_fetch_row($result)) { echo " <p>\n <b>$row[2]</b>\n <br><a href=\"../$row[0]\">Visualiser l'article</a>\n <p>\n "; } } } // on ferme la base mysql_close(); ?> </body> </html>
J'ai bien entendu rempli les champs pour indiquer mon "host, user, password et bdd". Une fois que je fait un test en essayant de faire une recherche sur mon site, j'ai le message suivant "Veuillez entrer un mot clé s'il vous plaît!" ... Ce qui me rassure c'est que les deux codes (ci-dessus) fonctionnent bien ensemble et que j'arrive a me connecter a ma bdd mais je ne comprend pas pourquoi j'ai ce message :x

En esperant que vous allez pouvoir m'aider,

cordialement,

Ape

Re: Probleme code - fonction recherche

Posté : 27 mai 2011, 11:06
par macgawel
Bonjour.

1. *.php3 => Tu travailles (encore) sous php 3 ?

2. Il faudrait que tu affiches les erreurs avec un error_reporting(E_ALL); en début de chaque script (ou en modifiant le PHP.INI si tu peux), ça t'aiderait :roll:
Par exemple, pour ton problème :
if (($Mot == "")||($Mot == "%")) {
   echo "
   Veuillez entrer un mot clé s'il vous plaît!
   <p>";
}
Tu passe dans le test.
=> $Mot == "" ou $Mot == "%".
Je ne vois pas à quel moment tu donnes une valeur à $Mot. Voir ICI pour une explication de ton problème...

Re: Probleme code - fonction recherche

Posté : 27 mai 2011, 11:20
par Ape
Merci pour ta réponse Macgawel,

Je suis un débutant en php, je ne comprend pas tout et il me manque pas mal de notions a vrai dire... je ne connais pas du tout la différence entre un fichier php3 et un fichier php. Le fait est que j'ai récupérer les deux codes (ceux de mon premier message) sur un site et que dans le premier code il y avait ce fameux "search.php3" donc j'ai garder ce nom la sans trop savoir ce que cela voulait dire ^^

J'ai coller ton code () au début de ma page search.php3. j'ai essayer d'effectuer une recherche et j'ai eu le meme probleme que d'habitude avec cette ligne en plus :

Code : Tout sélectionner

Notice: Undefined variable: Mot in /home/forteres/public_html/search.php3 on line 29
La ligne 29 correspond a ca:

Code : Tout sélectionner

if (($Mot == "")||($Mot == "%")) {
Effectivement je ne comprend pas cette ligne... car à aucun moment je définis le %Mot. Est ce a moi de le définir ? si oui, a quel endroit faut-il le faire ? Je vais essayer de chercher a ce niveau mais si vous pouvez m'aiguiller cela serer vraiment cool.

merci encore pour la réponse Mac' !

Re: Probleme code - fonction recherche

Posté : 27 mai 2011, 11:31
par macgawel
Je suis un débutant en php, je ne comprend pas tout et il me manque pas mal de notions a vrai dire... je ne connais pas du tout la différence entre un fichier php3 et un fichier php. Le fait est que j'ai récupérer les deux codes (ceux de mon premier message) sur un site et que dans le premier code il y avait ce fameux "search.php3" donc j'ai garder ce nom la sans trop savoir ce que cela voulait dire ^^
Disons qu'à lépoque où php4 est sorti, il y a eu toute une période où les deux versions cohabitaient.
une extension PHP3 permettait de "dire" que c'était du PHP 3.
Ce n'est qu'un petit détail, mais ça permet de dater le code, et donc les problèmes qui peuvent être liés...
J'ai coller ton code () au début de ma page search.php3. j'ai essayer d'effectuer une recherche et j'ai eu le meme probleme que d'habitude avec cette ligne en plus :

Code : Tout sélectionner

Notice: Undefined variable: Mot in /home/forteres/public_html/search.php3 on line 29
La ligne 29 correspond a ca:

Code : Tout sélectionner

if (($Mot == "")||($Mot == "%")) {
Effectivement je ne comprend pas cette ligne... car à aucun moment je définis le %Mot. Est ce a moi de le définir ? si oui, a quel endroit faut-il le faire ? Je vais essayer de chercher a ce niveau mais si vous pouvez m'aiguiller cela serer vraiment cool.

merci encore pour la réponse Mac' !
Tu es allé voir le lien que je t'ai donné ?..

Re: Probleme code - fonction recherche

Posté : 27 mai 2011, 13:40
par Ape
Je comprend pas comment faire... j'ai regarder la page que tu me donne mais je vois pas du tout. :?

Re: Probleme code - fonction recherche

Posté : 27 mai 2011, 14:29
par macgawel
Définit si oui ou non les variables EGPCS (Environment, GET, POST, Cookie, Server) seront enregistrées comme des variables globales.
Depuis » PHP 4.2.0, la valeur par défaut de cette directive est off.
Lisez le chapitre sur la sécurité concernant l'utilisation de register_globals pour plus d'informations.
Quand on suit le lien :
L'une des évolutions les plus controversées de PHP a été le changement de valeur par défaut de la directive PHP register_globals, qui est passée de On à Off en PHP » 4.2.0. Beaucoup d'applications dépendaient de cette directive, et de nombreux programmeurs ne savaient même pas qu'elle existait, et supposait que c'était le fonctionnement normal de PHP. Cette page explique comment on peut écrire du code peu sécuritaire en utilisant cette directive. Gardez bien en tête que cette directive, par elle-même, n'est pas un trou de sécurité, mais qu'elle facilite leur création.
(...)
Note: Superglobales : disponibilité
Depuis PHP 4.1.0, les tableaux superglobaux tels que $_GET, $_POST et $_SERVER, etc. sont disponibles. Pour plus d'informations, lisez la section superglobals
Et en suivant le lien sur la section superglobals :
Depuis la version PHP 4.2.0, la valeur par défaut de la directive PHP register_globals est off. Ceci est une évolution majeure de PHP. Avoir la directive register_globals à off affecte les variables pré-définies du contexte global. Par exemple, pour lire DOCUMENT_ROOT vous devez utiliser $_SERVER['DOCUMENT_ROOT'] au lieu de $DOCUMENT_ROOT ou bien, il faut lire $_GET['id'] dans l'URL http://www.example.com/test.php?id=3 au lieu de $id ou encore $_ENV['HOME'] au lieu de $HOME.
Pour être clair :
Ton formulaire envoie les données par un POST.
=> Le contenu des input est stocké dans la variable superglobale $_POST, alors qu'avant ils étaient directement stockés dans une variable du même nom.

=> Ce n'est plus $Mot qu'il faut utiliser, mais $_POST['Mot'].

Mon conseil : au début du script, récupère le contenu du POST dans tes variables, et profite-en pour sécuriser un minimum :
<?php
if ( empty ($_POST['Mot'] ) ) { // Si aucun mot clé n'a été saisi
   die ("Veuillez entrer un mot clé s'il vous plaît !");
}
else {
   $Mot = mysql_real_escape_string($_POST['Mot'];
}
// La suite...   

Re: Probleme code - fonction recherche

Posté : 27 mai 2011, 14:37
par Âpe
Comme j'ai dit au début, je suis vraiment un débutant, a la base je suis plus graphiste, j'ai quelques notion en html et php mais c'est des petites bases, d'ou mes difficultés a comprendre tout ce que tu dit et tout ce qui est sur la page de ton lien :P . Je vais essayer de comprendre et de mettre en place ce que tu m'a dit, je te remercie encore pour les conseils !

Re: Probleme code - fonction recherche

Posté : 28 mai 2011, 23:50
par Ape
J'essaye de me d'épatouiller mais c'est vraiment dur avec mes connaissances limité ... je vous met le code que j'ai sur ma page "search.php3"

Image

Quand j'essaye d'effectuer une recherche sur mon site voila ce que j'ai comme message

Code : Tout sélectionner

Notice: Undefined variable: Nombre in /home/forteres/public_html/search.php3 on line 37 Notice: Undefined variable: Nombre in /home/forteres/public_html/search.php3 on line 57 Notice: Undefined variable: Nombre in /home/forteres/public_html/search.php3 on line 69 Résultat: articles trouvés Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/forteres/public_html/search.php3 on line 72

Re: Probleme code - fonction recherche

Posté : 28 mai 2011, 23:52
par Ape
J'ai aucune idée concernant les erreurs ... j'ai deja beaucoup de mal a comprendre le code dans sa globalité.

En esperant que vous allez voir ce qui cloche car je suis perdu : s

Re: Probleme code - fonction recherche

Posté : 29 mai 2011, 09:25
par Cyrano
Un peu de logique serait utile...

Les trois premiers messages d'erreur indiquent que la variable « $Nombre » n'est pas définie : en clair, tu utilises une variable que tu n'as pas créée ni initialisée. L'erreur suivante découle directement de la première, donc si tu corriges la première, les suivantes disparaîtront.

Reste donc à définir où tu as défini ta variable « $Nombre », à priori ailleurs : donc observe le déroulement de ton code et surtout sa chronologie. Il y a fort à parier que ta variable est définie après le code que tu nous as montré.

Un détail : lorsque tu affiches du code, au lieu d'une capture d'écran, fais donc un copier/coler et utilise le bouton [php] de la barre d'outil du forum pour avoir la coloration syntaxique et la mise en forme.