Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 20h45   #1
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Par défaut Pb de requête Sql MATCH AGAINST en PHP

Bonsoir à tous et à toutes,

Je viens demander de l'aide sur ce forum parce que je sèche sur qlq chose depuis bientôt 3h et je ne sais plus quoi faire...

En fait, j'ai crée un petit moteur de recherche Fulltext basique pour mon site.
Le pb est que, quand j'exécute la requête suivante dans MySql :
Code :
1
2
3
4
 
SELECT * FROM $tableName WHERE MATCH ( titre_even, lieu_even ) 
               AGAINST (' $motscles ' IN BOOLEAN MODE) ORDER BY id_even DESC 
               LIMIT $start, $limit ";
J'obtiens 5 résultats avec le mot clé brazzaville.

Et quand je tape ce même mot clé dans mon moteur de recherche sur le site, j'ai une page blanche... sans erreur mais, le script ne me retourne rien du tout.

Sinon à part çà tout fonctionne très bien.

Auriez vous une idée de comment régler ce problème ?

Un grand merci d'avance pour le coup de main.
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 20h56   #2
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 463
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 463
Points : 21 269
Points : 21 269
Déjà attention, tes espaces autour de $motscles vont exister dans la requête.
Ensuite si tu obtiens une page blanche c'est peut être que ton PHP n'affiche pas les erreurs.
Affiche la requête que tu exécutes pour la contrôler.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 21h03   #3
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Citation:
Envoyé par sabotage Voir le message
Déjà attention, tes espaces autour de $motscles vont exister dans la requête.
Ensuite si tu obtiens une page blanche c'est peut être que ton PHP n'affiche pas les erreurs.
Affiche la requête que tu exécutes pour la contrôler.
Merci pour ta réponse rapide sabotage et désolé pour l'usage de la balise [code]
je viens souvent sur le site mais c'est mon 1er post...

Sinon, voici ma requête complète avec la gestion des erreurs. J'ai corrigé les espaces aussi comme suggéré plus haut.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$query1 =" SELECT * FROM $tableName WHERE MATCH (titre_even, lieu_even) 
               AGAINST ('$motscles' IN BOOLEAN MODE) ORDER BY id_even DESC 
               LIMIT $start, $limit ";
 
		if(!( $result = mysql_query($query1,$con)))
	        {
		        print("Erreur de requete<BR>\n");
		        print("MySQL reporte: " . mysql_error() . "<BR>\n");
		        print("La requete etait: $query1<BR>\n");
		        exit();
	        }
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 21h34   #4
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 463
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 463
Points : 21 269
Points : 21 269
Pour du debug ne mets pas de conditions
Code :
1
2
3
4
5
6
7
8
9
$query1 =" SELECT * FROM $tableName WHERE MATCH (titre_even, lieu_even) 
               AGAINST ('$motscles' IN BOOLEAN MODE) ORDER BY id_even DESC 
               LIMIT $start, $limit ";
 
$result = mysql_query($query1,$con);
echo "Erreur de requete<BR>\n";
echo "MySQL reporte: " . mysql_error() . "<BR>\n";
echo "La requete etait: $query1<BR>\n";
exit();
Sinon tu rates le cas ou la requête est syntaxiquement bonne mais ne donne pas ce qu'on voudrait pour autant.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 21h36   #5
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Citation:
Envoyé par sabotage Voir le message
Pour du debug ne mets pas de conditions
Code :
1
2
3
4
5
6
7
8
9
$query1 =" SELECT * FROM $tableName WHERE MATCH (titre_even, lieu_even) 
               AGAINST ('$motscles' IN BOOLEAN MODE) ORDER BY id_even DESC 
               LIMIT $start, $limit ";
 
$result = mysql_query($query1,$con);
echo "Erreur de requete<BR>\n";
echo "MySQL reporte: " . mysql_error() . "<BR>\n";
echo "La requete etait: $query1<BR>\n";
exit();
Sinon tu rates le cas ou la requête est syntaxiquement bonne mais ne donne pas ce qu'on voudrait pour autant.
Ok, merci je teste çà et je dis ce que ça donne
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 21h48   #6
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
J'ai modifié la requête et j'ai systématiquement ce msg d'erreur qlq soit le mot clé tapé dans le champ de recherche :

Code :
1
2
3
4
 
Erreur de requete
MySQL reporte:
La requete etait: SELECT * FROM rapec_v2_even WHERE MATCH (titre_even, lieu_even) AGAINST ('festival' IN BOOLEAN MODE) ORDER BY id_even DESC LIMIT 0, 10
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 22h03   #7
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Sauf erreur de ma part, mais vu que la fonction mysql_error() ne retourne aucune erreur, c'est que mon pb ne vient pas de ma requête... ou bien ?

Code :
1
2
3
4
5
6
7
8
9
 
$query1 ="SELECT * FROM $tableName WHERE MATCH (titre_even, lieu_even) 
              AGAINST ('".$motscles."' IN BOOLEAN MODE) ORDER BY id_even DESC 
              LIMIT ".$start.", ".$limit."";
 
$result = mysql_query($query1,$con);
echo "Erreur de requete<BR>\n";
echo "MySQL reporte: ".mysql_error()."<BR>\n";
echo "La requete etait: $query1<BR>\n";
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 22h12   #8
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
J'ai enlevé le exit(); qui était en bout de code juste après le dernier echo... il m'affiche bien les résultats quand je tape par exemple le mot clé festival mais quand je tape brazzaville ou Brazzaville, je n'ai rien à part une page blanche sans erreur...

J'ai ceci :

Code :
1
2
3
4
 
Erreur de requete
MySQL reporte:
La requete etait: SELECT * FROM rapec_v2_even WHERE MATCH (titre_even, lieu_even) AGAINST ('brazzaville' IN BOOLEAN MODE) ORDER BY id_even DESC LIMIT 0, 10
au dessus de ma page mais, çà je penses que c'est parce que j'ai mis des echo partout dans le cadre du debug ou bien ?

Ah pffffff ça devient un casse tête pour moi ce truc
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 22h28   #9
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 463
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 463
Points : 21 269
Points : 21 269
Tu es sûr que si tu fais cette requête avec brazzaville dans phpmyadmin tu as des résultats ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 22h34   #10
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Oui ! je suis sûr à 100% cette même requête avec le mot clé brazzaville me retourne 5 résultats...

Dis moi, je peux te filer l'url concernée pour que tu puisses voir toi même ?

je demandes çà, parceque je ne sais pas si j'ai le droit de publier des url ou pas sur le site... ce n'est pas de la pub hein
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 22h49   #11
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 463
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 463
Points : 21 269
Points : 21 269
Voir une page blanche ça n'apportera rien
Ajoute un contrôle :
Code :
echo "Nombre de résultat :" . mysql_num_rows($result) . "<BR>\n";
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 23h02   #12
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Citation:
Envoyé par sabotage Voir le message
Voir une page blanche ça n'apportera rien
Ajoute un contrôle :
Code :
echo "Nombre de résultat :" . mysql_num_rows($result) . "<BR>\n";
Alors, en ajoutant le contrôle ci-dessus, j'obtiens ceci :

Nombre de résultat : 5
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 23h07   #13
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Je ne sais pas si c'est important, mais je te le dis quand même au cas où... j'utilise le moteur de template de phpbb pour la séparation du code xhtml et du php.
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 23h10   #14
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 463
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 463
Points : 21 269
Points : 21 269
C'est rassurant : la requête fonctionne.
C'est la facon dont tu fais l'affichage qui pose problème.
Tu as regardé le code source de ta page blanche, voir s'il n'y avait pas quelque chose dedans ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 23h13   #15
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
La div la quelle doivent s'afficher les résultats est vide. J'ai juste ce message :

Nombre de résultat : 5
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 23h35   #16
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Voici la partie qui s'occupe de l'affichage des résultats :

Côté php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
while($row = mysql_fetch_array($result))
		        {
		              $paginate1  = '<span class="txt-actu">';
				      $paginate1 .= '<a href="details-evenement.php?id='.$row['id_even'].'&cid='.$row['id_cat'].'"class="txt-actu">'.htmlentities(stripslashes($row['titre_even'])).'</a>';
				      $paginate1 .= '</span>';
				      $paginate1 .= '<br />';
				      $paginate1 .= '<span class="txt-actu2">';
				      $paginate1 .= '<a href="details-evenement.php?id='.$row['id_even'].'&cid='.$row['id_cat'].'"class="txt-actu2">'.htmlentities(stripslashes($row['accroche_even'])).'</a>';
				      $paginate1 .= '<br />';
				      $paginate1 .= '<img name="trait-separation" src="images/trait-separation.jpg" width="653" height="5" alt="trait-separation" border="0" />';
				      $paginate1 .= '</span>';
				      $paginate1 .= '<br /><br />';
 
					  $template->assign_block_vars('user1', array( 'PAGIN1' => $paginate1 ));
				}
Et ceci côté xhtml :

Code :
1
2
3
4
5
6
 
<div id="hide_test">  
                              <!-- BEGIN user1 -->
				{user1.PAGIN1}
                              <!-- END user1 -->
</div>
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 14h13   #17
Exia93
Membre Expert
 
Homme
Étudiant
Inscription : avril 2012
Messages : 601
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2012
Messages : 601
Points : 1 052
Points : 1 052
Bonjour,

quel moteur de template utilise tu ?

EDIT : après avoir chercher le nom de la fonction assign_block_vars() sur le net le premier résultat est PHPBoost CMS,

si tu utilise PHPBoost CMS avec son moteur de template,

selon la doc la syntaxe dans le template serait plutôt :
Code :
1
2
3
# START user1 # 
{user1.PAGIN1}
# END user1 #
Exia93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 16h38   #18
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Citation:
Envoyé par Exia93 Voir le message
Bonjour,

quel moteur de template utilise tu ?

EDIT : après avoir chercher le nom de la fonction assign_block_vars() sur le net le premier résultat est PHPBoost CMS,

si tu utilise PHPBoost CMS avec son moteur de template,

selon la doc la syntaxe dans le template serait plutôt :
Code :
1
2
3
# START user1 # 
{user1.PAGIN1}
# END user1 #
Bonjour,

En fait moi j'utilise une classe nommée : template.php et c'est le moteur de template de phpbb mais en version light...

Voici les références :

Code :
1
2
3
4
5
6
 
                             template.php
 
    begin                : Saturday, Feb 13, 2001
    copyright          : (C) 2001 The phpBB Group
    email                : support@phpbb.com
ça doit être la 1ere version de la class je pense
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 16h44   #19
Exia93
Membre Expert
 
Homme
Étudiant
Inscription : avril 2012
Messages : 601
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2012
Messages : 601
Points : 1 052
Points : 1 052
Utilise tu ces deux fonctions :
Code :
1
2
3
4
5
6
7
8
 
$template->set_filenames(array( 'index' => 'index.tpl') );
 
//Tous ton script pour fournir les données à ton template
 
$template->pparse('index');
//J'ai vue aussi la fonction display au lieu de pparse(),
//Je pense que c'est selon la version du moteur de template essaye les deux si l'une ne fonctionne pas
?

source
source2
Exia93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 16h49   #20
kdrmc2000
Invité de passage
 
Homme
Webmaster
Inscription : janvier 2013
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster
Secteur : Associations - ONG

Informations forums :
Inscription : janvier 2013
Messages : 13
Points : 0
Points : 0
Tout à fait, j'ai ceci en début de page :

Code :
1
2
3
4
5
6
7
8
9
10
 
// on crée une nouvelle instance de la classe Template
	   //*****************************************************
 
       $template = new Template("./"); // on indique en argument le chemin vers les modèles
 
        // modèle à utiliser auquel on a joint un nom arbitraire
	   //*******************************************************
 
       $template->set_filenames( array('body' => 'recherche.tpl'));
et ceci en fin de page pour passer les éléments au template après assignation des varibles :

Code :
1
2
3
 
// Affichage des données
  $template->pparse('body');
kdrmc2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h20.


 
 
 
 
Partenaires

Hébergement Web