Recherche mot clé
Résolu
goldy91
Messages postés
151
Date d'inscription
Statut
Membre
Dernière intervention
-
goldy91 Messages postés 151 Date d'inscription Statut Membre Dernière intervention -
goldy91 Messages postés 151 Date d'inscription Statut Membre Dernière intervention -
Bonjour voila mon probleme est que je suis entrain de faire un site d'emploi et je voudrais inserer un moteur de recherche.Mon moteur de recherche marche mais a moitié enfaite une personne qui recherche quelq'un par ces competences ne peut le trouver que s'il elle tape les compétences exacte c'est a dire dans l'odre,voila ma requete :
$sql="select identifiant,titreposte,competence,villep,datedebutvalidite,dureevalidite,datecreation
from publication
where rep='oui'
and titreposte like \"%$ip%\"
and competence like \"%$cp%\"";
par exemple dans ma BDD j'ai dans competence (java html php css) si la personne tape java sa marche.Si elle tape java html sa marche.Mais si elle tape java css la sa ne marche plus alors comment je peut faire ?
$sql="select identifiant,titreposte,competence,villep,datedebutvalidite,dureevalidite,datecreation
from publication
where rep='oui'
and titreposte like \"%$ip%\"
and competence like \"%$cp%\"";
par exemple dans ma BDD j'ai dans competence (java html php css) si la personne tape java sa marche.Si elle tape java html sa marche.Mais si elle tape java css la sa ne marche plus alors comment je peut faire ?
A voir également:
- Recherche mot clé
- Clé usb non détectée - Guide
- Clé windows 8 - Guide
- Formater clé usb - Guide
- Trousseau mot de passe iphone - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
31 réponses
Il y a 2 façons :
- la mauvaise (enfin la moins bonne) c'est de casser ta chaine de recherche, d'éliminer les mots inutiles, et de rechercher chaque mot : par exemple pour "java et css" tu fais un tableau "java", "et", "css", tu élimines le "et" non significatif (il te faut une table des mots exclus) et tu recherche "java" puis "css", tu donnes 1 point à chaque mot trouvé et tu tries tes résultats par score. C'est long à faire, il faut gérer les mots exclus, les invariables....
- la meilleure c'est de faire une indexation "fulltext" de ta BDD sur les champs qui t'intéressent et de faire une requête de type SELECT id, MATCH() as score FROM ... AGAINST ... ORDER BY score DESC et là c'est le bonheur !
un p'tit lien dans la doc de MySql pour te donner plus d'infos : http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html
- la mauvaise (enfin la moins bonne) c'est de casser ta chaine de recherche, d'éliminer les mots inutiles, et de rechercher chaque mot : par exemple pour "java et css" tu fais un tableau "java", "et", "css", tu élimines le "et" non significatif (il te faut une table des mots exclus) et tu recherche "java" puis "css", tu donnes 1 point à chaque mot trouvé et tu tries tes résultats par score. C'est long à faire, il faut gérer les mots exclus, les invariables....
- la meilleure c'est de faire une indexation "fulltext" de ta BDD sur les champs qui t'intéressent et de faire une requête de type SELECT id, MATCH() as score FROM ... AGAINST ... ORDER BY score DESC et là c'est le bonheur !
un p'tit lien dans la doc de MySql pour te donner plus d'infos : http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html
comment tu fait dans mon cas j'ai essayé mais j'ai pas reussi voila ce que j'ai fait :
$sql="select identifiant,titreposte,competence,villep,datedebutvalidite,dureevalidite,datecreation
from publication
where match (competence) against ('.$cp.');
et dans ma bdd j'ai mis competence en fulltext ...
$sql="select identifiant,titreposte,competence,villep,datedebutvalidite,dureevalidite,datecreation
from publication
where match (competence) against ('.$cp.');
et dans ma bdd j'ai mis competence en fulltext ...
SELECT identifiant, titreposte, MATCH (competence) AGAINST ('.$cp.'), competence , villep, datedebutvalidite, dureevalidite, datecreation
FROM publication
et si tu veux un tri par correspondance décroissante, ça sera :
SELECT identifiant, titreposte, MATCH (competence) AGAINST ('.$cp.') as score, competence , villep, datedebutvalidite, dureevalidite, datecreation
FROM publication
ORDER BY score DESC
FROM publication
et si tu veux un tri par correspondance décroissante, ça sera :
SELECT identifiant, titreposte, MATCH (competence) AGAINST ('.$cp.') as score, competence , villep, datedebutvalidite, dureevalidite, datecreation
FROM publication
ORDER BY score DESC
oui sa marche j'avais oublié de fermer les guillemets voila la soluce :
$sql="SELECT identifiant,titreposte,competence,villep,datedebutvalidite,dureevalidite,datecreation
FROM publication
WHERE MATCH (competence) AGAINST ('$cp')";
$sql="SELECT identifiant,titreposte,competence,villep,datedebutvalidite,dureevalidite,datecreation
FROM publication
WHERE MATCH (competence) AGAINST ('$cp')";
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
et une dernier chose j'ai un probleme avec ma variable sessions enfaite j''utilise la variable session pour faire circuler mes informations mais au bout de la 2eme page sa ne marche plus, sa se présente comme sa :
1er page :
session_start();
$id=$_GET['id'];
$_SESSION['id']=$id;
pour versifier si l'id a bien circuler je fait :
echo 'salut '.$_SESSION['id'].'';
et la sa marche bien mais sur la page suivante quand je le fait sa marche pas
2eme page :
session_start();
$id=$_SESSION['id'];
echo ' salut '.$id.' ';
pourtant aucune erreur apparait il y a juste écrit salut
donc d'où peut venir l'erreur ???
1er page :
session_start();
$id=$_GET['id'];
$_SESSION['id']=$id;
pour versifier si l'id a bien circuler je fait :
echo 'salut '.$_SESSION['id'].'';
et la sa marche bien mais sur la page suivante quand je le fait sa marche pas
2eme page :
session_start();
$id=$_SESSION['id'];
echo ' salut '.$id.' ';
pourtant aucune erreur apparait il y a juste écrit salut
donc d'où peut venir l'erreur ???
Je ne suis pas super fort en variables de session, j'aime bien la méthode GET ou les cookies mais je ne vois pas d'erreur flagrante ici
quand tu fais un "echo" il n'y a pas besoin de placer un '' après ta variable.
Pour le debug essaie ça en page 1 :
session_start();
$id=$_GET['id'];
$_SESSION['id']=$id;
echo 'salut '.$_SESSION['id'].' : '.session_id();
et en page 2 :
session_start();
echo 'salut '.$_SESSION['id'].' : '.session_id();
quand tu fais un "echo" il n'y a pas besoin de placer un '' après ta variable.
Pour le debug essaie ça en page 1 :
session_start();
$id=$_GET['id'];
$_SESSION['id']=$id;
echo 'salut '.$_SESSION['id'].' : '.session_id();
et en page 2 :
session_start();
echo 'salut '.$_SESSION['id'].' : '.session_id();
euh sa me fait un truc bizarre ,sur la 1er page sa me fait :
salut 43:307398701c1a9f177c029eeb9f464203
43 étant l'id que j'ai cliqué
et sur la page 2 :
salut :be6d17f8d97cd1abec2c7b36045f1cf2
c'est quoi le probleme ??
salut 43:307398701c1a9f177c029eeb9f464203
43 étant l'id que j'ai cliqué
et sur la page 2 :
salut :be6d17f8d97cd1abec2c7b36045f1cf2
c'est quoi le probleme ??
session_id() te retourne l'identifiant de la session en cours, normalement les 2 valeurs sont les mêmes, là tu changes de session entre page1 et page2, sur page2 essaie :
echo 'avant-salut '.$_SESSION['id'].' : '.session_id();
session_start();
echo 'apres-salut '.$_SESSION['id'].' : '.session_id();
pour voir si ce n'est pas ton session_start() qui pose problème... selon les configurations du serveur, il y a un paramètre session.autostart ou quelque chose comme ça qui fait qu'il ne faut pas démarrer de sessions manuellement
echo 'avant-salut '.$_SESSION['id'].' : '.session_id();
session_start();
echo 'apres-salut '.$_SESSION['id'].' : '.session_id();
pour voir si ce n'est pas ton session_start() qui pose problème... selon les configurations du serveur, il y a un paramètre session.autostart ou quelque chose comme ça qui fait qu'il ne faut pas démarrer de sessions manuellement
donc ta session n'est pas démarrée automatiquement....
et si tu demandes :
en page 1 :
session_start();
$id=$_GET['id'];
$_SESSION['id']=$id;
echo 'salut '.$_SESSION['id'].' : '.SID;
et en page 2 :
if(isset($_COOKIE["PHPSESSID"]))
{
session_start();
echo 'salut '.$_SESSION['id'].' : '.SID;
}
else
{
echo 'pas de session active';
}
Si ça ne donne toujours rien de concluant, lit https://www.php.net/manual/fr/session.idpassing.php ... peut-être que tu n'utilises pas de cookie pour passer ton identifiant de session
Cela dit si tu utilises des cookies pour passer ton identifiant de session pourquoi tu n'utiliserais pas de cookies pour passer ta valeur ? setcookie('variable', 'valeur', time()+3600) pour créer un cookie valable une heure
et si tu demandes :
en page 1 :
session_start();
$id=$_GET['id'];
$_SESSION['id']=$id;
echo 'salut '.$_SESSION['id'].' : '.SID;
et en page 2 :
if(isset($_COOKIE["PHPSESSID"]))
{
session_start();
echo 'salut '.$_SESSION['id'].' : '.SID;
}
else
{
echo 'pas de session active';
}
Si ça ne donne toujours rien de concluant, lit https://www.php.net/manual/fr/session.idpassing.php ... peut-être que tu n'utilises pas de cookie pour passer ton identifiant de session
Cela dit si tu utilises des cookies pour passer ton identifiant de session pourquoi tu n'utiliserais pas de cookies pour passer ta valeur ? setcookie('variable', 'valeur', time()+3600) pour créer un cookie valable une heure
non toujours pas voila ce que sa donne en page 1:
salut 43:PHPSESSID=71e9b540b04c2a68adfc1ee348877b52
et en page 2 :
pas de session active
salut 43:PHPSESSID=71e9b540b04c2a68adfc1ee348877b52
et en page 2 :
pas de session active
c'est donc que ton cookie d'identifiant de session n'arrive pas à page2
- soit tu n'utilises pas les cookies pour identifier les sessions,
- soit ton navigateur n'accepte pas les cookies
tu peux passer ton id de session en paramètre $_GET à page 2 en appelant dans page1
'page2.php?'.SID
pour éviter ça, je cite "PHP est capable de faire cela de manière transparente, lorsqu'il est compilé avec l'option --enable-trans-sid. Si vous activez cette option et que l'option d'exécution session.use_trans_sid est activée, les URLs relatives seront modifiées pour contenir l'identifiant de session automatiquement. " il suffit donc d'activer cette option pour que les appels à 'pageXXX.php' soient automatiquement transformés en 'pageXXX.php?session_name=sd23154wc654ze897c'
- soit tu n'utilises pas les cookies pour identifier les sessions,
- soit ton navigateur n'accepte pas les cookies
tu peux passer ton id de session en paramètre $_GET à page 2 en appelant dans page1
'page2.php?'.SID
pour éviter ça, je cite "PHP est capable de faire cela de manière transparente, lorsqu'il est compilé avec l'option --enable-trans-sid. Si vous activez cette option et que l'option d'exécution session.use_trans_sid est activée, les URLs relatives seront modifiées pour contenir l'identifiant de session automatiquement. " il suffit donc d'activer cette option pour que les appels à 'pageXXX.php' soient automatiquement transformés en 'pageXXX.php?session_name=sd23154wc654ze897c'
dans page2, tu reviens aux sources :
session_start();
$id=$_SESSION['id'];
echo ' salut '.$id.' ';
et dans page 1 :
session_start();
$id=$_GET['id'];
$_SESSION['id']=$id;
echo '<a href="page2.php?'.SID.'">page 2</a>';
normalement l'identifiant de session se transmet dans l'url du lien hypertexte. Si ça marche comme ça c'est un bon début. Tu devras alors utiliser ton SID dans tous tes liens. Pour éviter d'avoir à le transmettre à la main, tu peux paramétrer ton serveur avec la directive session.use_trans_sid pour que le SID soit transmis automatiquement
session_start();
$id=$_SESSION['id'];
echo ' salut '.$id.' ';
et dans page 1 :
session_start();
$id=$_GET['id'];
$_SESSION['id']=$id;
echo '<a href="page2.php?'.SID.'">page 2</a>';
normalement l'identifiant de session se transmet dans l'url du lien hypertexte. Si ça marche comme ça c'est un bon début. Tu devras alors utiliser ton SID dans tous tes liens. Pour éviter d'avoir à le transmettre à la main, tu peux paramétrer ton serveur avec la directive session.use_trans_sid pour que le SID soit transmis automatiquement
mais c'est pas bon car ici l'utilisateur doit cliqué sur page 2 et moi je veut qu'il clic sur envoyer ???