probleme sur la realisation d'un moteur de recherche
Hors ligneSnap200 Le 14/07/2005 à 02:33 Profil de Snap200 Configuration de Snap200

Bonjour

Quelqu'un peut'il m'aider SVP car là je patoge ...... je doit realisé un moteur de recherche et j'ai sa comme ereur;

Warning: mysql_result(): supplied argument is not a
valid MySQL result resource in
/web/testweb/recherche.php3 on line 132

Warning: mysql_num_rows(): supplied argument is not a
valid MySQL result resource in
/web/testweb/recherche.php3 on line 135

J'ai tester m'a requet sur phpadmin:
SELECT count( * ) FROM cv WHERE MATCH ( titre, ref, nom, ville, fonction, region1, nom_entr1, nom_entr2, prec_ent ) AGAINST ( 'duboi' ) AND ( fonction LIKE 'juridique' ) AND ( niveau LIKE 'BAC+2' ) MySQL a répondu: #1191 - Can't find FULLTEXT index matching the column list


Sachant que j'ai mes index en FULLTEXT dans ma table
******* ***** `date_dispo` date NOT NULL default '0000-00-00',   PRIMARY KEY  (`id`),   KEY `type_mobil` (`mobil_reg`),   FULLTEXT KEY `type_mobil_2` (`mobil_reg`),   FULLTEXT KEY `ref` (`ref`),   FULLTEXT KEY `titre` (`titre`),   FULLTEXT KEY `nom` (`nom`),   FULLTEXT KEY `ville` (`ville`),   FULLTEXT KEY `fonction` (`fonction`),   FULLTEXT KEY `region1` (`region1`),   FULLTEXT KEY `nom_entr1` (`nom_entr1`),   FULLTEXT KEY `nom_entr2` (`nom_entr2`),   FULLTEXT KEY `prec_ent` (`prec_ent`) ) TYPE=MyISAM AUTO_INCREMENT=49 ;




$db_link = mysql_connect("$sql_serveur","$sql_user","$sql_passwd"); $fonction=$_GET['fonction']; // pri a partir d'un menu deroulant $niveau=$_GET['niveau']; // pri a partir d'un menu deroulant $mot=$_GET['mot']; // pri à partir champ de type text $mot=strtolower($mot); $mots=split(" ",$mot); $nombre_mots=count($mots); $z=1; $texte="Pages contenant <b>&quot;$mots[0]&quot;</b>"; $phrase="'%$mots[0]%'"; while($z<$nombre_mots)    {    $phrase.=" ".$et_ou." mots like '%$mots[$z]%'";    $texte.=" ";    if($et_ou=="and"){$texte.="et";}else{$texte.="ou";}    $texte.=" <b>&quot;$mots[$z]&quot;</b>";    $z++;    } if($debut==""){$debut=0;} $debut=$page*$limit; // NOMBRE TOTAL D'ENREGISTREMENTS REPONDANT A LA REQUETE $requete=mysql_db_query("$sql_bdd","select count(*) from cv WHERE MATCH ( titre, ref, nom, ville, fonction, region1, nom_entr1, nom_entr2, prec_ent) AGAINST ('$phrase' IN BOOLEAN MODE) AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau')",$db_link); $nb_total=mysql_result($requete,0,"count(*)");  // ---- ICI  LIGNE 132 $requete=mysql_db_query("$sql_bdd","select * from cv WHERE MATCH (titre , ref, nom ,prenom, ville, fonction, region1, nom_entr1, nom_entr2, prec_ent) AGAINST ('$phrase' IN BOOLEAN MODE) AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau') limit $debut,$limit",$db_link); $num=mysql_num_rows($requete); // ------- ICI LIGNE 135 // DEFINITION DU MESSAGE A AFFICHER if ($num==0) {echo "Désolé, aucune page de ce site ne contient <b>$mot</b>...";} else if ($mot=="")    {echo "Veuillez saisir mot-clés avant de cliquer sur 'lancer la recherche' !";} else if (strlen($mot)<2) {echo "Veuillez saisir au moins 2 caractères.";}      // AFFICHAGE DES RESULTATS else { echo "<span class=\"style2\"><b>$nb_total</b> r&eacute;ponse</span>"; if ($nb_total>1) {echo "s";} //echo "<br>$texte"; //$i=0; while ($tablo = mysql_fetch_object($requete)) {              print "<TR>"; print "<TD><BR></TD>"; print "</TR>";             print "<TR  bgcolor=\"#E0ECF8\">"; print "<TD nowrap class=\"style2\" bgcolor=\"#E0ECF8\" ><b>Candidature à l'offre:&nbsp</b>$tablo->ref</TD>"; print "<TD>"; print "<TD nowrap class=\"style2\"  bgcolor=\"#E0ECF8\"><b>Region souhaité</b></TD>"; ********************* **************** ***************** ****************         } ?> </table>              </td>           </tr>         </table></td>       </tr>     </table></td>   </tr> </table> </body> </html> <? print"<center>"; // AFFICHAGE DU LIEN PRECEDENT SI BESOIN EST // (LA PREMIERE PAGES EST 0) if ($page>0)    {    $precedent=$page-1;    print  "<a href=\"$script_name?page=$precedent&mot=$mot&fonction=$fonction&niveau=$niveau\">PRECEDENT</a>&nbsp;\n";    } // AFFICHAGE DES NUMEROS DE PAGE $i=0;$j=1; if($nb_total>$limit)    {    while($i<($nb_total/$limit))       {       if($i!=$page){echo "(<a href=\"$script_name?page=$i&mot=$mot&fonction=$fonction&niveau=$niveau\">$j</a>)&nbsp;";}       else {echo "<b>($j)</b>&nbsp;";}       $i++;$j++;       }    } // AFFICHAGE DU LIEN SUIVANT SI BESOIN EST if($debut+$limit<$nb_total)    {    $suivant=$page+1;    echo "<a href=\"$script_name?page=$suivant&mot=$mot&fonction=$fonction&niveau=$niveau\">SUIVANT</a>";    } } print"</center>"; // DECONNEXION DE LA BASE DE DONNEE mysql_close($db_link); ?>


MERCI pour votre aide , car c'est vraiment urgent pour moi.
Hors ligneAnthony Le 14/07/2005 à 12:02 Profil de Anthony Configuration de Anthony

Admin
Salut,

tu dois créer un index sur N colonnes et non pas plusieurs INDEX. Ici tu as : titre, ref, nom, ville, fonction, region1, nom_entr1, nom_entr2, prec_ent soit 9 colonnes. Tu vas dans PHPMyadmin, tu supprimes tous tes index FULLTEXT, tu crées un Index FULLTEXT sur 9 colonnes, et tu indiques dans l'ordre tous tes champs intervenant dans le MATCH. Ta table ressemblera à ça :

CREATE TABLE `test` (   `champ1` varchar(255) NOT NULL default '',   `champ2` varchar(255) NOT NULL default '',   `champ3` varchar(255) NOT NULL default '',   `champ4` varchar(255) NOT NULL default '',   `champ5` varchar(255) NOT NULL default '',   `champ6` varchar(255) NOT NULL default '',   `champ7` varchar(255) NOT NULL default '',   `champ8` varchar(255) NOT NULL default '',   `champ9` varchar(255) NOT NULL default '',   FULLTEXT KEY `fulltext` (`champ1`,`champ2`,`champ3`,`champ4`,`champ5`,`champ6`,`champ7`,`champ8`,`champ9`) ) ENGINE=MyISAM;

Ta requête fonctionnera ensuite ;-)
--

Hors ligneSnap200 Le 16/07/2005 à 15:55 Profil de Snap200 Configuration de Snap200

Bonjour

Merci de m'avoir repondu.
Voila , j'ai suivi ce que tu m' dis mais malheuresement , j'ai encors la meme erreur .

Voila ce que j'ai rajouter dans ma table comme tu me là dis
FULLTEXT KEY `test` (`ref`,`titre`,`nom`,`code`,`ville`, `fonction`,`region1`,`nom_entr1`,`prec_ent`,`nom_entr2`)
) TYPE=MyISAM AUTO_INCREMENT=49

J'ai resté de nouveau ma requéte et j'ai de nouveau :
#1191 - Can't find FULLTEXT index matching the column
list


Merci pour ton aide
Hors ligneAnthony Le 16/07/2005 à 18:40 Profil de Anthony Configuration de Anthony

Admin
Fais ton index sur N colonnes, mais avec les champs dans l'ordre, c'est à dire que si dans ta requête tu fais un MATCH(champ2,champ1) bah ton index sur n colonnes doit avoir la tête suivante :

FULLTEXT KEY `test` (`champ2`,`champ1`)
) TYPE=MyISAM AUTO_INCREMENT=49

et pas champ1,champ2 ;-) tu vois ce que je veux dire ?
--

Hors ligneSnap200 Le 18/07/2005 à 09:52 Profil de Snap200 Configuration de Snap200

Bonjour

Enfaite , je vois ce que tu veus dire .
Ma table est comme ceci
CREATE TABLE `cv` (   `id` int(11) NOT NULL auto_increment,   `ref` varchar(10) NOT NULL default '',   `titre` varchar(50) NOT NULL default '',   `critere` varchar(10) NOT NULL default '',   `date` date NOT NULL default '0000-00-00',   `nom` varchar(255) NOT NULL default '',   `prenom` varchar(255) NOT NULL default '',   `code` varchar(255) NOT NULL default '',   `ville` varchar(255) NOT NULL default '',   `sex` varchar(255) NOT NULL default '',   `date_naiss` date NOT NULL default '0000-00-00',   `fonction` varchar(255) NOT NULL default '',   `ann_exp` varchar(255) NOT NULL default '',   `niveau` varchar(255) NOT NULL default '',   `region1` varchar(255) NOT NULL default '',   `mobil` varchar(255) NOT NULL default '',   `mobil_reg` varchar(15) NOT NULL default '',   `mobil_nat` varchar(15) NOT NULL default '',   `sal` varchar(255) NOT NULL default '',   `dern_exp` varchar(255) NOT NULL default '',   `nom_entr1` varchar(255) NOT NULL default '',   `prec_ent` varchar(255) NOT NULL default '',   `nom_entr2` varchar(255) NOT NULL default '',   `nomDestination` varchar(255) NOT NULL default '',   `date_dispo` date NOT NULL default '0000-00-00',   `motivation` longblob,   PRIMARY KEY  (`id`),   KEY `type_mobil` (`mobil_reg`),   FULLTEXT KEY `titre` (`ref`,`titre`,`nom`,`code`,`ville`,`fonction`,`region1`,`nom_entr1`,`prec_ent`,`nom_entr2`) ) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=50 ;


Mes requetes ;


$requete=mysql_db_query("$sql_bdd","select count(*) from cv WHERE MATCH ( ref ,titre,  nom, ville, fonction, region1, nom_entr1,prec_ent, nom_entr2 ) AGAINST ('$phrase') AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau')",$db_link); $nb_total=mysql_result($requete,0,"count(*)"); $requete=mysql_db_query("$sql_bdd","select * from cv WHERE MATCH ( ref ,titre , nom ,ville, fonction, region1, nom_entr1, prec_ent, nom_entr2) AGAINST ('$phrase') AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau') limit $debut,$limit",$db_link); $num=mysql_num_rows($requete);

Comme tu peus le voir je pense avoir respecté ce que tu m'a dis . Mais j'ai toujours la meme erreur ,
Hors ligneAnthony Le 18/07/2005 à 10:23 Profil de Anthony Configuration de Anthony

Admin
Ta première requête n'est toujours pas dans l'ordre ;-)

Les deux requêtes ne fonctionnent toujours pas ?
--

Hors ligneSnap200 Le 18/07/2005 à 16:26 Profil de Snap200 Configuration de Snap200

Mes requetes ne marche toujours pas , poutant lordre est respecté .

$requete=mysql_db_query("$sql_bdd","select count(*) from cv WHERE MATCH ( ref ,titre,  nom, code, ville, fonction, region1, nom_entr1,prec_ent, nom_entr2 ) AGAINST ('$phrase') AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau')",$db_link);
$nb_total=mysql_result($requete,0,"count(*)");

$requete=mysql_db_query("$sql_bdd","select * from cv WHERE MATCH ( ref ,titre , nom ,code, ville, fonction, region1, nom_entr1, prec_ent, nom_entr2) AGAINST ('$phrase') AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau') limit $debut,$limit",$db_link);
$num=mysql_num_rows($requete);


J'ai toujours la meme erreur.

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /web/testweb/recherche.php3 on line 131

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /web/testweb/recherche.php3 on line 135

J'y comprend plus rien ....
Hors ligneAnthony Le 18/07/2005 à 16:52 Profil de Anthony Configuration de Anthony

Admin
Quand tu exécutes ta requête dans PHPMyadmin, tu as quoi comme message d'erreur ?
--

Hors ligneSnap200 Le 18/07/2005 à 16:54 Profil de Snap200 Configuration de Snap200

Enfaite dans phpadmin maintenant la requete est bien executé.

J'ai donc ceci une fois la requete executé dan phpadmin .

Votre requête SQL a été exécutée avec succès (traitement: 0.0004 sec.)

requête SQL:
SELECT *
FROM cv
WHERE MATCH (
ref, titre, nom, code, ville, fonction, region1, nom_entr1, prec_ent, nom_entr2
)
AGAINST (
'CAMT'
)
AND (
fonction LIKE 'JURIDIQUE'
)
AND (
niveau LIKE 'BAC+1'
)
LIMIT 0 , 30  

Mais aucune resultat est affiché pourtant ce que j'ai rentré existe dans ma base de donnée (la ref CAM/T/Q , juridique , bac+1) .
Hors ligneAnthony Le 18/07/2005 à 17:17 Profil de Anthony Configuration de Anthony

Admin
Ok bah ton problème vient de ta requête mais dans PHP. Ta requête ne doit pas être bien écrite surtout si tu mets des variables dedans, dans le code PHP. Ensuite si elle ne trouve rien il faut revoir tes index, ce que tu recherches, etc...
--

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels