begin process at 2012 02 15 06:15:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > MOTEUR DE RECHERCHE DANS BDD

MOTEUR DE RECHERCHE DANS BDD


 Information sur la source

Note :
9,8 / 10 - par 10 personnes
9,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Niveau :Débutant Date de création :15/08/2004 Date de mise à jour :16/08/2004 15:13:21 Vu :13 076

Auteur : coockiesch

Ecrire un message privé
Site perso
Commentaire sur cette source (79)
Ajouter un commentaire et/ou une note

 Description

C'est un petit code qui permet de créer une requête pour une recherche dans une table données.

On à trois options de recherche:
- Rechercher tous les mots (AND)
- Rechercher un des mots (OR)
- Phrase complète ("")

Il suffit de passer ensuite à la fonction la table, les champs de recherche, les infos à récupérer et le critère de classement...

Source

  • ********
  • formulaire
  • ********
  • <form action="search.php" method="post">
  • <input type="text" name="search" size="100" style="font-size: 12px;"><br><br>
  • <input type="radio" name="option" value="all" style="border: none; font-size: 12px;" checked>Rechercher tous les mots<br>
  • <input type="radio" name="option" value="one" style="border: none; font-size: 12px;">Rechercher un de ces mots<br>
  • <input type="radio" name="option" value="sentence" style="border: none; font-size: 12px;">Rechercher l'expression exacte
  • <br><br>
  • <input type="submit" value="Rechercher" style="font-size: 12px; position: relative; left: 20px;">
  • </form>
  • *************************
  • fonction de création de requête
  • *************************
  • 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;
  • }
  • **********
  • Paramètres:
  • **********
  • $table: table dans laquelle effectuer la requête
  • $champs: champs dans lesquels la recherche est effectuées (si plusieurs champs, $champs est un tableau)
  • $select: champs à récupérer
  • $order: champ de classement
  • $sens: ASC ou DESC
  • $limit_start: départ
  • $limit_nb: nombre d'enregistrements sélectionnés
  • $count: paramètre optionnel: Si est vide ou non-passé, la requête est crée normalement. Sinon, il désigne le champ pour créer la requête count()
  • En simplifé, la requête est générée comme ceci:
  • SELECT $champs FROM $table WHERE ... ORDER BY $order $sens LIMIT $limit_start, $limit_nb
  • *******
  • Exemple
  • *******
  • $requete = requete('table', array('champ1', 'champ2', 'champ3'), 'id, champ4', 'id', 'DESC', 10, 25);
  • $result = mysql_query($requete);
********
formulaire
********
<form action="search.php" method="post">
<input type="text" name="search" size="100" style="font-size: 12px;"><br><br>
<input type="radio" name="option" value="all" style="border: none; font-size: 12px;" checked>Rechercher tous les mots<br>
<input type="radio" name="option" value="one" style="border: none; font-size: 12px;">Rechercher un de ces mots<br>
<input type="radio" name="option" value="sentence" style="border: none; font-size: 12px;">Rechercher l'expression exacte
		
<br><br>
<input type="submit" value="Rechercher" style="font-size: 12px; position: relative; left: 20px;">
</form>

*************************
fonction de création de requête
*************************
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;
}

**********
Paramètres:
**********
$table: table dans laquelle effectuer la requête
$champs: champs dans lesquels la recherche est effectuées (si plusieurs champs, $champs est un tableau)
$select: champs à récupérer
$order: champ de classement
$sens: ASC ou DESC
$limit_start: départ
$limit_nb: nombre d'enregistrements sélectionnés 
$count: paramètre optionnel: Si est vide ou non-passé, la requête est crée normalement. Sinon, il désigne le champ pour créer la requête count() 

En simplifé, la requête est générée comme ceci:
SELECT $champs FROM $table WHERE ... ORDER BY $order $sens LIMIT $limit_start, $limit_nb  

*******
Exemple
*******

$requete = requete('table', array('champ1', 'champ2', 'champ3'), 'id, champ4', 'id', 'DESC', 10, 25);
$result = mysql_query($requete); 

 Conclusion

Ben voila, j'attends vos commentaires


 Historique

16 août 2004 14:45:19 :
16.08.2004: Petite mise à jour pour tenir compte de LIMIT
16 août 2004 15:13:22 :
16.08.2004: Possibilité de créer une requête count()

 Sources du même auteur

GÉRER UN .HTPASSWD
RÉCUPÉRER L'IP DU VISITEUR
Source avec Zip Source avec une capture IMAGE ANTI-SPAM
MOTEUR DE RECHERCHE DANS BDD II
PRETTY DATE

 Sources de la même categorie

Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier
Source avec Zip CLASS MYSQL 5/PHP5 AVEC GESTION DES EXCEPTION ET DES REQUÊTE... par devil_may_cry
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC ... par cod57
SYSTÈME DE PAGINATION AVEC BDD ET IMAGES (FICHIERS) par begueradj

Commentaires et avis

Commentaire de webdesignasp le 21/10/2004 14:38:08

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 . '\'';

Commentaire de coockiesch le 21/10/2004 16:52:01

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

Commentaire de nognog le 23/02/2005 15:23:44

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 :)

Commentaire de coockiesch le 23/02/2005 16:06:49

Salut!
Je sais pas, je pense pas...

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

@++

R@f

Commentaire de nognog le 24/02/2005 10:44:07

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

[code]

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


a remplacer par :

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

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 :)
++

Commentaire de coockiesch le 24/02/2005 11:45:08

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

Commentaire de nognog le 25/02/2005 10:41:09

salut

j'ai fait qques modifs pour affiner encore les recherches

[code]
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 = '';
        }
[/code]

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';

++

Commentaire de nognog le 25/02/2005 10:45:12

j'ai oublié un truc ;)

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

[code]
foreach($mots as $mot)

par
foreach($stripmots2 as $mot)
[/code]

++

Commentaire de the_leech le 02/06/2005 09:22:07

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 !

Commentaire de coockiesch le 02/06/2005 15:26:27

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

Commentaire de frippons le 14/06/2005 10:38:47

bonjour

je ne comprend pas cette ligne
$search = '~#^!|!^#~ LIKE \'%' . $mot . '%\'';
Peut on me l'expliquer, et quand doit on se connecter à la BDD

Commentaire de coockiesch le 14/06/2005 21:37:22

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

Commentaire de frenchconexion le 14/09/2005 03:51:32

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

Commentaire de coockiesch le 14/09/2005 12:47:48

Salut!
Tu peux nous expliquer comment tu as mis en place le script? Ce que contiennent les différents fichiers?

@++

R@f

Commentaire de frenchconexion le 14/09/2005 16:37:55

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

Commentaire de coockiesch le 14/09/2005 16:45:48

Salut!
Contacte moi par MP:
On se croise sur MSN ou par mail afin que tu m'explique...

@++

R@f

Commentaire de bj33 le 26/11/2005 18:19:20

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).

[code]
SELECT $champs FROM $table WHERE ... ORDER BY $order $sens LIMIT $limit_start, $limit_nb
[/code]

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 çà?

[code]
.. = 'dico,definition,"definition,note,signature",asc,20,'
[/code]
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.

Commentaire de coockiesch le 29/11/2005 20:36:56

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

Commentaire de bj33 le 30/11/2005 14:01:45

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 :

[code]
<?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);
?>
[/code]

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.

Commentaire de joebuz le 31/01/2006 18:43:11

'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 !

Commentaire de coockiesch le 31/01/2006 20:09:20

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

Commentaire de bj33 le 31/01/2006 20:31:19

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...

Commentaire de coockiesch le 31/01/2006 21:13:35

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

Commentaire de coockiesch le 01/02/2006 12:35:33

Pas de réponse? Bon, pas la peine d'écrire de commentaires aussi méprisants, alors...

@++

R@f

Commentaire de bj33 le 01/02/2006 13:34:50

< 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.

Commentaire de joebuz le 01/02/2006 19:04:30

...et je fais comment pour afficher la requete générée ??

print $req_search; ??

Commentaire de joebuz le 01/02/2006 19:04:44

...et je fais comment pour afficher la requete générée ??

print $req_search; ??

Commentaire de coockiesch le 01/02/2006 19:06:43

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 . '<br /><br />'; // 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


Commentaire de coockiesch le 01/02/2006 19:09:12

Salut!
Oui!

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

@++

R@f

Commentaire de joebuz le 01/02/2006 19:11: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

Commentaire de coockiesch le 01/02/2006 19:12:55

Alors, ca doit être la requête générée...
Ca donne quoi à l'affichage?

@++

R@f

Commentaire de joebuz le 01/02/2006 19:14:27

j'ai essayé les deux :

echo "requete : ".$req_search."<br />";
print "requete : ".$req_search."<br />";

ca ne m'affiche rien

Commentaire de coockiesch le 01/02/2006 19:16:27

Pas normal... Tu peux me montrer la façon dont tu appelle la fonction?

@++

R@f

Commentaire de joebuz le 01/02/2006 19:17:54

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

Commentaire de joebuz le 01/02/2006 19:19:03

$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;
}

Commentaire de joebuz le 01/02/2006 19:20:26

voila c'est tout avec <?php et parametres de connexion avant et ?> apres !!

Commentaire de coockiesch le 01/02/2006 19:23:57

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

Commentaire de joebuz le 01/02/2006 20:38:50

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 );

Commentaire de joebuz le 01/02/2006 20:48:47

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

Commentaire de joebuz le 01/02/2006 20:53:22

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

Commentaire de joebuz le 01/02/2006 21:03:56

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 ??

Commentaire de joebuz le 01/02/2006 21:05:58

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é !!

Commentaire de joebuz le 01/02/2006 21:56:12

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='<font color=#33ccff>'.$mot.'</font>';
$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='<font color=#33ccff>'.$mots.'</font>';
$mini_desc2 = str_replace($mots,$replace,$mini_desc_site);
$nom2 = str_replace($mots,$replace,$nom_site);
$description2 = str_replace($mot,$replace,$description_site);
}

echo "<b>Nom :</b> ".$nom2."<br />".$mini_desc2."<p /><b>Description :</b><br />".$description2."<p />";
}

Commentaire de coockiesch le 02/02/2006 08:12:46

Le start permet de faire un affichage page par page... :)
C'est tout bon, pour toi? :)

@++

R@f

Commentaire de bj33 le 02/02/2006 14:22:42

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'<br />".$req_search.'<br />'.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);
?>

Commentaire de bj33 le 02/02/2006 18:24:36

< 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é.

Commentaire de coockiesch le 03/02/2006 15:46:35

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

Commentaire de SuperRaplapla le 16/02/2006 10:10:44

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 + !

Commentaire de SuperRaplapla le 16/02/2006 10:31:25

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 ?

Commentaire de coockiesch le 16/02/2006 20:00:37

Oui, pourquoi pas! :)

@++

R@f

Commentaire de SuperRaplapla le 16/02/2006 20:36:27

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+

Commentaire de coockiesch le 17/02/2006 07:12:30

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

Commentaire de SuperRaplapla le 19/02/2006 00:09:37

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 ???

Commentaire de coockiesch le 20/02/2006 08:53:21

Je regarde ca et te tiens au courant... :)

@++

R@f

Commentaire de SuperRaplapla le 20/02/2006 09:05:01

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 !
++

Commentaire de Epoc22 le 26/09/2006 16:59:34

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

<Un système complètement sûr est une impossibilité virtuelle>

Commentaire de coockiesch le 26/09/2006 18:33:59

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

Commentaire de Epoc22 le 27/09/2006 09:04:25

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.
@+

Commentaire de wals69 le 13/07/2007 17:06:08

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

Commentaire de coockiesch le 16/07/2007 08:10: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

Commentaire de wals69 le 16/07/2007 11:17:26

merci beaucoup coockiesch
ca marche nikel
et le temps de reponse est super rapide
merci.

Commentaire de wals69 le 25/07/2007 10:04:53

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

Commentaire de coockiesch le 25/07/2007 17:55:13

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

Commentaire de sebastien247 le 01/09/2007 14:41:31

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

Commentaire de coockiesch le 01/09/2007 14:46:43

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

Commentaire de cedric_g le 20/11/2007 12:03:12

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!

Commentaire de coockiesch le 20/11/2007 20:11:59

Salut!
  Essaie peut-être de remplacer:
$search = $_POST['search'];

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

@++

R@f

Commentaire de cedric_g le 21/11/2007 10:17:38

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!

Commentaire de coockiesch le 22/11/2007 08:03:21

Ah!
Alors ca déclenchait une erreur et pas une absence de résultats... :-D

Content que ca soit résolu!

@++

R@f

Commentaire de Lytaspen le 02/12/2007 22:00:10 10/10

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

Commentaire de coockiesch le 03/12/2007 21:11:16

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

Commentaire de Lytaspen le 04/12/2007 12:50:01

Bonjour,
Merci pour votre réponse, je vais m'y mettre tout de suite.
Cordialement

Commentaire de Mement le 13/02/2008 19:47:51 10/10

Salutations,

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

Félicitations !

Commentaire de coockiesch le 14/02/2008 09:12:51

Merci, ca fait tjs plaisir! :-)

Raf

Commentaire de keogus le 15/05/2008 15:30:20 9/10

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!

Commentaire de coockiesch le 15/05/2008 18:15:55

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

Commentaire de lepetitcod le 29/05/2008 17:33:56 10/10

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>
<body bgcolor="#e6ecff">
<h1><center><u><big><font face="monotype corsiva" color="#6078bf">
Résultats de la recherche</font></big></u></center></h1>
<br>
<?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><b><font color = '#809fff' size='5'>Veuillez remplir au moins un champ!!</font></b></center>";}
elseif($envoyer=='Recherche ')
{

echo'<u><big><font color = "#6078bf"></font></big></u> ' ;
echo'<br>';
echo'<br>';
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 !<br>'.$sql.'<br>'.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><b><font color = '#809fff' size='5'>Aucun enregistement retourné ...</font></b></center><br><br>";
}
else{
//affichage des données
echo'<table  width=100% body bgcolor="809fff">';
echo'<tr>';
echo'<td><b><center>zone</center></b></td>
<td><b><center>spot</center></b></td>
<td><b><center>niveau</center></b></td><td><b><center>type de session</center></b></td><td><b><center>Numeros</center></b></td><td><b><center>Détails</center></b></td></tr>';

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.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'<tr>';
echo'<td body bgcolor="#bfcfff"><center>'.$data['zone_fr'].'</td></center>
<td body bgcolor="#bfcfff"><center>'.$data['spot'].'</td></center>
<td body bgcolor="#bfcfff"><center>'.$data['niveau'].'</td></center><td body bgcolor="#bfcfff"><center>'.$data['sess_type'].'</td></center><td body bgcolor="#bfcfff"><center>'.$data['ID_spot'].'</td></center>';
echo'<td body bgcolor="#bfcfff">';
echo" <center><a href=\"fichespot.php?data=". $ID_spot ."\"><font color ='#6078bf'><b><u>Cilquez ici</a></u></b></font></center>";

echo'</td></tr>';
}}
echo'</table>';
echo'<br>';
echo'<br>';
}





?>
<br><br>

</body>
</html>

Commentaire de lanner le 15/03/2009 12:30:04 10/10

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

Commentaire de jeuxfree le 16/06/2009 15:38:06

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

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,106 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales