Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOTEUR DE RECHERCHE DANS BDD


Information sur la source

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 : 10 953

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Commentaires et avis

signaler à un administrateur
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 . '\'';

signaler à un administrateur
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

signaler à un administrateur
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 :)

signaler à un administrateur
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

signaler à un administrateur
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 :)
++

signaler à un administrateur
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

signaler à un administrateur
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';

++

signaler à un administrateur
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]

++

signaler à un administrateur
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 !

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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 !

signaler à un administrateur
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

signaler à un administrateur
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...

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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; ??

signaler à un administrateur
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; ??

signaler à un administrateur
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


signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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;
}

signaler à un administrateur
Commentaire de joebuz le 01/02/2006 19:20:26

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

signaler à un administrateur
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

signaler à un administrateur
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 );

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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 ??

signaler à un administrateur
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é !!

signaler à un administrateur
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 />";
}

signaler à un administrateur
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

signaler à un administrateur
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);
?>

signaler à un administrateur
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é.

signaler à un administrateur
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

signaler à un administrateur
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 + !

signaler à un administrateur
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 ?

signaler à un administrateur
Commentaire de coockiesch le 16/02/2006 20:00:37

Oui, pourquoi pas! :)

@++

R@f

signaler à un administrateur
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+

signaler à un administrateur
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

signaler à un administrateur
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 ???

signaler à un administrateur
Commentaire de coockiesch le 20/02/2006 08:53:21

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

@++

R@f

signaler à un administrateur
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 !
++

signaler à un administrateur
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>

signaler à un administrateur
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

signaler à un administrateur
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.
@+

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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!

signaler à un administrateur
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

signaler à un administrateur
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!

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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 !

signaler à un administrateur
Commentaire de coockiesch le 14/02/2008 09:12:51

Merci, ca fait tjs plaisir! :-)

Raf

signaler à un administrateur
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!

signaler à un administrateur
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

signaler à un administrateur
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>

signaler à un administrateur
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

signaler à un administrateur
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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.