Recherche full text PHP/MySQL : problème avec implode

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recherche full text PHP/MySQL : problème avec implode

par Cyrano » 27 mai 2005, 16:59

[Résolu] :?:

par dmx-moteur » 27 mai 2005, 16:39

Ca marche parfaitement !!

Un grand merci à toi.

par Cyrano » 27 mai 2005, 14:40

Autant pour moi, je m'a gourru
<?php
$liste_cles = explode(" ", $recherche);
$liste = array();
foreach($liste_cle as $cle)
{
    $cle = "+". $cle ."*";
    array_push($liste, $cle);
}
$liste_recherche = implode(" ", $liste);
?>

par dmx-moteur » 27 mai 2005, 13:53

A y regarder de plus près, il y a en fait un problème car le traitement des mots clés n'est pas pris en compte dans la requête ; il recherche les mots comme si on ne leur avait pas ajouté les opérateurs + et *...

en bas de page j'affiche la requete SQL et j'obtiens :

SELECT ID_OFFRE, DATE, INTITULEFROM offres WHERE MATCH(INTITULE, DESCRIPTIF) AGAINST ('recherche produit' IN BOOLEAN MODE)

au lieu de :

SELECT ID_OFFRE, DATE, INTITULEFROM offres WHERE MATCH(INTITULE, DESCRIPTIF) AGAINST ('+recherche* +produit*' IN BOOLEAN MODE)

La concaténation marche t-elle vraiment dans la boucle foreach ?

par dmx-moteur » 27 mai 2005, 13:36

Merci de cette réponse. Super !! Cependant je signale l'erreur sur la variable $liste_cle qui comporte un s en trop à la ligne
$liste_cles = explode(" ", $recherche);  
lire donc
$liste_cle = explode(" ", $recherche);  

par Cyrano » 27 mai 2005, 12:36

Ok, il y a des erreurs, on va y aller une ligne à la fois:
$recherche = explode(" ",$recherche);
En clair, $recherche devient un tableau, jusque là, ok;
$recherche = "+" . $recherche . "*";
Là ça pose un problème: $recherche est un tableau que tu veux concaténer avec les caractères + et * : ça buggue déjà là et la ligne suivante est forcément invalide:

Proposition de correction:
$liste_cles = explode(" ", $recherche);
foreach($liste_cle as $cle)
{
    $cle = "+". $cle ."*";
}
$liste_recherche = implode(" ", $liste_cle);
En utilisant des noms de variables différents, on peut arriver à les manipuler sans se mélanger les crayons sur les types de variables. À partir de ça, tu créeras ta requête à partir de $liste_recherche qui est une chaine de caractère et non de $recherche qui est un tableau.

Recherche full text PHP/MySQL : problème avec implode

par dmx-moteur » 27 mai 2005, 12:23

Je suis en train de réaliser un moteur de recherche full text en PHP. J'utilise l'indexation Full text de MySQL. Afin de bénéficier des options de recherche par troncature, j'utilise le BOOLEAN MODE. Je veux cependant que ce soit transparent pour l'utilisateur (qu'il n'ait pas à saisir l'asterisque ainsi que l'opérateur intermot ET). Il y a par ailleurs la possibilité de faire une recherche par type, fonctionnalité, région dans l'interface de recherche. Voici mon code :
// Pour rechercher sur l'option "tous"
$VARfonction = $_POST['VARfonction'];
$VARregion = $_POST['VARregion'];
$VARtype_offre = $_POST['VARtype_offre'];
if ($VARfonction == "fczz") $VARfonction="fc%";
if ($VARregion == "rezz") $VARregion="re%";
if ($VARtype_offre == "tyzz")  $VARtype_offre="ty%";
// recherche avec troncature et opérateur inter-mot implicite "ET" pour le BOOLEAN MODE de la recherche full text
$recherche = $_POST['recherche']; // valeurs saisie par l'utilisateur dans le champ mots clés
$recherche = explode(" ",$recherche); // on mets les mots saisis dans un tableau
$recherche = "+" . $recherche . "*"; // ajout de l'opérateur intermot ET et de la troncature à droite pour chaque mot
$recherche = implode(" ", $recherche); // passage du tableau en chaine de caractères et ajout de l'espace entre chaque mot clé
Le problème c'est la fonction implode qui produit l'erreur suivante :
Warning: implode(): Bad arguments.

Quelqu'un pourrait-il me dire ce qui ne va pas. Je regarde la doc sur implode mais je ne vois pas ce qui cloche...

Merci par avance