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 :

Problème avec mysql_fetch_assoc et Match Against [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Problème avec mysql_fetch_assoc et Match Against
    Bonsoir,

    J'essai de faire un moteur de recherche interne pour une base de donnée. J'ai reussi à faire la recherche en fulltext avec match against et j'ai voulu faire une pagination pour les resultats obtenus. J'ai trouvé des bouts de codes par-ci par-là parce que je ne suis pas vraiment calé en php. Le problème est que pour compter le nombre de resultats d'une recherche j'ai voulu utiliser une seconde fois le Match Against avec un mysql_fetch_assoc pour recup le tableau et une derniere ligne pour recup la valeur mais j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/zefree/public_html/fr/blagues/recherche.php on line 47
    recherche de femmeil y a resultat(s)
    Si je fais un simple select de la table ca marche mais ca me donne tous les resultats donc un nombre de pages impressionnant. Ce que je voudrais c'est n'avoir que les pages qui concerne la recherche en question.
    Voici ma page recherche.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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    <table border=0 cellspacing=0 cellpadding=0><tr>
       <form method="get" action="recherche.php">
          <td><input name="search"></td>
          <td><input type="submit" value="Chercher"></td>
       </form>
    </tr></table>
     
     
    <?php
    //connexion a la base
    require 'connect.inc.php';
     
    //recup du resultat formulaire
    //if(isset($_POST['search']))      $search=$_POST['search'];
    //else      $search="";
     
    $search = $_GET [search];
     
     
     
    //variable pour la longueur de la recherche
    $len_search=strlen($search);
     
    // si la recherche est vide on abandonne la requete
    if(empty($search))
        {
        echo 'tapez une recherche';
    	exit();
        }
     
    // si la recherche est inferieur a x on abandonne la recherche	
    if($len_search<3)
        {
        echo 'recherche inferieur a 3';
    	exit();
        }
     
     
     
    // si les conditions sont remplies on execute la requete
    	else     
        {
    	$Recherche= strtolower($search);
     
    		$messagesParPage=5; //Nous allons afficher 5 messages par page.
    	$retour_total=mysql_query('SELECT COUNT(*) AS total FROM blagues WHERE MATCH (joke) AGAINST $Recherche');
    	$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme dun tableau.
    	$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    	//Nous allons maintenant compter le nombre de pages.
    	$nombreDePages=ceil($total/$messagesParPage);
     
    	if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    {
         $pageActuelle=intval($_GET['page']);
     
         if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
         {
              $pageActuelle=$nombreDePages;
         }
    	}
    	else // Sinon
    	{
         $pageActuelle=1; // La page actuelle est la n°1    
    	}
     
    	$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
     
     
     
    $Requete="SELECT * FROM blagues WHERE MATCH (joke) AGAINST ('$Recherche') LIMIT $premiereEntree, $messagesParPage";
     
    $sql=$Requete;
     
    $MotClef = explode(" ", $Recherche);
    $NbMotClef = count($MotClef);
     
     
     
     
    $req = mysql_query($Requete) or die('Erreur SQL !<br>'.$Requete.'<br>'.mysql_error());
    echo 'recherche de '.$search.'';
     
    echo 'il y a '.$nb.' resultat(s)';
     
    //while ($data = mysql_fetch_array($req)) {
    while ($data = mysql_fetch_assoc($req)) {
    echo nl2br('<h5>'.$data['joke'].'</h5>');
    }
     
    echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
    for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    {
         //On va faire notre condition
         if($i==$pageActuelle) //Si il s'agit de la page actuelle...
         {
             echo ' [ '.$i.' ] '; 
         }	
         else //Sinon...
         {
              echo ' <a href="recherche.php?search='.$search.'&page='.$i.'">'.$i.'</a> ';
         }
    }
    echo '</p>';
     
    }
    ?>
    Avez-vous une idée ?

    Merci beaucoup à vous tous.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    tu as oublié les parenthèses et les quotes dans ta clause against. Elle devrait plutot ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour_total=mysql_query('SELECT COUNT(*) AS total FROM blagues WHERE MATCH (joke) AGAINST ("$Recherche")');

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Oui en effet il y avait un problème de parenthèses et de quotes. Je n'ai plus l'erreur.

    Cela dit, je dois mal utiliser le count dans cette ligne de code car si j'associe le count à la table entière ca compte bien l'ensemble de la table mais si j'utilise le count avec le match against suivant la recherche tapée dans le formulaire, je n'ai aucune page qui s'affiche. C'est curieux parce que j'ai utilisé cette ligne directement dans mysql en root et j'ai bien le resultat qui ressort dans un tableau. donc ca fonctionne mais c'est au niveau du code php que ca coince. Il n'arrive pas à récupérer le resultat de la requete correctement. J'ai simplement la première page avec 5 resultats alors que pour le mot-clé "belge mettons j'en ai 17 qui ressorte dans mysql.

    Avez vous une idée ? Ou tout dumoins une direction à prendre ? parce que c'est pas logique que ca fonctionne correctement dans mysql en brut mais que dans mon code je n'arrive qu'à récupérer une colonne entière en count et non un match against sur un mot voulu.

    Je dirais que le problème se situe dans ces trois lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$retour_total=mysql_query('SELECT COUNT(*) AS total FROM blagues WHERE MATCH (joke) AGAINST $Recherche');
    	$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme dun tableau.
    	$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Points : 34
    Points
    34
    Par défaut
    Ca y est j'ai localisé le problème.

    C'était à cause d'un problème de quote encore et toujours. Comme quoi c'est vriament important de faire attention à ces choses la. Cela dit je ne pensais pas à ca.

    Voila la correction de la ligne en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour_total=mysql_query("SELECT COUNT(*) AS total FROM blagues WHERE MATCH (joke) AGAINST ('$Recherche')");
    C'était du au fait qu'il y a une variable à remplacer dans la ligne donc inverser les guillement et les quotes.

    Merci beaucoup en tout cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Problème avec la fonction Match
    Par Jinchoo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/09/2010, 16h00
  2. [MySQL] Recherche avec Match Against
    Par johann51 dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 29/02/2008, 01h01
  3. Probleme avec "match against"
    Par biggione dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/03/2007, 14h57
  4. Problème recherche match.. against
    Par pierre_pogo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/08/2006, 10h45
  5. Problème avec MATCH - FULLTEXT
    Par Kosti dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/01/2006, 01h20

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