MOTEUR DE RECHERCHE DANS BDD

webdesignasp Messages postés 29 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 19 avril 2005 - 21 oct. 2004 à 14:38
jeuxfree Messages postés 2 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 16 juin 2009 - 16 juin 2009 à 15:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25410-moteur-de-recherche-dans-bdd

jeuxfree Messages postés 2 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 16 juin 2009
16 juin 2009 à 15:38
salut je suis novice et j'ai simplement copier-coller et quand je cherche un mot j'ai "Not Found
The requested URL /search.php was not found on this server" je pense que je dois configurer quelque chose mais quoi ? la page de mon site ou le logiiel doit chercher ?? creer url/search.php.

je propose des jeux et j'aimerai que l'internaute trouve la page du jeu, demandé a la recherche


a l'aid svp chui un nul
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
15 mars 2009 à 12:30
Salut, cela me semble pas mal mais serait possible d'avoir un exemple concret fichier php mis en place avec un petit exemple de slq à placer ? ce serait plus simple :)
Merci
cs_lepetitcod Messages postés 4 Date d'inscription lundi 28 mai 2007 Statut Membre Dernière intervention 3 juin 2008
29 mai 2008 à 17:33
bravo pour ce travail il m'a enormement inspiré !!!
néanmoins j'aurais besoin de vos avis vis a vis d'un soucis d'affichage pour un de mes codes : il se trouve que mes resultats de recherche sont affichés 4 fois et à la suite les uns des autre comment pourrais je faire pour resoudre ce soucis

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>

<title>Résultats de la recherche</title>
<style TYPE= "text/css">
<!--
A:hover {text-decoration:none; background: #FFFFCC}
A:hover {color:#FF0000;}
-->
</style>
<style TYPE="text/css">
BODY {
scrollbar-face-color: #bfcfff;
scrollbar-shadow-color: #000000;
scrollbar-highlight-color: #FFFFFF;
scrollbar-3dlight-color: #000000;
scrollbar-darkshadow-color: #000000;
scrollbar-track-color: #e6cff;
scrollbar-arrow-color: #6078bf;
}
</style>
</head>

<center>
Résultats de la recherche</center>

<?php
$zone_fr=$_POST['zone_fr'];
$niveau=$_POST['niveau'];
$vent_opt=$_POST['vent_opt'];
$envoyer=$_POST['envoyer'];

if(isset($_POST['envoyer'])) $envoyer=$_POST['envoyer'];
else $envoyer="";
if ($zone_fr=="" && $niveau=="" && $vent_opt=="")
{echo "<center> Veuillez remplir au moins un champ!! </center>";}
elseif($envoyer == 'Recherche ')
{

echo' ' ;
echo'
';
echo'
';
if(isset($_POST['zone_fr'])) $zone_fr =$_POST['zone_fr'];
else $zone_fr= "";
if(isset($_POST['niveau'])) $niveau=$_POST['niveau'];
else $niveau="";
if(isset($_POST['vent_opt'])) $cms=$_POST['vent_opt'];
else $vent_opt="";

include("connectionkite.php");
$connect = connectToBasec();

;
$sql "SELECT DISTINCT zone.zone_fr,zone.spot,zone.ID_spot,session.sess_type,session.niveau,session.vent_opt FROM zone,info,session WHERE zone.ID_spot info.ID_spot and zone.zone_fr like '%$zone_fr%' and session.niveau like '%$niveau%' and session.vent_opt like '%$vent_opt%'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$result="0";

//Test du résultat
while($data = mysql_fetch_assoc($req)){$result="1";}
//Affichage des données.
if ($result=="0"){
echo"<center> Aucun enregistement retourné ... </center>

";
}
else{
//affichage des données
echo'';
echo'----
';
echo'<center>zone</center>,
<center>spot</center>,
<center>niveau</center>, <center>type de session</center>, <center>Numeros</center>, <center>Détails</center>, ';

$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data=mysql_fetch_assoc($req))
{
$zone_fr=$data['zone_fr'];
$niveau=$data['niveau'];
$vent_opt=$data['vent_opt'];
$ID_spot=$data['ID_spot'];

echo'----
';
echo'<center>'.$data['zone_fr'].', </center>
<center>'.$data['spot'].', </center>
<center>'.$data['niveau'].', </center><center>'.$data['sess_type'].', </center><center>'.$data['ID_spot'].', </center>';
echo'';
echo" <center></center>";

echo', ';
}}
echo'
';
echo'
';
echo'
';
}

?>

</html>
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
15 mai 2008 à 18:15
Salut!
Cette variable, statique, sert à n'effectuer une action de traitement sur les variables post envoyées que lors du premier appel de la fonction! :)

Raf
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
15 mai 2008 à 15:30
Salut,

Tous d'abord merci pour la qualité de ton code!
Par contre je n'ai pas compris quoi sert la variable $fonction_requete?

Sinon chez moi dans ce bout de code la :

if(!$i)
{
$req_search .= '( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
$i = 1;
}
else
$req_search .= 'OR ( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';

il faut enlever le OR de la dernière ligne sinon ça ne fonctionne pas.

Maintenant tous fonctionne bien mis à part le probleme de l'expression entière évoqué plus haut qui sort des résultats un peu bizare parfois...
Encore merci pour cette source vraiment sympa!
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
14 févr. 2008 à 09:12
Merci, ca fait tjs plaisir! :-)

Raf
Mement Messages postés 6 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 18 mars 2008
13 févr. 2008 à 19:47
Salutations,

Un petit mot pour saluer la qualité et l'efficacité de ce script =)

Félicitations !
cs_Lytaspen Messages postés 2 Date d'inscription lundi 9 avril 2007 Statut Membre Dernière intervention 4 décembre 2007
4 déc. 2007 à 12:50
Bonjour,
Merci pour votre réponse, je vais m'y mettre tout de suite.
Cordialement
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
3 déc. 2007 à 21:11
Salut!
Juste après le foreach, tu peux ajouter des clauses à ta convenance dans la requête pour tenir compte de champs comme tu le veux... :-)

Raf
cs_Lytaspen Messages postés 2 Date d'inscription lundi 9 avril 2007 Statut Membre Dernière intervention 4 décembre 2007
2 déc. 2007 à 22:00
Bonsoir,

Bravo pour ce code, il m'a vraiment été utile.

Je travail sur votre code depuis plusieurs jours, pas sans mal vue mon niveau.

Je suis arrivé à un résultat satisfaisant (toujours par rapport à mon niveau), mais j'aimerais savoir s'il étais possible afin d'affiner la recherche, de modifier le formulaire (ça ce n'est pas dur), pour avoir plusieurs points de recherche ?

Je m'explique mieux :

Dans ma table j'ai 5 colonnes (ID, Nom, class, sousclass, qualite), et dans mon formulaire j'aimerais "ID : "zone de texte" Nom : "zone de texte" Classification : "zone de sélection" Sous classification : "zone de sélection" qualité : "zone de sélection".
Et que s'il y a un mot dans "ID" cela recherche que dans "ID", pour "non" pareil, pour classification, il faudrait des mots qui correspondent aux chiffres de ma colonne (sacs 1 dans la colonne, 2 pantalon, etc.), qui cherche dans "class", pareille pour sous class et qualité.

et qu'à la recherche cela regroupe toutes les données fournies pour générer une recherche plus précise.

Jespère que mon explication est asse net.

Merci pour votre travail et merci d'avance.

Cordialement
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
22 nov. 2007 à 08:03
Ah!
Alors ca déclenchait une erreur et pas une absence de résultats... :-D

Content que ca soit résolu!

@++

R@f
cs_cedric_g Messages postés 2 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 21 novembre 2007
21 nov. 2007 à 10:17
Je me doutais qu'il fallait mettre quelque chose dans le genre, mais je ne savais pas où! Et dans mon cas, il faut mettre addslashes au lieu de stripslashes pour ajouter des "/" devant les apostrophes contenues dans les champs de la BDD.
Merci!
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
20 nov. 2007 à 20:11
Salut!
Essaie peut-être de remplacer:
$search = $_POST['search'];

Par
$search = stripslashes( $_POST['search'] );

@++

R@f
cs_cedric_g Messages postés 2 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 21 novembre 2007
20 nov. 2007 à 12:03
Salut !
Bravo pour ce moteur de recherche, mais j'ai un problème avec les apostrophes dans le texte de recherche. Par exemple, "Tir à l'arc" ne renvoie aucun résultat. Le texte est rentré tel quel dans la base, comment faire pour que les apostrophes ne gênent pas la recherche ?

Merci!
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 sept. 2007 à 14:46
Salut!
Je ne comprends pas le pb: en jouant sur le paramètre $limit_start ($limiz_nb reste fixé), tu devrais pouvoir ce que tu veux...

Où est-ce que ca coince? :)

@++

R@f
sebastien247 Messages postés 27 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 13 mars 2011
1 sept. 2007 à 14:41
Salut,
Je n'arrive pas a faire fonctionner l'affichage page par page, muisque la variable $limit_nb limit les recherche a 5 (par exemple) a donc une foit arriver a 5 resultat il ne continue pas sa recherche jusqu'au bout

Merci de bien vouloir m'éclairé

Merci par avance
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
25 juil. 2007 à 17:55
Yop!
Ne modifie pas le corps de la requête et adapte tes paramètres, genre:
table1 t1, table2 t2 : tables
array( t1.champ, t1.champ2, t2.champ ) : pour les champs de recherche

Etc...

@++

R@f
wals69 Messages postés 14 Date d'inscription vendredi 13 juillet 2007 Statut Membre Dernière intervention 2 mai 2008
25 juil. 2007 à 10:04
Bonjour,
Excuse moi encore une fois de te deranger mais j ai encore un petit souci
J aimerais faire une recherche dans deux tables et je crois qu'il n'accepte pas la jointure.

<?php
$id_client = $_GET['id_client'];
function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = '')
{
// option de recherche
$option = $_POST['option'];
// texte de recherche
$search = $_POST['search'];

// si c'est le premier appel de la fonction
if(!isset($fonction_requete))
{
static $fonction_requete = 1;

// si "Rechercher tous les mots" ou "Rechercher un de ces mots"
if($option 'all' || $option 'one')
{
// liste des mots
$mots = explode(' ', $search);

// sépararateur
if($option == 'all')
$sep = ' AND ';
else
$sep = ' OR ';
} // if($option 'all' || $option 'one')
// "Rechercher l'expression exacte"
else
{
$mots = $search;
$sep = '';
}
} // if(!isset($fonction_requete))

if(!is_array($champs))
$champs = array($champs);

if($option 'all' || $option 'one')
{
// pour savoir si on en est à la première itération ou non
$i = 0;

// pour tous les mots
foreach($mots as $mot)
{
if(!$i)
{
$search = '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
$i = 1;
}
else
$search .= $sep . '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
} // foreach($mots as $mot)
} // if($option 'all' || $option 'one')
else if($option == 'sentence')
$search = '~#^!|!^#~ LIKE \'%' . $mots . '%\'';

$i = 0;

// début de requête
if(empty($count))
$req_search 'SELECT ' . $select . ' FROM ' . $table . ' WHERE (partage_media 1 OR (partage_media = 0 AND client.id_client = media.id_client AND id_client = $id_client)) AND (';
else
$req_search 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE (partage_media 1 OR (partage_media = 0 AND client.id_client = media.id_client AND id_client =$id_client)) AND (';

// ajout des champs
foreach($champs as $champ)
{
if(!$i)
{
$req_search .= '( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
$i = 1;
}
else
$req_search .= 'OR ( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
}
$req_search .= ') ';

if(empty($count))
$req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";

return $req_search;
}

?>
<?php
if(isset($_POST['operation']) && $_POST['operation']=='Rechercher'){
?>

<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td>nom du fichier</td>
</tr>

<?php


$requete = requete('client,media', array('nom_media', 'description_media', 'partage_media, nom_client'), '*', 'nom_media', 'ASC', 0, 25) ;
$result = mysql_query($requete);...etc

Tu en penses quoi?
Merci d'avance
wals69 Messages postés 14 Date d'inscription vendredi 13 juillet 2007 Statut Membre Dernière intervention 2 mai 2008
16 juil. 2007 à 11:17
merci beaucoup coockiesch
ca marche nikel
et le temps de reponse est super rapide
merci.
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
16 juil. 2007 à 08:10
Yop!
Remplace:
# // début de requête
# if(empty($count))
# $req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ';
# else
# $req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE ';

Par
// début de requête
if(empty($count))
$req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE partage=1 AND (';
else
$req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE partage=1 AND (';

Et ajoutes, avant:
# if(empty($count))
# $req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";

$req_search .= ') ';

Ca devrait jouer! :)

@++

R@f
wals69 Messages postés 14 Date d'inscription vendredi 13 juillet 2007 Statut Membre Dernière intervention 2 mai 2008
13 juil. 2007 à 17:06
salut
deja merci bcp pour ce code
mais j aimerais ajouter une condition dans la requete
comment puis-je faire.
en fait j aimerais qu'il me prenne un de mes champs sous condition
WHERE partage = '1' au lieu de me prendre toute la colonne patage
merci d'avance
Epoc22 Messages postés 198 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 novembre 2008 1
27 sept. 2006 à 09:04
En fait ce que j'aimerait que tu fasse c'est faire une MAJ de cette soruce avec la source de toutes les personnes qui ont posté des améliorations. Ca serait très sympa et pratique.
@+
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
26 sept. 2006 à 18:33
Salut!
Je n'ai pas compris de quel mise à jour tu parles... Synthèse des commentaires? Autres précisions? ...?
Sinon, ne mieux, y'a une version II (regarde ds mes sources).

@++

R@f
Epoc22 Messages postés 198 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 novembre 2008 1
26 sept. 2006 à 16:59
Salut @ tous, ce code est très intéressant et fera, pour ma part, sujet à d'importantes améliorations mais
je me permet de faire une suggestion à coockiesch en particulier mais aussi aux autres personnes qui ont postés
des commentaires sur cette source : coockiesch, il faudrait vraiment que tu fasse une mise à jour générale de ton code
car là je ne comprend rien à ce qui est dit !
Enfin, ça serait sympa de le faire pour tout le monde car justement tout le monde écrit son code à l'arrache comme commentaire
et résultat je capte rien ! Je pense pas que je soit le seul à ne pas comprendre....
Merci de faire cette MAJ...

Epoc
SuperRaplapla Messages postés 8 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 24 août 2009
20 févr. 2006 à 09:05
Désolé, erreur de ma part. Il faut juste faire attention à comment sont enregistrées les apostrophes dans la base (avec ou sans slashes etc...). Milles excuses !
++
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
20 févr. 2006 à 08:53
Je regarde ca et te tiens au courant... :)

@++

R@f
SuperRaplapla Messages postés 8 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 24 août 2009
19 févr. 2006 à 00:09
Re !
Lors de la recherche contenant une apostrophe, il ne trouve aucun résultat, alors que dans ma table, il devrait. Comment pourrait on faire pour y rémedier ???
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
17 févr. 2006 à 07:12
Oui! J'avais vu que, des fois:
if( empty( rtrim( $mots ) ) )
Ne passe pas.

Mais:
$mots = rtrim( $mots );
if( empty( $mots ) )
Est ok... :D

@++

R@f
SuperRaplapla Messages postés 8 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 24 août 2009
16 févr. 2006 à 20:36
quoique non le "trim" a été fait avant et en plus il génère une erreur, il suffit de faire :

if ($mots==''){
echo "Votre recherche ne contient pas de mots clés.";
exit;
}

A+
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
16 févr. 2006 à 20:00
Oui, pourquoi pas! :)

@++

R@f
SuperRaplapla Messages postés 8 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 24 août 2009
16 févr. 2006 à 10:31
Autre chose, j'ai rajouté après :

else if($option 'sentence') $search '~#^!|!^#~ LIKE \'%' . $mots ." ". '%\'';

Ceci, afin de ne pas faire la recherche si aucun mot clés dans la recherche de phrase exacte :

if (trim($mots)==''){
echo "Votre recherche ne contient pas de mots clés.";
exit;
}

Qu'en pensez-vous ?
SuperRaplapla Messages postés 8 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 24 août 2009
16 févr. 2006 à 10:10
Bon code, juste ce que je cherchai. Bravo et merci !
N'hésitez pas à rajouter des améliorations ou autre si vous en trouvez.
A + !
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
3 févr. 2006 à 15:46
Salut!
Le static a bien sa place dans le if: si c'est la première fois que la fonction est appelée, on crée la variable. Static indique simplement que la valeur sera gardée en mémoire enrte plusieurs appels de la fonction, au contraire d'une variable "normale"

$req_search = requete('titre,liens','recherche', array('titre','keywords'), 'titre,liens', 'liens', 'ASC', 1, 20);
Normalement, on appelle la fonction comme tu l'a fait. Pas besoin de faire l'affectation.

Par contre: ne pas modifier la code de la fonction... Tu as déclaré des variables au début, il faut pas. L'intérêt d'une fonction c'est justement d'avoir des paramètres.

Essaie de reprendre mon code tel qu'il est posté et d'appeler ta fonction comme tu l'a fait:
$req_search = requete('titre,liens','recherche', array('titre','keywords'), 'titre,liens', 'liens', 'ASC', 1, 20);

Ca change qqch?

On va y arriver! :)

@++

R@f
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
2 févr. 2006 à 18:24
< coockiesch

deux bugs résolus :

dans le code une variable limit_nomb au début et à la fin, limit_nb.
ce qui est une erreur.

cette portion
// si c'est le premier appel de la fonction
if(!isset($fonction_requete))
{
static $fonction_requete = 1;
je l'ai transformé en çà
static $fonction_requete = 1;
// si c'est le premier appel de la fonction
if(!isset($fonction_requete))
{

çà plait davantage à zend.la variable utilisé avant d'être déclarée çà ne lui plaisait pas...et à toi? c'est correct dans le contexte?

le pb de variables non déclarés je l'ai résolu comme çà

function requete($select ='titre,liens',$table ='recherche',$champs ='titre,keywords',$order ='titre',$sens ='ASC',$limit_start='0',$limit_nomb='10', $count = '')
{

par contre, j'ai toujours cette erreur d'expression dont le résultat n'est pas utilisé.
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
2 févr. 2006 à 14:22
salut coockiesch

alors après plusieurs tests, il y à du mieux, mais sql retourne cette erreur:

MySQL Error'
SELECT titre,liens FROM recherche WHERE ( titre,keywords LIKE '%accords%' AND titre,keywords LIKE '%gammes%' ) ORDER BY titre ASC LIMIT 1, 1
Operand should contain 1 column(s)

l'opérande devrait contenir une colonne.çà ne me parle pas.zendstudio, lui, retourne :

ligne 2:argument de fonction non utilisés pour les variables de la fonction sauf count et limit_nomb.
pour limit_nomb, la valeur de la variable n'est pas utilisée et n'apparait qu'une fois(ligne 10).

la variable fonction_requete est utilisée mais pas définie et le résultat de l'expréssion n'est jamais utilisé(ligne 91).

j'essai depuis hier plusieurs combinaisons, rien à faire.je sollicite donc, une fois de plus ton expérience.

voilà les codes

<?php
function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = '')
{
$table ='recherche';
$champs ='titre,keywords';
$select ='titre,liens';
$order ='titre';
$sens ='ASC';
$limit_start='1';
$limit_nomb='10';
$count ='';

$option = $_POST['option'];
$search = $_POST['search'];

// si c'est le premier appel de la fonction
if(!isset($fonction_requete))
{
static $fonction_requete = 1;

// si "Rechercher tous les mots" ou "Rechercher un de ces mots"
if($option 'all' || $option 'one')
{
// liste des mots
$mots = explode(' ', $search);

// sépararateur
if($option == 'all')
$sep = ' AND ';
else
$sep = ' OR ';
} // if($option 'all' || $option 'one')
// "Rechercher l'expression exacte"
else
{
$mots = $search;
$sep = '';
}
} // if(!isset($fonction_requete))

if(!is_array($champs))
$champs = array($champs);

if($option 'all' || $option 'one')
{
// pour savoir si on en est à la première itération ou non
$i = 0;

// pour tous les mots
foreach($mots as $mot)
{
if(!$i)
{
$search = '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
$i = 1;
}
else
$search .= $sep . '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
} // foreach($mots as $mot)
} // if($option 'all' || $option 'one')
else if($option == 'sentence')
$search = '~#^!|!^#~ LIKE \'%' . $mots . '%\'';

$i = 0;

// début de requête
if(empty($count))
$req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ';
else
$req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE ';

// ajout des champs
foreach($champs as $champ)
{
if(!$i)
{
$req_search .= '( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
$i = 1;
}
else
$req_search .= 'OR ( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
}

if(empty($count))
$req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";

return $req_search;
}
include_once ("fichiers/connect.php");
$req_search = requete('titre,liens','recherche', array('titre','keywords'), 'titre,liens', 'liens', 'ASC', 1, 20);
$result = mysql_query($req_search) or die("MySQL Error'
".$req_search.'
'.mysql_error());

echo 'nombre de résultats pour votre requête : ' . mysql_num_rows($result); // affichera le nombre d'enregistrements retournés"
echo 'pages de résultats : ' . mysql_fetch_array($req_search);
?>
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
2 févr. 2006 à 08:12
Le start permet de faire un affichage page par page... :)
C'est tout bon, pour toi? :)

@++

R@f
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 21:56
pour ceux que ça interesse j'ai mis un affichage coloré des mots utilisés pour la recherche

En ce qui me concerne c'est une recherche pour des sites (annuaire), on recherche les mots dans les champs nom, mini_desc, description

ca donne ceci :
$requete = requete( $table, $champs, $select, $order, $sens, $limit_start, $limit_nb );
$result = mysql_query( $requete ) or die('Erreur MySQL');


while($data100 = mysql_fetch_array($result)){
$nom_site = $data100['nom'];
$mini_desc_site = $data100['mini_desc'];
$description_site = $data100['description'];

if($option 'all' || $option 'one') {
$mots = explode(' ', $search);
foreach($mots as $mot) {
$replace=''.$mot.'';
$mini_desc2 = str_replace($mot,$replace,$mini_desc_site);
$nom2 = str_replace($mot,$replace,$nom_site);
$description2 = str_replace($mot,$replace,$description_site);
$nom_site = $nom2;
$mini_desc_site = $mini_desc2;
$description_site = $description2;
}
}
else{
$mots = $search;
$replace=''.$mots.'';
$mini_desc2 = str_replace($mots,$replace,$mini_desc_site);
$nom2 = str_replace($mots,$replace,$nom_site);
$description2 = str_replace($mot,$replace,$description_site);
}

echo "Nom : ".$nom2."
".$mini_desc2."Description :
".$description2."";
}
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 21:05
merde alors !?

coockiesch --> ton message du 01/02/2006 19:06:43 tout a l'heure il s'arretait a "Oki, alors oublions tout ça et repartons d'un bon pied sur le code, :)"

j'avais pas tout le reste d'affiché !!
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 21:03
nog nog --> je suis interessé par ton post du 25/02/2005 10:41:09 mais je ne vois pas où rajouter ce bout de script peux-tu me dire la ligne d'avant et la ligne d'apres du script original si c'est une modif, ou alors faut-il le mettre a la fin du script ??
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 20:53
ok c good tout fonctionne correctement, mais dis-moi je ne vois pas l'intêret d'avoir un limit_start a 10 !?
Enfin faut vraiment en avoir l'utilité, normalement pour un moteur de recherche si l'on veux affiché tout les resultats on met un limit_start = 0
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 20:48
excusez-moi j'ai remplacé la ligne 124 :
$requete = requete( $table, $champs, $select, $order, $sens, $limit_start, $limit_nb );
$result = mysql_query( $requete ) or die('Erreur MySQL');

ca marche a peu pres, j'ai pas tout ce que je veux
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 20:38
Fatal error: Call to undefined function: function_requete() in /home/internetk/www/nouveau/essai/search.php on line 124

ligne 124 :
$req_search = function_requete( $table, $champs, $select, $order, $sens, $limit_start, $limit_nb );
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 févr. 2006 à 19:23
Salut!
Alors, comme j'ai dit à BJ33, $start=0;

Ensuite, ben tu appelles la fonction avec tes params:
$req_search = function_requete( $table, $champs, $select, $order, $sens, $limit_start, $limit_nb );

ensuite:
$result = mysql_query( $req_search ) or die('Erreur MySQL');
// affichage & co

Ca joue comme ca?

@++

R@f
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 19:20
voila c'est tout avec <?php et parametres de connexion avant et ?> apres !!
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 19:19
$table = 'NV_sites';
$champs = 'mini_desc';
$select = 'mini_desc';
$order= 'nom';
$sens = 'ASC';
$limit_start= '1';
$limit_nb = '10';

function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = '')
{
// option de recherche
$option = $_POST['option'];
// texte de recherche
$search = $_POST['search'];

// si c'est le premier appel de la fonction
if(!isset($fonction_requete))
{
static $fonction_requete = 1;

// si "Rechercher tous les mots" ou "Rechercher un de ces mots"
if($option 'all' || $option 'one')
{
// liste des mots
$mots = explode(' ', $search);

// sépararateur
if($option == 'all')
$sep = ' AND ';
else
$sep = ' OR ';
} // if($option 'all' || $option 'one')
// "Rechercher l'expression exacte"
else
{
$mots = $search;
$sep = '';
}
} // if(!isset($fonction_requete))

if(!is_array($champs))
$champs = array($champs);

if($option 'all' || $option 'one')
{
// pour savoir si on en est à la première itération ou non
$i = 0;

// pour tous les mots
foreach($mots as $mot)
{
if(!$i)
{
$search = '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
$i = 1;
}
else
$search .= $sep . '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
} // foreach($mots as $mot)
} // if($option 'all' || $option 'one')
else if($option == 'sentence')
$search = '~#^!|!^#~ LIKE \'%' . $mots . '%\'';

$i = 0;

// début de requête
if(empty($count))
$req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ';
else
$req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE ';

// ajout des champs
foreach($champs as $champ)
{
if(!$i)
{
$req_search .= '( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
$i = 1;
}
else
$req_search .= 'OR ( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) ';
}

if(empty($count))
$req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";

return $req_search;
}
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 19:17
je l'appelle pas !! (je pensais que c'etait dans ton script !, c'est peut-etre pour ça alors lol!!)
je t'envoi mon script
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 févr. 2006 à 19:16
Pas normal... Tu peux me montrer la façon dont tu appelle la fonction?

@++

R@f
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 19:14
j'ai essayé les deux :

echo "requete : ".$req_search."
";
print "requete : ".$req_search."
";

ca ne m'affiche rien
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 févr. 2006 à 19:12
Alors, ca doit être la requête générée...
Ca donne quoi à l'affichage?

@++

R@f
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 19:11
mes variables sont bonnes puisque j'ai fait :

$sql100 = mysql_query("SELECT * FROM $table WHERE $champs LIKE '%$search%' ORDER BY $order $sens");
while....

et ça fonctionne
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 févr. 2006 à 19:09
Salut!
Oui!

Mais on préfère echo à print pcq c plus rapide:
echo $req_search;

@++

R@f
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 févr. 2006 à 19:06
Salut!
Oui, je comprends! Cela m'est arrivé aussi bien souvent, et m'arrive encore parfois. Oki, alors oublions tout ça et repartons d'un bon pied sur le code, :)

include_once ("fichiers/connect.php");
$req_search = requete('recherche', array('titre', 'keywords'), 'titre, liens', 'liens', 'ASC', 1, 20);
$result = mysql_query($requete);

- l'appel de la fonction avec ses paramètres est OK, pour moi
- petite erreur: tu enregistre la requête crée par la fonction dans $req_search mais tu utilises $requete dans mysql_query

Essaie:
include_once ("fichiers/connect.php");
$req_search = requete('recherche', array('titre', 'keywords'), 'titre, liens', 'liens', 'ASC', 1, 20);
$result = mysql_query($req_search) or die('MySQL Error'); // Affichera MySQL Error et bloquera le script en cas d'erreur mysql

Ensuite:
echo $req_search . '

'; // affichera la requête
eccho 'nb: ' . mysql_num_rows($result); // affichera le nombre d'enregistrements retournés

Pour la suite:
- on met start à 0 et pas à 1 ( le premier enregistrement est l'enregistrement 0 et pas 1, comme pour les tableaux ).
- comment fais-tu l'affichage des résultats?

Voilà!

@++

R@f
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 19:04
...et je fais comment pour afficher la requete générée ??

print $req_search; ??
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
1 févr. 2006 à 19:04
...et je fais comment pour afficher la requete générée ??

print $req_search; ??
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
1 févr. 2006 à 13:34
< cookiesch

tu attendais une réponse, ok, désolé, je ne pensais pas que c'était le cas.c'est vrai, c'est un msg agréssif, çà m'à énervé de lire la réponse que tu à écrit pour joebuz, le jour même alors que le mien à deux mois tout juste.je retire.tu acceptes mes excuses?

en fait, en tant que débutants, ont se retrouvent souvent confrontés à, peut être pas du mépris, mais au moins de l'indifférence, quand l'on pose des questions qui appellent des réponses qui paraissent évidentes aux initiés.c'est particulièrement vrai sur les sites cs et prog en général.et çà, c'est diablement frustrant.d'où, parfois, des écarts de conduite élémentaire.je m'en excuse encore.

à l'époque, j'ai lù ce code et il m'à emballé, je l'ai donc testé.je ne comprenais même pas ce que je devais faire pour paramétrer la fonction, CF: le commentaire au dessus de celui de joebuzz.

aujourd'hui, j'ai coder un moteur simple, à la mesure de mes compétences php(je viens d'en finir avec les variables, les opérateurs et les boucles, j'attaque justement les fonctions), il ne recherche qu'un mot clé et marche bien.mais si tu veux m'expliquer comment le paramétrer, je prend.

ma question : est ce que je dois entrer les paramétres comme ceçi ou est ce que çà doit rester vide?

function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = 'recherche,("titre","keywords"),(titre,liens),titre,asc,1,20')
{

sinon, est ce correct?

pour la requête, j'avais tenter çà :

include_once ("fichiers/connect.php");
$req_search = requete('recherche', array('titre', 'keywords'), 'titre, liens', 'liens', 'ASC', 1, 20);
$result = mysql_query($requete);

et aussi ce que tu suggérais, à savoir :

Il te suffit d'appeler la fonction avec les bons params, par exemple:
# $requete = requete('table', array('champ1', 'champ2', 'champ3'), 'id, champ4', 'id', 'DESC', 10, 25);
# $result = mysql_query($requete);

je n'obtiens rien d'autre qu'une page blanche.avec dans la source, uniquement les entètes html.
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 févr. 2006 à 12:35
Pas de réponse? Bon, pas la peine d'écrire de commentaires aussi méprisants, alors...

@++

R@f
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
31 janv. 2006 à 21:13
Salut, BJ33!
Je suis désolé mais je n'avais pas vu ton deuxième commentaire... En règle générale, j'essaie de répondre le plus vite possible, ce que j'ai fait avec la question de JOEBUZ... Petit couac dans le cadre de ta question, nullement question de mépris...

@++

R@f
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
31 janv. 2006 à 20:31
bonjour

merci monsieur le programmeur Professionel pour cette réponse rapide.les débutants que nous sommes vous salut bien bas pour votre mépris...
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
31 janv. 2006 à 20:09
Salut!
Tu pourrais afficher la requête crée par ma fonction? Et si tu colle ce code dans phpmyadmin, ca renvoie qqch?

@++

R@f
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
31 janv. 2006 à 18:43
'lut j'y arrive pas ca ne m'affiche aucun resultat
j'ai mis le formulaire ds un fichier index.html
et créé un fichier search.php ou dedans j'ai mis :

$bdd_host = 'host';
$bdd_login = 'login';
$bdd_pass = '*****';
$bdd_base = 'base';
$bdd_conect = mysql_connect("$bdd_host", "$bdd_login", "$bdd_pass") or die('erreur connection sql');
mysql_select_db("$bdd_base") or die('oops pas de base de donnée');


$table = 'NV_sites';
$champs = array('nom', 'mini_desc', 'description');
$select = 'mini_desc';
$order= 'description';
$sens = 'ASC';
$limit_start = '1';
$limit_nb = '25';

[Ton code]

et ca ne m'affiche qu'une page blanche pourtant je recherche des mots qui sont dans ma table !
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
30 nov. 2005 à 14:01
salut et merci pour ta réponse.

je ne comprend rien du tout à la façon de passer les paramètres.je publie le dernier essai :

<?php
function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = 'recherche,("titre","keywords"),(titre,liens),titre,asc,1,20') 
{ 
    // option de recherche 
    $option = $_POST['option']; 
    // texte de recherche 
    $search = $_POST['search']; 
         
    // si c'est le premier appel de la fonction 
    if(!isset($fonction_requete)) 
    { 
        static $fonction_requete = 1; 
         
        // si "Rechercher tous les mots" ou "Rechercher un de ces mots" 
        if($option 'all' || $option 'one') 
        { 
            // liste des mots 
            $mots = explode(' ', $search); 
             
            // sépararateur 
            if($option == 'all') 
                $sep = ' AND '; 
            else 
                $sep = ' OR '; 
        } // if($option 'all' || $option 'one') 
        // "Rechercher l'expression exacte" 
        else 
        { 
            $mots = $search; 
            $sep = ''; 
        } 
    } // if(!isset($fonction_requete)) 
     
    if(!is_array($champs)) 
        $champs = array($champs); 
     
    if($option 'all' || $option 'one') 
    { 
        // pour savoir si on en est à la première itération ou non 
        $i = 0; 
         
        // pour tous les mots 
        foreach($mots as $mot) 
        { 
            if(!$i) 
            { 
                $search = '~#^!|!^#~ LIKE \'%' . $mot . '%\''; 
                $i = 1; 
            } 
            else 
                $search .= $sep . '~#^!|!^#~ LIKE \'%' . $mot . '%\''; 
        } // foreach($mots as $mot) 
    } // if($option 'all' || $option 'one') 
    else if($option == 'sentence') 
        $search = '~#^!|!^#~ LIKE \'%' . $mots . '%\''; 
         
    $i = 0; 
     
    // début de requête 
    if(empty($count)) 
        $req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE '; 
    else 
        $req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE '; 
     
    // ajout des champs 
    foreach($champs as $champ) 
    { 
        if(!$i) 
        { 
            $req_search .= '( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) '; 
            $i = 1; 
        } 
        else 
            $req_search .= 'OR ( ' . str_replace('~#^!|!^#~', $champ, $search) .' ) '; 
    } 
     
    if(empty($count)) 
        $req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb"; 
     
    return $req_search; 
}
include_once ("fichiers/connect.php");
$req_search = requete('recherche', array('titre', 'keywords'), 'titre, liens', 'liens', 'ASC', 1, 20);
$result = mysql_query($requete);
?>


ma table est structurée ainsi :

id (uniquement pour la maintenance)
keywords
titre
liens

j'ai tenter de comprendre la structure de la requête...c'est plus fort que moi!je débute en php/mysql.avec un seul mot à rechercher pas de soucis mais plusieurs...ce code est exactement ce que je cherche à utiliser pour la nouvelle version de mon site, j'en ai essayer un bon nombre, c'est celui là qu'il me faut, même si je n'arrive pas à le faire fonctionner.un exemple parlant serait le bienvenue.
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
29 nov. 2005 à 20:36
Salut!
SELECT $champs FROM $table WHERE ... ORDER BY $order $sens LIMIT $limit_start, $limit_nb
>> Ce n'est que pour indiquer à des personnes connaissant le SQL quelle tête la requête va avoir.

Il te suffit d'appeler la fonction avec les bons params, par exemple:
# $requete = requete('table', array('champ1', 'champ2', 'champ3'), 'id, champ4', 'id', 'DESC', 10, 25);
# $result = mysql_query($requete);

@++

R@f
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
26 nov. 2005 à 18:19
salut

très intéréssant, mais à part le formulaire, je suis perdu.

en effet, je n'obtient qu'une page blanche et dans la source le code html que j'ai rentré, rien d'autre.

c'est surement dû au fait que je ne comprends pas les champs(leurs noms).

SELECT $champs FROM $table WHERE ... ORDER BY $order $sens LIMIT $limit_start, $limit_nb


la variable champs et table, c'est ok.mais order, çà correspond à quoi? et pourquoi le where est suivi de ..., le limit_start, je ne vois pas non plus.

comment j'éffectue ma requête?

et les arguments de la fonction, je les passe comme çà?

.. = 'dico,definition,"definition,note,signature",asc,20,'

dico : table
définition : champs de recherche
"definition,notes,signature" : le select
asc : order by
20 : limit
j'ai supprimer les variables order et $limit_start

si quelqu'un peux m'éclairer.
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
14 sept. 2005 à 16:45
Salut!
Contacte moi par MP:
On se croise sur MSN ou par mail afin que tu m'explique...

@++

R@f
frenchconexion Messages postés 2 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 14 septembre 2005
14 sept. 2005 à 16:37
bonjour merci d'avoir repondu!!
donc voila j'explique ma situation donc je vais partit d'un staff de jeu online je cherchait a faire pour les joueur un site en php et integrer une recherche dur la database du jeux
exemple:le joueur tape toto et hop il vois que tot c le nom d'1 item qu'il est vendu a tel endroit et le prix etc....
ensuite pour le script (je sais que l'erreur viens de moi)
j'utilise Easy php pour le faire en local pour tester pour pouvoir le metre on line plus tard,donc je me suis scripter un site basic en php bouton etc donc g mis mon bouton item ensuite g crée un item.php et incorporer le script dedans
g aussi fait un dbconnect voila
desoler si j'ecrit trop et merci d'avance
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
14 sept. 2005 à 12:47
Salut!
Tu peux nous expliquer comment tu as mis en place le script? Ce que contiennent les différents fichiers?

@++

R@f
frenchconexion Messages postés 2 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 14 septembre 2005
14 sept. 2005 à 03:51
Bonjour a tous voila j'ai un petit soucis avec le script il me fait des erreurs esce normale ou me suis-je tromper?
exemple:j me co dessus je voit le cadre avec recher etc..
mais en dessous ca me fait ca : 13. 14. ************************* 15. fonction de création de requête 16. ************************* 17. function requete($table, $champs, a partir de la il liste tous
voila merci pour tout
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
14 juin 2005 à 21:37
Salut!
Cette fonction te retourne une requête mais ne l'exécute pas. A toi de te connecter avant l'exécution de celle ci...

En fait, on insère ~#^!|!^#~à la place des mots à chercher et on y remplace par les bons mots après... Ca fait gagner du temps, :)

@++

R@f
cs_frippons Messages postés 18 Date d'inscription lundi 28 mars 2005 Statut Membre Dernière intervention 29 juillet 2009
14 juin 2005 à 10:38
bonjour

je ne comprend pas cette ligne
$search = '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
Peut on me l'expliquer, et quand doit on se connecter à la BDD
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
2 juin 2005 à 15:26
Hello!
Il faudrait que tu regarder des tutos sur les bases de données, ca prend un peu de temps à assimilier et à apprendre comment bosser avec...

Par exemple: http://cyberzoide.developpez.com/php4/mysql/

@++

R@f
cs_the_leech Messages postés 12 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 23 septembre 2006
2 juin 2005 à 09:22
Bonjours,
Je suis très nul au niveau base de donner, j'aimerait savoir comment en créer une est après mettre les liens qui pouront êtres rechercher pas le moteur de rechercher ( votre code ).

Merci de méclèrsir !
cs_nognog Messages postés 4 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 25 février 2005
25 févr. 2005 à 10:45
j'ai oublié un truc ;)

si vous appliquez ces modifs ne pas oublier de passer $stripmots2 a foreach

 foreach($mots as $mot)

par 
 foreach($stripmots2 as $mot)


++
cs_nognog Messages postés 4 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 25 février 2005
25 févr. 2005 à 10:41
salut

j'ai fait qques modifs pour affiner encore les recherches

 if($option 'all' || $option 'one')
        {
           
          //creer un tableau d'articles/verbe a comparer et a supprimer de $search
$strip = array('le','la','les','de','des','est','a','à','un','une');

            if($option == 'all'){
                $sep = ' and ';

 // liste des mots
$mots = explode(' ', $search);
// retire les articles
$stripmots = array_diff($mots,$strip); //print_r ($stripmots);
//retire les array vide
$stripmots2 = array_filter($stripmots); //print_r ($stripmots2);

// message erreur si le tableau est vide
if (empty($stripmots2)){echo "les articles ayant été retirés (ex: le, la, un), votre requete n'a pas de mots clefs";include('footer.php');exit;}

}
else{
                $sep = ' or ';
$mots = explode(' ', $search);
$stripmots = array_diff($mots,$strip);
//print_r ($stripmots);
$stripmots2 = array_filter($stripmots);
//print_r ($stripmots2);

if (empty($stripmots2)){echo "les articles ayant été retirés (ex: le, la, un), votre requete n'a pas de mots clefs";include('footer.php');exit;}


}
        } // if($option 'all' || $option 'one')
        // "Rechercher l'expression exacte"
        else
        {
// on retire les espaces 
$search = trim($search);
            $mots = $search;
            $sep = '';
        }


petit bout de code qui evite d'avoir un array[x]=vide lorsque l'on rentre plusieurs espaces dans la string $search pour option 'all' 'one' , et retire les articles lors de la recherche

voila j'esperes que j'ai pas fait ou dit de betises

$nognog == 'debutant';

++
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
24 févr. 2005 à 11:45
Salut!
Merci pour l'idée...

Donc, je retirerai quels mots dans les recherches en AND et OR:
le, la, les, un, une, des, l'

Autres idées?

@++

R@f
cs_nognog Messages postés 4 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 25 février 2005
24 févr. 2005 à 10:44
salut cookiesch !

j'ai trouvé un ptit truc tout bete pour affiner la recherche sur l'expression exacte.

dans la fonction tu encodes un espace, ce qui a pour effet de couper le mot (donc extrait ne peu contenir extra+1space ) et ainsi avoir une expression qui est exacte dans la recherche


else if($option == 'sentence')
        $search = '~#^!|!^#~ LIKE \'%' . $mots . '%\'';


a remplacer par : 

$search = '~#^!|!^#~ LIKE \'%' . $mots ." ". '%\'';


sinon j'ai une ptite remarque il serait sympa de faire une petite fonction qui retire tous les articles pour les recherches autre que exacte sinon ca renvoit trop de references

merci bcp pour ton script il est super :)
++
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
23 févr. 2005 à 16:06
Salut!
Je sais pas, je pense pas...

Pcq si tu enlève les %, tu auras d'autres pbs...

@++

R@f
cs_nognog Messages postés 4 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 25 février 2005
23 févr. 2005 à 15:23
salut

je suis debutant et j'ai un souci avec ton script

j'ai reussi a le faire fonctionner et faire mes affichage , mais par exemple qd je cherche l'expression exacte sur 'extra' je me retrouve avec des resultats incluant 'extrait' .

ce qui est juste vu que texte LIKE '%extra%' : 'extrait contient bien extra' mais cependant ce n'est pas l'expression exacte d'ou une recherche legerement faussée .

ya til une solution simple a ce probleme ? sinon je peux vivre avec :)
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
21 oct. 2004 à 16:52
Salut!
Non, car l'expression excate peut être encadrée par un texte autre...

Si on cherche "cette phrase" dans un champ qui contient "je me demande si ctte phrase est juste", la requête doit retourner ce résultat....

@++

R@f
webdesignasp Messages postés 29 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 19 avril 2005
21 oct. 2004 à 14:38
Je pense qu'il y a une erreur à la ligne 70 :

$search = '~#^!|!^#~ LIKE \'%' . $mot . '%\'';

devrait plutôt s'écrire sans '% %' pour l'option "l'expression exacte" :

$search = '~#^!|!^#~ LIKE \'' . $mots . '\'';
Rejoignez-nous