IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Pb de requête Sql MATCH AGAINST en PHP


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour du debug ne mets pas de conditions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pour du debug ne mets pas de conditions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu es sûr que si tu fais cette requête avec brazzaville dans phpmyadmin tu as des résultats ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Voir une page blanche ça n'apportera rien
    Ajoute un contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Nombre de résultat :" . mysql_num_rows($result) . "<BR>\n";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Voir une page blanche ça n'apportera rien
    Ajoute un contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    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 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    Par défaut
    Voici la partie qui s'occupe de l'affichage des résultats :

    Côté php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div id="hide_test">  
                                  <!-- BEGIN user1 -->
    				{user1.PAGIN1}
                                  <!-- END user1 -->
    </div>

  17. #17
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # START user1 # 
    {user1.PAGIN1}
    # END user1 #
    une réponse vous a permis d'avancer ?

  18. #18
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Utilise tu ces deux fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    une réponse vous a permis d'avancer ?

  20. #20
    Nouveau Candidat au Club
    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 : 1
    Points
    1
    Par défaut
    Tout à fait, j'ai ceci en début de page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Affichage des données
      $template->pparse('body');

Discussions similaires

  1. [SQL] PB requête SQL dans un script php et sous phpmyadmin
    Par badboys46 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 22/06/2007, 12h36
  2. [MySQL] Requête sql dans un script php
    Par ceaser dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/05/2007, 15h01
  3. Réponses: 15
    Dernier message: 11/05/2007, 16h28
  4. [MySQL] requête sql vers excel en php
    Par jenny06 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 20/04/2007, 12h27
  5. [SQL] Traitement de plusieurs requêtes .SQL dans un script PHP?
    Par M4x dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/03/2006, 20h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo