begin process at 2012 05 27 19:23:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > MOTEUR DE RECHERCHE DANS BDD II

MOTEUR DE RECHERCHE DANS BDD II


 Information sur la source

Note :
9,4 / 10 - par 10 personnes
9,40 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Classé sous :recherche, basededonnées, search Niveau :Débutant Date de création :25/07/2006 Date de mise à jour :26/07/2006 08:24:22 Vu :11 047

Auteur : coockiesch

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

 Description

Voilà, une petite classe permettant de générer une requête de recherche pour une bdd.
J'ai déjà fait un code similaire ; la raison pour laquelle je ne l'ai pas remplacé par celui-ci est que l'autre est une simple fonction, qui s'utilise peut-être plus facilement!

Celle-ci crée une requête plus efficace pour la recherche!

Source

  • /* Formulaire de recherche */
  • <form action="index.php" method="post">
  • <input type="text" name="search_text" size="100" style="font-size: 12px;" value=""><br><br>
  • <input type="radio" name="search_option" value="all" style="border: none; font-size: 12px;" checked>Rechercher tous les mots<br>
  • <input type="radio" name="search_option" value="one" style="border: none; font-size: 12px;">Rechercher un de ces mots<br>
  • <input type="radio" name="search_option" value="sentence" style="border: none; font-size: 12px;">Rechercher l'expression exacte
  • <br><br>
  • <input type="submit" value="Rechercher" name="submit" style="font-size: 12px; position: relative; left: 20px;">
  • </form>
  • /* Classe */
  • <?php
  • class dbSearch
  • {
  • // mots et expressions à chercher
  • private $words;
  • // séparateur
  • private $sep;
  • // option de recherche
  • private $option;
  • // nombre de mots
  • private $count_words;
  • // clause where
  • private $query_where = '';
  • /*
  • __construct()
  • Paramètres:
  • - $search_option: option choisie
  • - $search_text: texte de recherche entré
  • Retour:
  • void
  • */
  • public function __construct( $search_option, $search_text )
  • {
  • $this->query_prepared = 1;
  • // option de recherche
  • $this->option = $search_option;
  • // recherche en ET
  • if( $this->option == 'all' )
  • {
  • $this->sep = ' AND ';
  • $this->option = 1;
  • $this->words = explode( ' ', addslashes( $search_text ) );
  • $this->count_words = count( $this->words );
  • }
  • // recherche en OU
  • else if( $this->option == 'one' )
  • {
  • $this->sep = ' OR ';
  • $this->option = 2;
  • $this->words = explode( ' ', addslashes( $search_text ) );
  • $this->count_words = count( $this->words );
  • }
  • // phrase exacte
  • else
  • {
  • $this->option = 0;
  • $this->words[0] = addslashes( $search_text );
  • }
  • }
  • /*
  • mkQuery()
  • Crée la requête MySQL
  • Paramètres:
  • - $table ( string ): table à utiliser
  • - $select ( string ): les champs que l'on récupère
  • - $champs ( string si 1 champ, array si plusieurs ): champs dans lesquels s'effectue la recherche
  • - $order ( string ): critère de classement ; pas de classement si vide
  • - $sens ( string: asc ou desc ): sens du classement
  • - $limit_start ( entier ): pour le LIMIT
  • - $limit_nb ( entier ): pour le LIMIT ; si 0, pas de clause LIMIT
  • Retour:
  • void
  • */
  • public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb )
  • {
  • $this->query_where = '';
  • if( !is_array( $champs ) )
  • $champs = array( $champs );
  • $count_champs = count( $champs );
  • // si recherche en ET ou OU
  • if( $this->option )
  • {
  • for( $i = 0; $i < $this->count_words; $i++ ) // boucle sur les mots
  • {
  • // si pas première itération
  • if( $i )
  • $this->query_where .= $this->sep;
  • $this->query_where .= '( ';
  • for( $j = 0; $j < $count_champs; $j++ ) // boucle sur les champs
  • {
  • if( $j )
  • $this->query_where .= ' OR ';
  • $this->query_where .= $champs[ $j ] . ' LIKE \'%' . $this->words[ $i ] . '%\'';
  • } // for( $j = 0; $j < $this->count_words; $j++ ) // boucle sur les champs
  • $this->query_where .= ' )';
  • } // for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les mots
  • }
  • else // recherche phrase exacte
  • {
  • for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les champs
  • {
  • if( $i )
  • $this->query_where .= ' OR ';
  • $this->query_where .= $champs[$i] . ' LIKE \'%' . $this->words[0] . '%\' ';
  • } // for( $i = 0; $j < $count_champs; $i++ ) // boucle sur les champs
  • } // else // recherche phrase exacte
  • // construction de la requête finale
  • $sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where );
  • if( !empty( $order ) )
  • $sql['select'] .= ' ORDER BY ' . $order . ' ' . $sens;
  • $this->query_where = $sql['select'];
  • if( $limit_nb )
  • $sql['select'] .= ' LIMIT ' . $limit_start . ', ' . $limit_nb;
  • return $sql;
  • }
  • /*
  • getWhere()
  • Récupération de la clause where
  • Paramètres:
  • void
  • Retour:
  • string
  • */
  • public function getQuery()
  • {
  • return $this->query_where;
  • }
  • }
  • ?>
/* Formulaire de recherche */
<form action="index.php" method="post">
<input type="text" name="search_text" size="100" style="font-size: 12px;" value=""><br><br>
<input type="radio" name="search_option" value="all" style="border: none; font-size: 12px;" checked>Rechercher tous les mots<br>
<input type="radio" name="search_option" value="one" style="border: none; font-size: 12px;">Rechercher un de ces mots<br>
<input type="radio" name="search_option" value="sentence" style="border: none; font-size: 12px;">Rechercher l'expression exacte
		
<br><br>
<input type="submit" value="Rechercher" name="submit" style="font-size: 12px; position: relative; left: 20px;">
</form>

/* Classe */
<?php
class dbSearch
{
	// mots et expressions à chercher
	private $words;
	
	// séparateur
	private $sep;
	
	// option de recherche
	private $option;
	
	// nombre de mots
	private $count_words;
	
	// clause where
	private $query_where = '';
	
	/*
			__construct()
			Paramètres:
			  - $search_option: option choisie
				- $search_text: texte de recherche entré
			Retour:
				void
	*/
	public function __construct( $search_option, $search_text )
	{
		$this->query_prepared = 1;
		
		// option de recherche
		$this->option = $search_option;
		
		// recherche en ET
		if( $this->option  == 'all' )
		{
			$this->sep = ' AND ';
			$this->option = 1;
			$this->words = explode( ' ', addslashes( $search_text ) );
			$this->count_words = count( $this->words );
		}
		// recherche en OU
		else if( $this->option  == 'one' )
		{
			$this->sep = ' OR ';
			$this->option = 2;
			$this->words = explode( ' ', addslashes( $search_text ) );
			$this->count_words = count( $this->words );
		}
		// phrase exacte
		else
		{
			$this->option = 0;
			$this->words[0] = addslashes( $search_text );
		}
	}
	
	/*
			mkQuery()
			Crée la requête MySQL
			Paramètres:
			  - $table ( string ): table à utiliser 
				- $select ( string ): les champs que l'on récupère
				- $champs ( string si 1 champ, array si plusieurs ): champs dans lesquels s'effectue la recherche 
				- $order ( string ): critère de classement ; pas de classement si vide
				- $sens ( string: asc ou desc ): sens du classement 
				- $limit_start ( entier ): pour le LIMIT
				- $limit_nb ( entier ): pour le LIMIT ; si 0, pas de clause LIMIT
			Retour:
				void
	*/
	public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb )
	{
		$this->query_where = '';
		
		if( !is_array( $champs ) )
			$champs = array( $champs );
			
		$count_champs = count( $champs );
		
		// si recherche en ET ou OU
		if( $this->option )
		{
			for( $i = 0; $i < $this->count_words; $i++ ) // boucle sur les mots
			{
				// si pas première itération
				if( $i )
					$this->query_where .= $this->sep;
					
				$this->query_where .= '( ';
				
				for( $j = 0; $j < $count_champs; $j++ ) // boucle sur les champs
				{
					if( $j )
						$this->query_where .= ' OR ';
						
					$this->query_where .= $champs[ $j ] . ' LIKE \'%' . $this->words[ $i ] . '%\'';
					
				} // for( $j = 0; $j < $this->count_words; $j++ ) // boucle sur les champs
				
				$this->query_where .= ' )';
			} // for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les mots
		}
		else // recherche phrase exacte
		{
			for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les champs
			{
				if( $i )
					$this->query_where .= ' OR ';
					
				$this->query_where .= $champs[$i] . ' LIKE \'%' . $this->words[0] . '%\' ';
			} // for( $i = 0; $j < $count_champs; $i++ ) // boucle sur les champs
		} // else // recherche phrase exacte
		
		// construction de la requête finale
		$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where );
		
		if( !empty( $order ) )
			$sql['select'] .= ' ORDER BY ' . $order . ' ' . $sens;
		$this->query_where = $sql['select'];
		if( $limit_nb )
			$sql['select'] .= ' LIMIT ' . $limit_start . ', ' . $limit_nb;
		
		return $sql;
	}
	
	/*
			getWhere()
			Récupération de la clause where
			Paramètres:
			  void
			Retour:
				string
	*/
	public function getQuery()
	{
		return $this->query_where;
	}
}
?>

 Conclusion

Exemple de fonctionnement:
<?php
// création d'objet
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );

/*
ici, recherche dans la table news
on récupère le champ id
la recherche se fait dans les champs titre et texte
classement selon id, desc
limit 0, 10
*/
$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'texte' ), 'id', 'desc', 0, 10 )
/*
$sql['select'] // requête de select
$sql['count'] // requête de comptage
*/
?>

La fonction getQuery permet de récupérer la requête MySQL mais sans le LIMIT, utile si vous voulez faire un affichage page par page et que la recherche ne change pas.

Voilà, j'attends vos commentaires


 Historique

25 juillet 2006 18:30:02 :
Petit oubli de ma part...
25 juillet 2006 20:13:02 :
Mise à jour pour tenir compte du commentaire de garfield90, merci à lui!
26 juillet 2006 08:24:22 :
Tite correction :)

 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
PRETTY DATE
Source avec Zip Source avec une capture FORMULAIRE (NEWS, LIVRE D'OR, ...)

 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

 Sources en rapport avec celle ci

INSPECTEUR DE PAGES (VÉRIFIEZ SI DES SITES AFFICHENT UN TEXT... par pablo836
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC ... par cod57
RECHERCHE PAR MOT CLÉ DANS TOUS LES CHAMPS DE TOUTES LES TAB... par gabay
Source avec Zip RECHERCHE DE MOTIF DANS UNE IMAGE par ParseError

Commentaires et avis

Commentaire de garfield90 le 25/07/2006 18:34:27

Bonjour,

un petit truc me chagrine avec ta classe, c'est que tu utilises une récupération d'information via $_POST.

pourquoi ne pas les passer en parametre à ton constucteur :

public function  __construct($word, $option){
   $this->word = $word;
   $this->option = $option;
}

et lors de l'appel de ta classe faire :

$oSearch = new dbSearch($_POST['word'], $_POST['option']);

les termes utilises doivent etres incorrect car la flemme de faire du scrolling.
je passe le fait qu'il faille vérifier les variables $_POST ;

fais tu attention au caractères spéciaux type % _, tu devrais utilisé la fonction mysql_real_escape_string et dérivé

Commentaire de coockiesch le 25/07/2006 20:09:55

Salut!
Je passe par addslashes et non par mysql_real_escape_string car je n'ouvre pas de connection MySQL...

Je vais mettre ça à jour de suite, merci!

@++

R@f

Commentaire de kankrelune le 25/07/2006 21:10:24

Pas besoin de connection active pour mysql_real_escape_string()... .. . ;o)

@ tchaOo°

Commentaire de coockiesch le 25/07/2006 22:23:07

Ben, je viens de tester et....
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\www\sites\aide\index.php on line 134

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\www\sites\aide\index.php on line 134

Comment on change ça?

@++

R@f

Commentaire de FhX le 26/07/2006 09:30:56

"Pas besoin de connection active pour mysql_real_escape_string()..."

Sisisi, j'en ai fais les frais moi aussi :)
C'est pour ca que faut s'arranger d'ouvrir la connection au moment de faire l'escape_string() :)

Commentaire de Optitech le 26/07/2006 09:54:16

Le plus simple pour ne pas avoir ce petit problème c'est d'ouvrir la connection mysql en début de fichier et de la fermer en fin de fichier !

Moi ce que j'aime bien dans ta source c'est les commentaires !

Beau boullot

Commentaire de coockiesch le 26/07/2006 11:45:45

Merci, :)
Petite question: addslashes suffit ou pas???

@++

R@f

Commentaire de malalam le 26/07/2006 12:53:17 administrateur CS

Pas mal en tous cas, le code :-)

addslashes () suffit...mais ne suit pas les évolutions de mysql. mysql_real_escape_string (), elle, les suit. Du coup, on peut un jour se retrouver avec un addslashes () qui ne suffit plus.
En tout état de cause, mysql_real... sera plus performant et plus sûr car dédié à mysql.

Commentaire de coockiesch le 26/07/2006 13:03:50

Oki, merci, :)
Mais vais laisser comme ça, que chacun ait le choix de se connecter ou pas avant... :)

@++

R@f

Commentaire de FhX le 26/07/2006 23:34:29

"Le plus simple pour ne pas avoir ce petit problème c'est d'ouvrir la connection mysql en début de fichier et de la fermer en fin de fichier !"
Si dans ta page, tu n'as pas besoin de SQL, alors c'est une connection qui ne sert à rien.
Gain ? Du temps et de la mémoire.

Voila pourquoi on n'ouvre sa connection SQL que quand on en a besoin.

Commentaire de dom_ponge le 04/08/2006 03:56:55

0/10
Dsl mais je n'ai pas réussi à le faire marché.
Il y a que des bugs.
Le premier bug étais du à cause des déclarations de variable.... Et il me semble que les enlevé ce n'est pas grave.Je les aient mi en commentaire et une autre érreur est survenu et venais d'une fonction.

Si quelqu'un peut m'aidé.

Commentaire de dom_ponge le 04/08/2006 04:44:25

Oops dsl j'ai mal fait.... c'est à cause que le code est fait pour PHP5 et je n'ai que PHP4...

Commentaire de malalam le 04/08/2006 08:53:43 administrateur CS

J'ai supprimé ta note, DOM_PONGE :-) Le mal est réparé ;-)

Commentaire de coockiesch le 04/08/2006 10:05:15

Malalam > Merci
DOM_PONGE > Tu peux tjs demander des infos, si ça bug, :)

@++

R@f

Commentaire de dom_ponge le 09/08/2006 03:06:20

Merci Malalam.
Et là je met 9/10.(Le code pourrai faire la recherche lui même et ne pas donné que la requète).

Commentaire de BTAJV le 08/09/2006 11:17:41

Salut
Moi je voulai juste savoir classe cherchai dans un champ de la BDD ou S qu'il cherche un chanp ????

Sinon se code a l'air tres tres interesen

Commentaire de coockiesch le 08/09/2006 12:41:04

Salut!
  Il cherche dans les champs de la bdd... :)

@++

R@f

Commentaire de BTAJV le 08/09/2006 12:43:34

Ah alors la ton code m'interesse enormeman et si sa fonctionne super bien comme tlm le dit alors c génial.
Je te remerci d'avance.

Cortana

Commentaire de BTAJV le 08/09/2006 12:44:59

Excuse moi j'abuse peu etre mais tu aurai pas un endroit ou je pourai le voir en fonctionement se script juste pour voir commen les resultat saffiche

Commentaire de coockiesch le 08/09/2006 14:37:09

Salut!
Le résultat ne s'affiche pas: il crée la requête de recherche... Libre à toi ensuite d'afficher les résultats comme tu le veux! ;)

@++

R@f

Commentaire de BTAJV le 08/09/2006 14:52:14

C a dire "il crée la requête de recherche" cette requette contien le resultat de la recherche ??? en gros si j'ai bien compri

Commentaire de coockiesch le 08/09/2006 15:21:24

Non, cette requête est à passer en paramètre à mysql_query... Une requête est... une requête! :-D après son exécution, si tout se passe bien, tu auras les résultats, que tu pourras afficher! :)

@++

R@f

Commentaire de BTAJV le 08/09/2006 15:55:02

JE doit etre un peu nul car tlm te dit que c bien et moi je ne comprend pas commen elle fonctionne je ne dit pas quelle est nul mais bon je n'arrive pas a la faire fonctionner donc si tu pouvai me donner un coup de main voila mon adresse MSN :
BTajv@hotmail.com

Merci d'avance CORTANA

Commentaire de coockiesch le 08/09/2006 16:16:38

Salut!
  Dsl, mais je manque de temps ces jours pour t'expliquer tout ça... Je te proposer de regarder pour un tuto MySQL... Ensuite, tu sauras effectuer des requêtes et afficher les résultats!

@++

R@f

Commentaire de kankrelune le 08/09/2006 16:57:15

BTAJV...

Pour effectuer une recherche en base de données il faut construire une requete (en l'occurence de recherche)... ensuite cette requete doit être executée puis le résultat obtenu doit être traité pour l'affichage... donc trois étape... .. .

-1- Création de la requete en fonction des mots cherchés (ce script)
-2- Exectution de la requete/récupération du résultat ($result = mysql_query('TA REQUETE');
-3- traitement en vue de l'affichage (via une boucle)

Voili voilou... .. .

@ tchaOo°

Commentaire de BTAJV le 24/09/2006 11:47:00

Salut je sais que j'abuse peu etre mais qui pourai m'expliquer commen crée une requette pour utilisé se script car j'essaye depuis quelque semaine mais j'y arrive pas

merci d'avance

Commentaire de kankrelune le 24/09/2006 14:09:41

Mais c'est le but de cette source de créer la requete... .. !

@ tchaOo°

Commentaire de BTAJV le 24/09/2006 15:05:16

Bon oki je vai perceverer mais connai tu un site ou ya des tuto de requette car je ne sais pas en faire

Commentaire de coockiesch le 25/09/2006 08:43:02

Salut!
Tu peux regarder ça: http://www.phpfrance.com/tutoriaux/index.php/2005/03/08/19-interfacage-de-mysql-avec-php
Ou bien:
www.phpdebutant.org

Sinon tu peux rechercher sous google: tutorial mysql php

@++

R@f

Commentaire de iomega le 25/09/2006 09:57:29

Bonjour à tous je trouve ce code sympas mais je n'arrive pas à afficher le résultat pourriez-vous m'aider ou me donner un coup de main ?

Commentaire de coockiesch le 25/09/2006 10:13:40

Salut!
Ca dépend de ce que tu récupères... Tu peux nous dire qu'est ce que tu recherches (texte, images, ...) et quels sont les champs que tu récupères? :)

@++

R@f

Commentaire de iomega le 25/09/2006 10:26:49

Je veux afficher le résultat de la requête tout simplement mais je ne sais pas comment le faire avec cette classe (c'est du texte)
merci encore de ton aide
as-tu un exemple ?

Commentaire de coockiesch le 25/09/2006 10:58:55

Si je prend le code donné en exemple:
// création d'objet
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );

$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'texte' ), 'id', 'desc', 0, 10 )

// exécution de la requête
$result = mysql_query( $sql['select] )
  or die( 'Erreur MySQL' ); // si erreur

while( $row = mysql_fetch_assoc( $result ) )
{
  // affichage normal ici (titre et texte récupérés), genre:
  echo 'Titre: ' , stripslashes( $row['titre'] ) , '<br />' , stripslashes( $row['texte'] ) , '<br /><hr />';
}

@++

R@f

Commentaire de iomega le 25/09/2006 11:11:30

Re salut et merci beaucoup cela marche j'ai compris
Si je peux abuser si je veux mettre un système de pagination à ce code as-tu une idée ca serait vraiment sympas de ta part

Commentaire de coockiesch le 25/09/2006 12:20:12

Yop!
J'ai fait ça: http://www.phpcs.com/codes/NUMEROS-PAGE_24067.aspx

@++

R@f

Commentaire de iomega le 25/09/2006 14:04:11

Super merci beaucoup je vais l'integrer de suite dans le code !!
J'ai une autre question concernant le script si tu veux mettre d'autre critères que 'search_text' par exemple une liste déroulante ou dois-je l'intégrer peut-on avec ton script ?
Merci encore A+

Commentaire de coockiesch le 25/09/2006 18:10:00

$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where );

Après: $this->query_where, tu peux ajouter qqch, par exemple:
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where . ' AND champ=\'val\'', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where . ' AND champ=\'val\'' );

@++

R@f

Commentaire de iomega le 26/09/2006 08:37:28

Salut coockiesh,
Merci encore de ton aide je suis vraiment désolé de t'embêter mais ton code me plaît beaucoup et je voudrai vraiment le mettre en place !!!
j'ai fait comme tu m'as dit mais j'ai une erreur "Notice: Undefined variable: date "

date et mon champ input ou la personne peut rentrer une date ou pas et debut_date et mon champ dans la base de données
voici ce que j'ai fait:

$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where  . ' AND date_debut='.$date.'', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where . ' AND date_debut='.$date.'' );
Merci encore de ton aide
A+

Commentaire de iomega le 26/09/2006 08:45:58

Re-hello coockies
J'ai oublier de te dire que je l'ai aussi mis en dur (en prenant comme exemple de date 2006-09-12 et j'ai une "Erreur MySQL"

Voici mon code en dur
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where  . ' AND date-debut=\'2006-09-12\'', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where . '  AND date-debut=\'2006-09-12\'' );

A+

Commentaire de iomega le 26/09/2006 09:12:35

Désolé c'est encore moi laisse tomber mon dernier message la date en dur cela marche. Par contre lorsque je remplace la date en dur par une variable j'ai une erreur "Notice: Undefined variable: date "

Commentaire de coockiesch le 26/09/2006 09:22:06

Salut!
Oui, en fait, si tu utilises une variable date définie ailleurs dans ton script, elle n'est pas connue de la fonction...

Il te faut donc lui la donner, tu peux, par exemple, modifier:
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb )
En
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb, $date )

Et quand tu fais:
$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'texte' ), 'id', 'desc', 0, 10 )
Tu ajoutes date:
$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'texte' ), 'id', 'desc', 0, 10, $date )

Voilà! (et pas de pb, suis là pr ça, :) )

@++

R@f

Commentaire de iomega le 26/09/2006 09:33:01

Hello merci mais j'ai toujour une erreur j'ai fais comme tu dis

voici le script en entier

function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb,$dates  )
    {
        $this->query_where = '';
        
        if( !is_array( $champs ) )
            $champs = array( $champs );
            
        $count_champs = count( $champs );
        
        // si recherche en ET ou OU
        if( $this->option )
        {
            for( $i = 0; $i < $this->count_words; $i++ ) // boucle sur les mots
            {
                // si pas première itération
                if( $i )
                    $this->query_where .= $this->sep;
                    
                $this->query_where .= '( ';
                
                for( $j = 0; $j < $count_champs; $j++ ) // boucle sur les champs
                {
                    if( $j )
                        $this->query_where .= ' OR ';
                        
                    $this->query_where .= $champs[ $j ] . ' LIKE \'%' . $this->words[ $i ] . '%\'';
                    
                } // for( $j = 0; $j < $this->count_words; $j++ ) // boucle sur les champs
                
                $this->query_where .= ' )';
            } // for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les mots
        }
        else // recherche phrase exacte
        {
            for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les champs
            {
                if( $i )
                    $this->query_where .= ' OR ';
                    
                $this->query_where .= $champs[$i] . ' LIKE \'%' . $this->words[0] . '%\' ';
            } // for( $i = 0; $j < $count_champs; $i++ ) // boucle sur les champs
        } // else // recherche phrase exacte
        
        // construction de la requête finale
      
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where  . ' AND date_debut='.dates.'', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where . '  AND date_debut='.dates.'' );
      
        if( !empty( $order ) )
            $sql['select'] .= ' ORDER BY ' . $order . ' ' . $sens;
        $this->query_where = $sql['select'];
        if( $limit_nb )
            $sql['select'] .= ' LIMIT ' . $limit_start . ', ' . $limit_nb;
        
        return $sql;
    }
    
    /*
            getWhere()
            Récupération de la clause where
            Paramètres:
             void
            Retour:
                string
    */
    function getQuery()
    {
        return $this->query_where;
    }
}
?>

<?php



// Connexion à la base de données
require_once($dirroot."/mysql.inc.php");
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );

$sql = $s->mkQuery( 'event', 'id,title,what,date_debut', array( 'title', 'what', 'whereag','dates' ), 'id', 'desc', 0, 10,$dates );




// exécution de la requête
$result = mysql_query( $sql['select'] )
  or die( 'Erreur MySQL' ); // si erreur

while( $row = mysql_fetch_assoc( $result ) )
{

  echo 'Titre: ' , stripslashes( $row['title'] ) , '<br />' , stripslashes( $row['what'] ) , '<br /><hr />';
}

j'ai ceci comme messge d'erreur
Notice: Undefined variable: dates in c:\program files\easyphp1-8\www\bmu\commun\agenda\rechercher.php on line 269

Notice: Use of undefined constant dates - assumed 'dates' in c:\program files\easyphp1-8\www\bmu\commun\agenda\rechercher.php on line 235

decidement je suis chiant

Commentaire de coockiesch le 26/09/2006 09:39:28

Deux trucs:
$sql = $s->mkQuery( 'event', 'id,title,what,date_debut', array( 'title', 'what', 'whereag','dates' ), 'id', 'desc', 0, 10, $dates );
// à ce moment là, ton $dates, t'es sûr qu'il es bien défini? Pcq ca, je peux rien y faire, :-D
Essaie:
echo $dates;

Ensuite:
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where  . ' AND date_debut='.dates.'', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where . '  AND date_debut='.dates.'' );
- le '' final ne sert à rien (inutile d'ajouter rien à une chaîne)
- je suis pas sûr mais faut peut-être entourer la date de '' -->
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where  . ' AND date_debut='.dates.'', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where . '  AND date_debut=\''.dates.'\'' );

@++

R@f

Commentaire de iomega le 26/09/2006 09:51:05

Hello j'ai modifier
$sql = $s->mkQuery( 'event', 'id,title,what,date_debut', array( 'title', 'what', 'whereag','dates' ), 'id', 'desc', 0, 10, $dates );
par et je crois que c'est bon
$sql = $s->mkQuery( 'event', 'id,title,what,date_debut', array( 'title', 'what', 'whereag','dates' ), 'id', 'desc', 0, 10, $_POST['dates'] );

par contre je crois que c'est à ce niveau qu'il y a un problème
car maintenant j'ai un message d'erreur ERREUR MYSQL

$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where  . ' AND date_debut='.dates.'', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where . '  AND date_debut=\''.dates.'\'' );

comment peut-on afficher la requete ?
j'ai essayer ceci $s->getQuery; mais cela n'affiche rien !!

as-tu une autre idées ?

Commentaire de coockiesch le 26/09/2006 10:06:32

- je ne mettrai pas $_POST['dates'] directement en paramètres pcq si l'utilisateur fait une petite erreur, ca va foirer... Tu devrais vérifier cette valeur!

Après le
$sql = $s->mkQuery( ... );
echo $sql['select'] . '<br /><br />' . mysql_error();
Et tu peux nous dire ce que ca affiche!

@++

R@f

Commentaire de iomega le 26/09/2006 10:43:57

Ok voila j'ai fait quelques tests si je remplace $_POST['dates'] par $dates il m'affiche à nouveau une erreur de variable pas définie
cela affiche
si je fais un echo cela m'affiche ceci mais on dirait qu'il ne pas en compte le fait que j'ai saisi une date

SELECT id,title,what FROM event WHERE ( title LIKE '%%' OR what LIKE '%%' OR whereag LIKE '%%' ) AND date_debut='' ORDER BY id desc LIMIT 0, 10

Commentaire de kankrelune le 26/09/2006 11:12:13

Il est normal si tu ne définis nul part $date que php t'affiche que la variable $date est indéfinie... il va pas l'inventer... .. .

@ tchaOo°

Commentaire de iomega le 26/09/2006 11:51:09

Mais oui elle est définie

Commentaire de coockiesch le 26/09/2006 12:13:00

Ben non.... Ou alors elle est définie à un endroit auquel le script n'a pas accès!

@++

R@f

Commentaire de iomega le 26/09/2006 14:18:05

Vous aviez raison elle est définie mais auquel le script n'avait pas accès je suis désolé !!! cela marche !
J'ai une dernière question je voudrai intégrer ton script de pagination mais je ne sais pas à quel endroit dans ton script de pagination mettre ce bout de code qui se trouve donc dans le code de ci-dessus.
Merci encore de ta patience

while( $row = mysql_fetch_assoc( $result ) )
{
  // affichage normal ici (titre et texte récupérés), genre:
  echo 'Titre: ' , stripslashes( $row['title'] ) , '<br />' , stripslashes( $row['what'] ) , '<br /><hr />';
}

Commentaire de coockiesch le 26/09/2006 18:36:18

Je ne comprends pas: c'est le code de pagination qui va en fin de script... Et pas l'inverse:

- inclusion du fichier de la classe de recherche
- récupération infos pagination
- création de la requête
- exécution requête
- affichage
- pagination

@++

R@f

Commentaire de iomega le 27/09/2006 10:41:40

ok super merci beaucoup

Commentaire de R3dDragon le 22/11/2006 13:48:52

Moi, j'ai aussi un problème...
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\program files\easyphp1-8\www\search\index.php on line 32

Commentaire de kankrelune le 22/11/2006 14:41:53

Ton serveur tourne avec php4 le script est en php5... .. .

@ tchaOo°

Commentaire de Epoc22 le 24/01/2007 16:54:52

Yeah salut tout le monde,
coockiesch ta source est nickel c'est exactement ce que je cherchait merci ;-) Pas une seule erreur !
10/10
@++

Commentaire de kawther84 le 05/04/2007 11:45:55

salut,
j'ai testé votre cod , il me parrait trés intéressant, mais domage j'ai rien obtenue come résultat malgré que j'ai fais l'affichage comme suit:

$result = mysql_query( $sql['select'] )
  or die( 'Erreur MySQL' ); // si erreur

while( $row = mysql_fetch_assoc( $result ) )
{
     echo "test";
}
SVP pouvez vous m'aider.
Merci

Commentaire de coockiesch le 07/04/2007 18:48:26

Salut!
C'est que votre requête ne renvoie aucun résultat... Etes vous sûr que les champs dans lesquels vous effectuez la recherche contiennent bien les mtos recherchés?

@++

R@f

Commentaire de Straw le 08/05/2007 11:48:28

Hello,

Excellente source, elle fonctionne "presque" parfaitement chez moi... La requete renvoie des résultats, la boucle passe bien, mais l'affichage de ses données ne fonctionne pas -_-'

En fait, l'ID s'affiche correctement, mais pas les autres champs ?? Pourtant les noms correspondent bien.. Voici le code d'affichage :

$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'contenu' ), 'id', 'desc', 0, 10 );
// exécution de la requête
$result = mysql_query( $sql['select'] )
  or die( 'Erreur MySQL' ); // si erreur

while( $row = mysql_fetch_assoc( $result ) )
{
$titre = stripslashes( $row['titre'] );
$contenu = stripslashes( $row['contenu'] );
$id = $row['id'];
  // affichage normal ici (titre et texte récupérés), genre:
  echo 'Titre: ' , $id  , $titre , '<br />' , $contenu , '<br /><hr />';
}


$id s'affiche correctement, mais $titre et $contenu ne s'affichent pas O_o !
titre et contenu sont en Type 'Text' et en interclassement 'Latin1_swedish_ci', je ne sais pas si cela influence l'affichage des résultats..

Merci pour votre aide,

Straw

Commentaire de amirouche17 le 10/05/2007 11:36:54

Hi M.coockiesch, Je pense que tu ne mérite pas  la note 9.75  mais tu mérite la note 10, car tout simplement,ça a super marché, c'est un code impéccable, merci infinnnnniment.

Commentaire de amirouche17 le 10/05/2007 11:47:17

Salut encore, j'ai trouvé des problemes  dans la pagination des résultats de la recherche, j'ai un code qui fait la pagination d'une façon stable avec une table prédéfint,et j'ai ce super code de coockiesch, mais j'arrive pas exploiter les deux codes"together".
j'attends l'accusé d'acceptation de ta part M.coockiesch dans ce volet, et puis je t'envoie le code de pagination.
voila mon adresse E-mail amirouche17@yahoo.fr
merci d'avance.

Commentaire de toufouk le 21/05/2007 15:42:18

RIEN A REDIRE 10/10.

Commentaire de toufouk le 22/05/2007 14:34:20

Bonjour,

voila tut d'abord je tenais a te remecier pour ce trés bon code qui mérite un bon 9/10.
Une question, j'aimerais rajouté dans ce code une autre clause dans le where à savoir un date between une_date and une_autre_date./

J'ai essayé de reprendre ce qui a été dit. merci de m'aider .

Commentaire de coockiesch le 22/05/2007 19:49:53

Yop!
Essaye de:

Modifier
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb )
En
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb, $query_sup = '' ) // $query_sup contiendra la clause supplémentaire

Et:
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where );
En
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE (' . $this->query_where . ') AND (' . $query_sup . ')', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE (' . $this->query_where . ') AND (' . $query_sup . ')' );

@++

R@f

Commentaire de toufouk le 23/05/2007 09:49:15

Re-Bonjour,

j'ai un petit probleme: j'ai bien rajouté ce que tu m'as dit au dessus coockiesch et j'ai mis :

'incident_date between $resultat[0] and NOW()
and application_external_id = $app'

Cependant j'ai cette erreur:
Parse error: syntax error, unexpected T_VARIABLE in F:\Intranet\Coralie_Dev\emilie\inc_multi.php on line 247

Est-ce que tu aurais une idée opur régler ce probleme.
Je te remercie d'avance.

Commentaire de toufouk le 23/05/2007 10:54:02

J'ai reussi a resoudre le probleme ci-dessu mais un autre probléme est survenue: lorsque j'affiche ma requete j'ai:

request_id FROM emilie_copie_incidents WHERE (( description LIKE '%log%' OR short_description LIKE '%log%' ) AND ( description LIKE '%file%' OR short_description LIKE '%file%' )) AND ( incident_date BETWEEN 2007-04-18 15:52:04 AND NOW() )Erreur MySQL

JE ne vois pas d'ou viens le probleme sachant que j'ai repris :

Yop!
Essaye de:

Modifier
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb )
En
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb, $query_sup = '' ) // $query_sup contiendra la clause supplémentaire

Et:
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where );
En
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE (' . $this->query_where . ') AND (' . $query_sup . ')', 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE (' . $this->query_where . ') AND (' . $query_sup . ')' );


Cordialement

Commentaire de coockiesch le 24/05/2007 19:27:02

Yop!
  Avec mysql_error( ) affiche l'erreur... T'es sûr que ca vient pas de ton between?

@++

R@f

Commentaire de Straw le 12/06/2007 18:28:35

J'ai un tout piti soucis au niveau du count..

J'aimerais juste pouvoir afficher le nombre de résultats obtenus : voici mon code :

$rs3 = mysql_query($sql['count']) or die(mysql_error());;
echo "<br>" . $rs3;

Et voici le résultat obtenu :

Resource id #11

Comment faut-il exécuter la requete pour récupérer le nombre de résultats obtenu alors?

Commentaire de coockiesch le 13/06/2007 19:14:36

Yop!
$row = mysql_fetch_row( $rs3 );
echo $row[0];

@++

R@f

Commentaire de Straw le 13/06/2007 19:33:27

Super merci de la rapidité de ta réponse ça fonctionne nikel!

@ plouche !

Straw

Commentaire de marc660 le 10/07/2007 11:50:54

Bonjour,

Pouvez vous arranger cette source car je ne comprend rien il y a plein * et puis je ne trouve pas ou entrer les paramètre de connexion MySql.

Quelqu’un pourrez t’il me redonner le code arranger pour les debutant.

Merci

Commentaire de _klesk le 15/07/2007 23:29:00

Bonjour,
D'abord ton code c'est exactement ce que je cherche, j'ai tester sur un server local sous php5 IMPECABLE.

Le probleme c'est que mon server distant lui est en php4 et comme dit plus haut bha ca marche pas (et je comfirme ^^)

quel sont les modifications (si modification possible il y a) pour le faire tourner sour php4 car c'est la seule source qui me convient pour ce que je veux;

merci a vous.

je met 9/10 car je peux pas le faire tourner ;)

Commentaire de _klesk le 16/07/2007 00:00:13

Bon en cherchant un peu, il me semble avoir trouver.

Que l'on me corrige si nécessaire, mais pour les test que j'ai fait ca fonctionne.

Pour la rendre compatible php4 il faut remplacer :

private par -> var.
public function par -> function
function __construct par -> function dbSearch (le nom de la classe)

Je ne suis pas doué avec les class mais grace a ces modifications la classe en compatible PHP4.

Donc 10/10 :D

@++

Commentaire de coockiesch le 16/07/2007 08:05:35

Oui, ca joue!
Merci pour tes commentaires, :)

@++

R@f

Commentaire de _klesk le 17/07/2007 00:01:25

Bon bien je propose une amérloration, mais c'est une demande, je n'y arrive pas.

J'aimerait supprimer les accents dans les mots clée car ma BDD n'en possède pas.

j'ai essayer
if( $this->option == 'all' )

{

$this->sep = ' AND ';

$this->option = 1;

$search_text = ereg_replace("[áåâäàã]","a",$search_text);
$search_text = ereg_replace("ç","c",$search_text);
$search_text = ereg_replace("[êéèë]","e",$search_text);
$search_text = ereg_replace("[íîïì]","i",$search_text);
$search_text = ereg_replace("[óôöòõ]","o",$search_text);
$search_text = ereg_replace("[ûüùú]","u",$search_text);
$search_text = ereg_replace("ñ","n",$search_text);
$search_text = ereg_replace("[ÿý]","y",$search_text);

$this->words = explode( ' ', addslashes( $search_text ) );

...

sans succès.

quelqu'un pour m'aider ?

Commentaire de coockiesch le 17/07/2007 18:19:29

Yop!
  Passes par des str_replace avec des arraym c'est bcp plus pratique... Par ex:
$text = str_replace( array( 'á', 'à' ), array( 'a', 'a' ), $text );

@++

R@f

Commentaire de acppca le 24/07/2007 13:06:26

Bonjour à tous,
voilà j'ai un probléme, il m'affiche en permanence une erreur...


voici le code php (recherche.php) :
<?php
class dbSearch
{
// mots et expressions à chercher
private $words;
// séparateur
private $sep;
// option de recherche
private $option;
// nombre de mots
private $count_words;
// clause where
private $query_where = '';
public function __construct( $search_option, $search_text )
{
$this->query_prepared = 1;
// option de recherche
$this->option = $search_option;
// recherche en ET
if( $this->option == 'all' )
{
$this->sep = ' AND ';
$this->option = 1;
$this->words = explode( ' ', addslashes( $search_text ) );
$this->count_words = count( $this->words );
}
// recherche en OU
else if( $this->option == 'one' )
{
$this->sep = ' OR ';
$this->option = 2;
$this->words = explode( ' ', addslashes( $search_text ) );
$this->count_words = count( $this->words );
}
// phrase exacte
else
{
$this->option = 0;
$this->words[0] = addslashes( $search_text );
}
}
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb )
{
$this->query_where = '';

if( !is_array( $champs ) )
$champs = array( $champs );
$count_champs = count( $champs );
// si recherche en ET ou OU
if( $this->option )
{
for( $i = 0; $i < $this->count_words; $i++ ) // boucle sur les mots
{
// si pas première itération
if( $i )
$this->query_where .= $this->sep;
$this->query_where .= '( ';
for( $j = 0; $j < $count_champs; $j++ ) // boucle sur les champs
{
if( $j )
$this->query_where .= ' OR ';
$this->query_where .= $champs[ $j ] . ' LIKE \'%' . $this->words[ $i ] . '%\'';
} // for( $j = 0; $j < $this->count_words; $j++ ) // boucle sur les champs
$this->query_where .= ' )';
} // for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les mots
}
else // recherche phrase exacte
{
for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les champs
{
if( $i )
$this->query_where .= ' OR ';
$this->query_where .= $champs[$i] . ' LIKE \'%' . $this->words[0] . '%\' ';
} // for( $i = 0; $j < $count_champs; $i++ ) // boucle sur les champs
} // else // recherche phrase exacte

// construction de la requête finale
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where );

if( !empty( $order ) )
$sql['select'] .= ' ORDER BY ' . $order . ' ' . $sens;
$this->query_where = $sql['select'];
if( $limit_nb )
$sql['select'] .= ' LIMIT ' . $limit_start . ', ' . $limit_nb;

return $sql;
}

public function getQuery()
{
return $this->query_where;
}
}
?>

<?php
include_once './mysql.inc';
connexion_DB('BASE_TEST');

$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );
$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'content' ), 'id', 'desc', 0, 10 )
$result = mysql_query($sql['select']); // si erreur
while( $row = mysql_fetch_assoc( $result ) )
{
  // affichage normal ici (titre et texte récupérés), genre:
  echo 'Titre: ' , stripslashes( $row['titre'] ) , '<br />' , stripslashes( $row['content'] ) , '<br /><hr />';
}
?>



VOilà, l'erreur :
Parse error: syntax error, unexpected T_VARIABLE in /home/chm2/www/recherche/recherche.php on line 148

or je ne vois rien de spécial sur cette ligne, ni ailleurs...

Commentaire de coockiesch le 24/07/2007 19:07:08

Yop!
  Indique nous quelle est la ligne 148 stp, :)

@++

R@f

Commentaire de acppca le 24/07/2007 21:02:31

voilà
j'ai réussis a corriger cette erreur ...
mais mnt le nombre de news s'affiche mais pas le contenue

voici le code d'affichage :


<?php
include_once './mysql.inc';
connexion_DB('BASE_TEST');


$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );
$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'content' ), 'id', 'desc', 0, 10 );
$result = mysql_query($sql['select']) ;// si erreur

while( $row = mysql_fetch_assoc( $result ) )
{
  // affichage normal ici (titre et texte récupérés), genre:
  echo 'Titre: ' , stripslashes( $row['titre'] ) , '<br />' , stripslashes( $row['content'] ) , '<br /><hr />';
}

?>

Commentaire de coockiesch le 24/07/2007 21:17:08

Yop!
  Le deuxième paramètre de la fonction est la liste des champs à récupérer... Si tu ne récupère que id, tu ne pourras afficher ni le titre, ni le contenu ;-)

@++

R@f

Commentaire de acppca le 24/07/2007 21:36:08

ok, c'est bien ce que je pensais, je suis à la masse ;)

merci

Commentaire de zeguizmo le 23/08/2007 16:16:19

Merci pour ce fantastique code !

Commentaire de sebastien247 le 02/09/2007 00:22:15

Salut

J'ai mon site qui est heberger sous php4 et je voudrais convertire le script php5 vers php4

J'ai suivie les modifs de _klesk, cela ma enlever les erreur, mais il ne m'affiche pas les resultat, meme si je c'est qu'il effectue bien la recherche puis qu'il m'afffiche les tirer que j'ai mis dans la boucle (2 tirer egal 2 resultats :D, Mais on voie pas les resultat :/)

Merci par avance

Commentaire de coockiesch le 02/09/2007 10:32:12

Salut!
  Quels résultats? Les résultats de la recherche?

C'est à toi de faire cet affichage, le script prépare seulement la requête...

@++

R@f

Commentaire de sebastien247 le 02/09/2007 21:07:57

Voici le code :

<?php
// On recupère les fichier necessaire
include "header.php";
include "search.class.php";
?>

<div id="corps">
<h1>Recherche :</h1>
<form action="search.php" method="post">
<input type="text" name="search_text" size="100" style="font-size: 12px;" value=""><br><br>
<input type="radio" name="search_option" value="all" style="border: none; font-size: 12px;" checked>Rechercher tous les mots<br>
<input type="radio" name="search_option" value="one" style="border: none; font-size: 12px;">Rechercher un de ces mots<br>
<input type="radio" name="search_option" value="sentence" style="border: none; font-size: 12px;">Rechercher l'expression exacte
<br><br>
<input type="submit" value="Rechercher" name="submit" style="font-size: 12px; position: relative; left: 20px;">
</form>
<span class="corps_bas"> </span>
</div>

<?php
// création d'objet
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );

$sql = $s->mkQuery( 'streaming', 'id', array( 'titre', 'contenu' ), 'id', 'desc', 0, 10 );

// exécution de la requête
$result = mysql_query($sql['select'],$link) or die('Erreur MySQL'); // si erreur

while( $row = mysql_fetch_assoc( $result ) )
{
  // affichage normal ici (titre et texte récupérés), genre:
  echo '-----';
  echo $row['titre'];
  echo '<br />';
  echo $row['contenu'];
  echo '<br />';
}


?>

Cela ne m'affiche rien mis appart les tirer, et si j'ai 3 resultat il y aura 3 ligne de tirer

Commentaire de coockiesch le 02/09/2007 21:41:08

Salut!
  Les champs que tu récupères sont contenu dans le 2e paramètre et toi tu ne récupères que id... ;-)

@++

R@f

Commentaire de sebastien247 le 03/09/2007 12:26:00

Ok merci sa marche, le problemme c'est que des que je charge la page il me fait une recherche automatique sur toute la base de donner

Commentaire de coockiesch le 03/09/2007 12:27:52

Ca, c'est à toi de pas faire de recherche si rien a été entré...
Si ton bouton submit, s'appelle submit, tu ne dois pas faire de recherche si !isset( $_POST['submit'] ) ou si le champ de recherche est vide! :)

@++

R@f

Commentaire de sebastien247 le 03/09/2007 14:01:00

J'y arrive pas, je debute en php.

Voici ce que j'ai mis :

if (isset( $_POST['submit'] == true)
{
La requette
}

Merci pour ton aide

Commentaire de coockiesch le 03/09/2007 14:06:51

Non:
if( isset( $_POST['submit'] ) )
{
  // requete et affichage des résultats
}

Il faut que ton bouton submit ait son name à "submit"

Ca joue comme ca? :)

@++

R@f

Commentaire de sebastien247 le 03/09/2007 14:23:09

Non c'est toujours pareil :(

<input type="submit" value="Rechercher" name="submit" style="font-size: 12px; position: relative; left: 20px;">

Oui il a bien submit a name

Commentaire de coockiesch le 03/09/2007 14:26:02

Au chargement de la page, $_POST['submit'] n'est pas défini, donc ce que tu met dans le if n'est pas exécuté...

Envoie moi ton email ou msn par MP, je peux éventuellement regarder ton code...

@++

R@f

Commentaire de sebastien247 le 03/09/2007 14:40:44

Désoler, sa marche enfaite je renvoyer le fichier de backup sur mon ftp au lieu du modifier...

Merci

Commentaire de coockiesch le 03/09/2007 14:41:45

Pas de pb! :)

@++

R@f

Commentaire de sebastien247 le 03/09/2007 15:42:13

Bon je suis confronté a un second problemme

J'ai cette erreur :
Warning: mysql_fetch_array(): 50 is not a valid MySQL result resource in /home/s.duboc/www.magaroticx.com/htdocs/search.php on line 51

et au lieu de m'afficher tous les resultats, il ne m'en affiche qu'un

Ligne 51 : while($row = mysql_fetch_array($result))

Dans le while il y a sa :

while($row = mysql_fetch_array($result))
{
if (isset($_POST['note']) AND isset($_POST['video_id']) AND isset($_POST['ip']))
{
  $trouve = false;

  $reponse = mysql_query('Select ip From ip_votes Where video_id='.$_POST['video_id'].'');
  while ($donnees = mysql_fetch_array($reponse) and !$trouve)
  {
    if ($donnees['ip'] == $ip)
      $trouve=true;
  }

  if ($trouve)
    $deja_vote = 'Tu as déjà voté.';
  else
  {
    $reponse = mysql_query('Select note, nb_notes From streaming Where id='.$_POST['video_id'].'');
    $donnees = mysql_fetch_array($reponse);
    $nouvelle_note = ($donnees['note']*$donnees['nb_notes']+$_POST['note'])/($donnees['nb_notes']+1);
  
    mysql_query('Update streaming Set note='.$nouvelle_note.', nb_notes=nb_notes+1 Where id='.$_POST['video_id'].'') or die('Impossible de mettre a jour la BDD streaming : ' . mysql_error());
mysql_query("INSERT INTO ip_votes VALUES ('', '". $_POST['video_id'] ."', '". $_POST['ip'] ."')") or die('Impossible de fair une nouvelle entree dans la table ip_votes : ' . mysql_error());

    $vote_ajoute = 'Vote pris en compte.';
  }
}

// Affiche le contenue
echo '<div id="corps">';
    echo '<h1>'.$row['titre'].'</h1>';

    // On enlève les éventuels antislash PUIS on crée les entrées en HTML (<br />)
    $contenu = nl2br(stripslashes($row['contenu']));
    echo $contenu;

echo '<table bgcolor="#FFFFFF" width="400" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td align="left">';

echo $row['nb_notes'];
if($row['nb_notes'] <= 1) {echo ' vote';}
if($row['nb_notes'] > 1) {echo ' votes';}

echo '</td><td align="center">';

if($row['id'] == $_POST['video_id'])
{
echo $deja_vote;
echo $vote_ajoute;
}

echo '</td><td align="right">';

if($row['note'] == 0) {echo '<img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg">';}
if($row['note'] == 1) {echo '<img src="../images/rate_on.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg">';}
if($row['note'] == 2) {echo '<img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg">';}
if($row['note'] == 3) {echo '<img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_off.jpg"><img src="../images/rate_off.jpg">';}
if($row['note'] == 4) {echo '<img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_off.jpg">';}
if($row['note'] == 5) {echo '<img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg"><img src="../images/rate_on.jpg">';}

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


//echo '<form method="post" action="'.$_SERVER["REQUEST_URI"].'">';
  //echo '<p align="center">';
//echo '<input name="video_id" type="hidden" value="'.$row['id'].'">';
//echo '<input name="ip" type="hidden" value="'.$_SERVER["REMOTE_ADDR"].'">';
//echo '<input name="note" type="submit" value="1">';
//echo '<input name="note" type="submit" value="2">';
//echo '<input name="note" type="submit" value="3">';
//echo '<input name="note" type="submit" value="4">';
//echo '<input name="note" type="submit" value="5">';
  //echo '</p>';
//echo '</form>';

echo '<span class="corps_bas">';
echo '<em>le ';
echo date('d/m/Y à H\hi', $row['timestamp']);
echo '</em></span>';

echo '</div>';

// Affichage de la PUB
include($DOCUMENT_ROOT.'/pub.php');



//else echo 'Pas d\'enregistrements dans cette categorie...';
mysql_free_result($result);
echo '<div class="liste_page">';
// si le nombre d'enregistrement à afficher est plus grand que $nombre
if($total > $nombre)
  {
// affichage du lien precedent
    displayPreviousButtons($limite,$total,$nombre,$page,$cat);
  
    // affichage des liens vers les pages
    affichePages($nombre,$page,$total,$cat);

// affichage du lien suivant
displayNextButtons($limite,$total,$nombre,$page,$cat);
  }
echo '</div>';
}

Merci

Commentaire de sebastien247 le 03/09/2007 18:19:44

J'ai detourné le probleme en recodant cette partie

Mais maintenant je n'arrive pas a integrer ton systeme de numerotation de page
http://www.phpcs.com/codes/NUMEROS-PAGE_24067.aspx

Peut tu me donner un coup de main ?

Car en effet je ne comprend pas comment utiliser getQuery

exemple de requete comment je doit le remplire ?
Comme ceci ? :
$result = mysql_query($sql['select'],$link);

Encore merci
Désoler pour le derangement

Sébastien

Commentaire de Straw le 06/11/2007 12:07:30

Bonjour,

Tout d'abord félicitations à Coockiesch qui suit formidablement sa source. 10/10

Je cherche à la faire évoluer en lui interdisant de rechercher certains mots tels que le, la, les, du, de etc..

Exemple, si je tape dans la recherche "La faim dans le monde", il faudrait qu'il suprrime les mots "la, dans, le" et fasse la recherche sur "faim, monde".

Est-ce que cela peut se faire directement à la récupération des donnés du champ search_text? Si oui comment peut-on procéder?

Merci beaucoup d'avance,

Straw

Commentaire de coockiesch le 06/11/2007 21:20:55

Salut!
  Je pense qu'en mettant les mots interdits dans un tableau et en utilisant array_diff (http://ch2.php.net/manual/fr/function.array-diff.php), tu devrais arriver à ce que tu veux... Et si ce n'est pas le cas, n'hésite pas à demander! :-)

@++

R@f

Commentaire de Straw le 09/11/2007 10:59:06

Bonjour,

Merci pour la rapidité de ta réponse, mais je ne trouve toujours pas la solution. J'ai essayé  ceci mais sans succès :

<?php
     class dbSearch{
     // mots et expressions à chercher
     private $words;
    $array1 = array("a" => "du");
$array2 = array("b" => $words);
$result = array_diff($array1, $array2);
private $words = $result;

Ne devrait-on pas chercher plutôt du coté de ceci? :

<?php

//Texte contenant les mots à bannir
$message="Un petit test pour enlever des mots interdit, genre du, le et<br/>bien d'autre du même style, en tenant compte de la casse,<br/> de la gestion du pluriel";

echo '<br/><b>Message original avec des majuscules et des mots au pluriel :<br/>'.$message.'</b><br/>';  

//Mots à bannir séparés par |
$insulte='du|les|la|dans';

$par="****";  // Le mot banni sera remplacé par ce texte
$message = preg_replace("/(^|[^a-zA-Z])*[ ]*($insulte)[s|x]*([^a-zA-Z]?)/si"," $par ", $message);

echo $message;  

?>

source trouvée sur easy-script.com

Malheureusement je n'arrive pas à l'adapter à ton moteur de recherche :-s

Merci pour ton aide :-)

Straw

Commentaire de coockiesch le 10/11/2007 09:13:59

Yop!
  Il est bizarre ton tableau, lol... :-D
Essaie ca:

1) Remplace le code de la classe par:
class dbSearch
{
// mots et expressions à chercher
private $words;

// séparateur
private $sep;

// option de recherche
private $option;

// nombre de mots
private $count_words;

// clause where
private $query_where = '';

/*
__construct()
Paramètres:
  - $search_option: option choisie
- $search_text: texte de recherche entré
Retour:
void
*/
public function __construct( $search_option, $search_text, $forbidden = NULL )
{
$this->query_prepared = 1;

// option de recherche
$this->option = $search_option;

// recherche en ET
if( $this->option  == 'all' )
{
$this->sep = ' AND ';
$this->option = 1;
$this->words = explode( ' ', addslashes( $search_text ) );

if( isset( $forbidden ) && is_array( $forbidden ) )
$this->words = array_diff( $this->words, $forbidden );

$this->count_words = count( $this->words );
}
// recherche en OU
else if( $this->option  == 'one' )
{
$this->sep = ' OR ';
$this->option = 2;
$this->words = explode( ' ', addslashes( $search_text ) );
if( isset( $forbidden ) && is_array( $forbidden ) )
$this->words = array_diff( $this->words, $forbidden );

$this->count_words = count( $this->words );
}
// phrase exacte
else
{
$this->option = 0;
$this->words[0] = addslashes( $search_text );
}
}

/*
mkQuery()
Crée la requête MySQL
Paramètres:
  - $table ( string ): table à utiliser
- $select ( string ): les champs que l'on récupère
- $champs ( string si 1 champ, array si plusieurs ): champs dans lesquels s'effectue la recherche
- $order ( string ): critère de classement ; pas de classement si vide
- $sens ( string: asc ou desc ): sens du classement
- $limit_start ( entier ): pour le LIMIT
- $limit_nb ( entier ): pour le LIMIT ; si 0, pas de clause LIMIT
Retour:
void
*/
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb )
{
$this->query_where = '';

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

$count_champs = count( $champs );

// si recherche en ET ou OU
if( $this->option )
{
$i = false;
foreach( $this->words as $key => $value ) // boucle sur les mots
{
// si pas première itération
if( $i )
$this->query_where .= $this->sep;
$i = true;

$this->query_where .= '( ';

for( $j = 0; $j < $count_champs; $j++ ) // boucle sur les champs
{
if( $j )
$this->query_where .= ' OR ';

$this->query_where .= '`' . $champs[ $j ] . '` LIKE \'%' . $value . '%\'';

} // for( $j = 0; $j < $this->count_words; $j++ ) // boucle sur les champs

$this->query_where .= ' )';
} // for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les mots
}
else // recherche phrase exacte
{
for( $i = 0; $i < $count_champs; $i++ ) // boucle sur les champs
{
if( $i )
$this->query_where .= ' OR ';

$this->query_where .= $champs[$i] . ' LIKE \'%' . $this->words[0] . '%\' ';
} // for( $i = 0; $j < $count_champs; $i++ ) // boucle sur les champs
} // else // recherche phrase exacte

// construction de la requête finale
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where );

if( !empty( $order ) )
$sql['select'] .= ' ORDER BY ' . $order . ' ' . $sens;
$this->query_where = $sql['select'];
if( $limit_nb )
$sql['select'] .= ' LIMIT ' . $limit_start . ', ' . $limit_nb;

return $sql;
}

/*
getWhere()
Récupération de la clause where
Paramètres:
  void
Retour:
string
*/
public function getQuery()
{
return $this->query_where;
}
}

2) Quand tu crées l'objet dbSearch, tu peux maintenant ajouter un nouveau paramètre (optionnel):
$forbidden = array( 'le', 'la', 'des' );
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'], $forbidden );

Ca devrait jouer, tiens moi au courant!

@++

R@f

Commentaire de Straw le 13/11/2007 13:12:48

O_o Waw toutes mes félicitations!

Le code fonctionne parfaitement! Un simple copié collé et il ne prend plus en compte les mots censurés dans $forbidden :-D

Je n'aurais pas espéré mieux mille merci!

Gloire à Coockiesch!

Commentaire de coockiesch le 13/11/2007 21:25:10

:)

Raf

Commentaire de jphilippev le 03/01/2008 17:22:52

bonjour et bonne année
il font comment google pour avoir le mot approchant le plus quand on se trompe...???

Commentaire de coockiesch le 04/01/2008 11:12:17

Salut!
  Je suppose qu'il traduit notre recherche en phonétique et cherche des correspondances avec sa bdd... Il me semble que Malalam a déposé un exemple de telle source sur le site... :-)

@++

R@f

Commentaire de jphilippev le 04/01/2008 11:56:36

ah ok je vais allez voir ça...

Commentaire de jphilippev le 04/01/2008 12:43:03

salut,
pas trouvé la source de malalam... mais je continu de chercher...
dis moi jsuis un peu claqué mais c'est ou qu'il faut faire les modif pour que cela cherche dans ma table a moi... (c peu etre con mais bon c en posant des question comme ca que j'apprend)
et la requete on peut l'afficher avec un while? (la c pareil)
merci de ta reponse (enfin si... lol)

Commentaire de coockiesch le 05/01/2008 14:03:21

Salut!
http://www.phpcs.com/codes/PHONEX_36561.aspx
http://www.phpcs.com/codes/SOUNDEX-FRANCAIS_36539.aspx

La requête est donc dans: $sql['select']
Ainsi, tu fais qqch, comme:
if( ( $ret = mysql_query( $sql['select'] ) ) === false )
  die( 'Erreur MySQL' );

while( $row = mysql_fetch_assoc( $ret ) )
  ; // affichage ici

Pour ce qui est des options de recherche, c'est à faire lors de l'appel de la méthode, comme expliqué:
Exemple de fonctionnement:
<?php
// création d'objet
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );

/*
ici, recherche dans la table news
on récupère le champ id
la recherche se fait dans les champs titre et texte
classement selon id, desc
limit 0, 10
*/
$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'texte' ), 'id', 'desc', 0, 10 )
/*
$sql['select'] // requête de select
$sql['count'] // requête de comptage
*/
?>
Donc, tu changes les valeurs de $s->mkQuery (les paramètres sont expliqués à la ligne 74 du code).

Voili, voilou, j'espère que ca va jouer! :-)

@++

R@f

Commentaire de Coiler le 07/01/2008 18:15:05

"Pour la rendre compatible php4 il faut remplacer :

private par -> var.
public function par -> function
function __construct par -> function dbSearch (le nom de la classe)"

Je suis désolé de passer pour un naz malgré l'aide apporté dans les commentaires, mais après moult effort et quelques recherches sur internet je n'arrive pas à modifier correctement le script pour le rendre compatible php4. En fait je pense que mon probleme vient du function__construct que je n'arrive pas a remplacer.
Si _KLESH pouvait m'apporter des précision je lui serai grandement reconnaissant :D

Merci pour votre aide.

Commentaire de jphilippev le 08/01/2008 12:47:50

merci pour ta reponse j'étudie ca..
a quoi servent $sql['select'] et $sql['count'] que tu as mis en commentaire?

Commentaire de _klesk le 09/01/2008 15:01:27

@Coiler

Il te suffis simplement de remplacer __construct() par dbSearch() (le nom de la classe en fait)
sans oublier :
private par -> var.
public function par -> function.

après c'est impecable.

ps: c'est Klesk et pas Klesh ;) rapport à Quake 3 pour les ammateurs.

Commentaire de Coiler le 11/01/2008 23:18:27

Merci beaucoup pour ton aide. Enfait je me suis arraché les cheveux car je ne connais rien en php orienté objet et je cherchais à remplacer betement ce que tu me donnais, avec le "(le nom de la classe)" en tant que code et non explication...

Oui je sais c'est pathétique :D
Merci en tout cas ça marche très bien, sauf que je n'arrive à récupérer que l'id et pas les autre champs (comme quelqun l'a posté plus haut sans réponse)

Mais je me suis débroullé avec une requete where et un fetch_array.

Merci beaucoup pour se code performant

Commentaire de jphilippev le 01/02/2008 15:26:40

Bon je reviens vers vous parce que j'ai rien compris
ou je doit mettre le while, le code...
merci de votre aide

Commentaire de coockiesch le 05/02/2008 19:11:25

Salut!
  Le script te prépare deux requêtes, contenues dans $sql['select'] et $sql['count'] permettant, respectivement, de récupérer et de compter les résultats.

Ensuite, ben tu utilises mysql_query et mysql_fetch_assoc comme tu le souhaites pour exécuter et afficher les résultats de la requête... :-)

Raf

Commentaire de _klesk le 15/02/2008 21:37:52

Petite amélioration coockiesch, serait de pouvoir faire des jointures, comme j'a n'arrivait pas a modifier t'a source du coup je m'en suis fait une pour moi ;)

Mais cela peut-être une amélioration à apporter a ton source, qui reste tout a fait performant :p

Commentaire de coockiesch le 19/02/2008 19:08:13

Salut!
  Si tu parles d'une récupération/recherche dans deux/plusieurs tables différentes, pas de pb normalement. L'avais fait, il me semble. Que voulais-tu faire au juste?

Merci pour ton commentaire!

Raf

Commentaire de _klesk le 25/02/2008 20:40:25

oui c'est exactement ca du genre :

$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );
...
les morceaux de selection qui vont bien
...
$s->join = 'pays';
$s->joinner = 'id';
$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'texte' ), 'id', 'desc', 0, 10 )

ou peu être

$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );
...
toujours les morceaux de selection qui vont bien
...
$sql = $s->mkQuery( 'news', 'id', array( 'titre', 'texte' ),'table_a_joindre',array('jointure_table1','jointure_table2'), 'id', 'desc', 0, 10 );

perso quand je me suis fait la mienne, j'ai obter pour la premiere solution. mais tous est bon a prendre.

Commentaire de lepetitcod le 02/06/2008 15:48:03 10/10

Bonjour a tous ,
d'abord un grand bravo por ce code qui s'avere particulierement efficace!
ensuite j'aurais voulu avoir votre avis sur un petit probleme que je rencontre depuis quelques jours avec mon propre code : le but de ma recherche est de m'afficher une liste de spot de kitesurf selon 3 criteres apparement les 2 premiers sont pris en compte mais le 3eme   reste muet mais un autre soucis apparai lors de l'affichage .
en effet mes resultats sont repetes (4 fois ou plus )ce qui rendla liste de resultats extremement longue .

voici mon code


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



merci d'avance

Commentaire de coockiesch le 02/06/2008 17:53:37

Salut!
  Utilise le forme, stp....

@++

R@f

Commentaire de coockiesch le 02/06/2008 17:54:00

Oups, je voulais dire forum!

Commentaire de ineuls le 22/07/2008 11:43:02 10/10

bonjour,

je vous explique mon projet en quelques mots:
j'utilise un formulaire de recherche avec plusieurs méthodes POST (9 au total), je dois afficher le résultat de la recherche en fonction des POST remplis par l'utilisateur. Ma base de données (70Go texte) est composer de plusieurs tables alors je voudrais savoir s'il est possible de sélectionner plusieurs tables pour générer la requête et afficher le résultat en fonction des choix de l'utilisateur ?

j'espère avoir été assez clair sur mon problème

merci d'avance

Commentaire de coockiesch le 22/07/2008 11:48:07

Salut!
  Rien ne t'empêche de faire la recherche dans plusieurs tables. Par exemple tu peux mettre, pour les différents paramètres de la fonction mkQuery:
$table: 'table1 t1, table2 t2'
$select: 't1.id, t1.libelle, t2.autreColonne'
etc...

Il te faudra peut être rajouter, lors de la construction de la requête, ligne 128, des conditions supplémentaires du genre:
t1.id=t2.id

Voilà,

@++

R@f

Commentaire de ineuls le 22/07/2008 14:23:34

Merci pour ton explication,

J'ai donc modifié mon code mais je ne trouve pas l'endroit ou il faut rajouter les conditions supplémentaires dans la construction de la requête.

Voici la fonction mkQuery()


// création d'objet
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );

$sql = $s->mkQuery( 'tls202_appln_title at,tls203_appln_abstr aa,tls211_pat_publn pp,tls204_appln_prior ap,tls207_pers_appln pa,tls206_person p,tls209_appln_ipc aipc,tlsup_ctry_names cn,tlsup_naceipc_dgr ndgr', 'at.appln_title,p.person_name', array( 'aa.appln_abstract', 'pp.publn_nr',' a.appln_nr', 'ap.prior_appln_seq_nr', 'pp.publn_date',' a.appln_filing_date',' ap.prior_appln_seq_nr', 'cn.ctry_name',' p.postcode', 'pp.publn_auth',' a.appln_auth',' ndgr.ipc'), 'p.person_name', 'desc', 0, 0 );

Si tu pouvais me dire ou il faut que je place les t1.id=t2.id dans la construction de la requête .

merci d'avance

Commentaire de coockiesch le 22/07/2008 14:31:09

A la ligne 128:
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE ' . $this->query_where );

--->

$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ' . $this->query_where, 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE (' . $this->query_where . ') AND ( t1.id=t2.id ) );

Tu peux aussi faire comme ceci:
$sql = array( 'select' => 'SELECT ' . $select . ' FROM ' . $table . ' WHERE (' . $this->query_where . ( empty( $whereSup ) ? '' : ' AND ( ' . $whereSup . ')' ), 'count' => 'SELECT count(*) FROM ' . $table . ' WHERE (' . $this->query_where . ')' . ( empty( $whereSup ) ? '' : ' AND ( ' . $whereSup . ')' ) );

Et modifier:
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb )
EN
public function mkQuery( $table, $select, $champs, $order, $sens, $limit_start, $limit_nb, $whereSup = '' )

Et tu peux donc passer un paramètre de plus à ta fonction, qui sera ajouté au requêtes... :)

Ca joue? :)

Raf

Commentaire de lanner le 17/03/2009 15:21:49

Salut tout le monde
J'ai vraiment un soucis je n'arrive pas du tout à le faire fonctionner , jais pourtant bien fait la connexion à la base de donnée mais rien ne s'affiche , ni même aucunes erreurs...
Serait il possible de mettre en place un exemple simple (fichier sql basic + un fichier php prêt à l'emploi) avec la connexion bdd etc
Merci d'avance à vous

Commentaire de thomasxsolutions le 28/04/2009 17:07:56

slt, tout d'abord bravo pour ce script coockiesch, il est génial. j'ai juste un petit problème, je n'arrive pas à afficher le texte recherché dans ma BDD: voici le code SQL d'affichage des résultats que j'ai mis dans une autre page php:

<?php
$host = "localhost";
$login = "root";
$pass = "";
$nom_db = "test";

mysql_connect("$host", "$login","$pass") or die ("pas connecté");
mysql_select_db("$nom_db") or die ("aucune BDD active");
$forbidden = array( 'le', 'la', 'des' );
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'], $forbidden );
$sql = $s->mkQuery( 'test', 'id', array( 'DOCS', 'Contenu' ), 'id', 'desc',0,10 );
echo $sql['select'] . '<br /><br />' . mysql_error();
$result = mysql_query(isset ($_POST [$sql['select']]) ) or die( 'Erreur MySQL' ); // si erreur

while( $row = mysql_fetch_assoc( $result ) )
{
  // affichage normal ici (titre et texte récupérés), genre:
  echo 'documents: ' , stripslashes( $row['DOCS'] ) , '<br />' , stripslashes( $row['Contenu'] ) , '<br /><hr />';
}
mysql_close();
?>

Je ne suis que débutant en PHP, pourez-tu m'aider? merci d'avance
tom

Commentaire de coockiesch le 28/04/2009 22:01:04

Salut!
   $_POST['search_text'] contient l'entrée de l'utilisateur, tu peux l'afficher!

Bonne soirée!

Raf

Commentaire de mastermh73 le 19/05/2010 00:08:36

bonjours a tous, peut-etre ma question va parraitre un peu stupide mais est ce qu'on peur utiliser ce moteur de recherche pour une galerie d'image.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Requete moteur de recherche [ par vince1415 ] Salut, Voila en fait j'ai un petit probl&#233;me avec ma requ&#233;te pour un moteur de recherche tout simple. Voici le code: &nbsp;&nbsp;&nbsp; func recherche d'enregistrement [ par duodiscus ] bonsoir,alors voil&#224;, j'ai une base de donn&#233;e qui contient des produitset j'ai une page de modification de produiten ent&#234;te de cette pag probleme de programme bdd [ par snakeyes ] Bonjour à tous.débutant en php, je me suis construit pour mon activité professionnelle une base de donnée.Mais j' ai mon programme, celui qui doit eff Probleme avec recherche de plusieurs mots-clés [ par cyse ] Bonsoir,J'essai de faire un moteur de recherche en interne pour un site.Je ne suis pas super doué en php encore et je n'arrive pas à cerner quelquecho Rien ne s'affiche ??? [ par ralebole ] Bonjour, j'utilise un code pour effectuer une recherche dans une base de données mysql que j'ai trouver sur le site. Mais le problème quand j'utilise Search [ par Seadol ] Bonsoir, J'aimerai crée un système de recherche qui chercherai le mot entrée dans tout un site web. J'ai chercher des codes, je n'ai rien trouvé qui Moteur de recherche en Full-Text : tri par ordre alphabétique ? [ par BenamourJr ] Hello ! J'utilise un moteur de recherche en Full-text mais par exemple quand je tape "George" les résultats sont classés par ordre de pertinence. Mais Grossir les occurences d'une recherche [ par Neme6 ] Bonjour a tous, je souhaite lors de ma recherche grossir les occurences donc je dois utiliser deux fonctions, une qui fait grossir CHAQUE mot de la r Probleme de case dans un moteur de recherche. [ par Gizmalin ] Bonjour .Apres quelques recherche non fructueuse sur le forum ,j'ai decidé de demander .( bon apres si j'ai raté la reponse dans le forum excusez moi envoyer des donner a une db [ par lolosees ] Bonjour a tous,voila je recherche comment faire pour envoyer des donner a une db sans passer par $_post ce que je recherche c'est une fonction qui cha


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 0,967 sec (3)

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