Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 21
  1. #1
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 223
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 223
    Points : 30 921
    Points
    30 921

    Par défaut

    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.

  3. #3
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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();
    	        }

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 223
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 223
    Points : 30 921
    Points
    30 921

    Par défaut

    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.

  5. #5
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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

  6. #6
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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

  7. #7
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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";

  8. #8
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 223
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 223
    Points : 30 921
    Points
    30 921

    Par défaut

    Tu es sûr que si tu fais cette requête avec brazzaville dans phpmyadmin tu as des résultats ?

  10. #10
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 223
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 223
    Points : 30 921
    Points
    30 921

    Par défaut

    Voir une page blanche ça n'apportera rien
    Ajoute un contrôle :
    Code :
    echo "Nombre de résultat :" . mysql_num_rows($result) . "<BR>\n";

  12. #12
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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

  13. #13
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 223
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 223
    Points : 30 921
    Points
    30 921

    Par défaut

    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 ?

  15. #15
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    La div la quelle doivent s'afficher les résultats est vide. J'ai juste ce message :

    Nombre de résultat : 5

  16. #16
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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>

  17. #17
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 764
    Points : 1 374
    Points
    1 374

    Par défaut

    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 #

  18. #18
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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

  19. #19
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 764
    Points : 1 374
    Points
    1 374

    Par défaut

    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

  20. #20
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    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

    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');

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •