cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009
-
25 juil. 2006 à 18:34
mastermh73
Messages postés1Date d'inscriptiondimanche 4 avril 2010StatutMembreDernière intervention19 mai 2010
-
19 mai 2010 à 00:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
mastermh73
Messages postés1Date d'inscriptiondimanche 4 avril 2010StatutMembreDernière intervention19 mai 2010 19 mai 2010 à 00:08
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.
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 28 avril 2009 à 22:01
Salut!
$_POST['search_text'] contient l'entrée de l'utilisateur, tu peux l'afficher!
Bonne soirée!
Raf
thomasxsolutions
Messages postés2Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention28 avril 2009 28 avril 2009 à 17:07
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:
Je ne suis que débutant en PHP, pourez-tu m'aider? merci d'avance
tom
cs_lanner
Messages postés131Date d'inscriptionsamedi 16 avril 2005StatutMembreDernière intervention 8 avril 2015 17 mars 2009 à 15:21
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 22 juil. 2008 à 14:31
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
ineuls
Messages postés6Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 3 septembre 2008 22 juil. 2008 à 14:23
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'] );
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 22 juil. 2008 à 11:48
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
ineuls
Messages postés6Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 3 septembre 2008 22 juil. 2008 à 11:43
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 2 juin 2008 à 17:54
Oups, je voulais dire forum!
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 2 juin 2008 à 17:53
Salut!
Utilise le forme, stp....
@++
R@f
cs_lepetitcod
Messages postés4Date d'inscriptionlundi 28 mai 2007StatutMembreDernière intervention 3 juin 2008 2 juin 2008 à 15:48
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">
;
$sql "SELECT DISTINCT zone.zone_fr,zone.spot,zone.ID_spot,session.sess_type,session.niveau,session.vent_opt FROM zone,info,session WHERE zone.ID_spot info.ID_spot and zone.zone_fr like '%$zone_fr%' and session.niveau like '%$niveau%' and session.vent_opt like '%$vent_opt%'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$result="0";
//Test du résultat
while($data = mysql_fetch_assoc($req)){$result="1";}
//Affichage des données.
if ($result=="0"){
echo"<center> Aucun enregistement retourné ... </center>
";
}
else{
//affichage des données
echo'';
echo'----
';
echo'<center>zone</center>,
<center>spot</center>,
<center>niveau</center>, <center>type de session</center>, <center>Numeros</center>, <center>Détails</center>, ';
_klesk
Messages postés70Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention20 août 2008 25 févr. 2008 à 20:40
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.
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 19 févr. 2008 à 19:08
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
_klesk
Messages postés70Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention20 août 2008 15 févr. 2008 à 21:37
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 5 févr. 2008 à 19:11
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
jphilippev
Messages postés253Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention 5 décembre 20081 1 févr. 2008 à 15:26
Bon je reviens vers vous parce que j'ai rien compris
ou je doit mettre le while, le code...
merci de votre aide
cs_Coiler
Messages postés3Date d'inscriptionmardi 10 avril 2007StatutMembreDernière intervention24 février 2009 11 janv. 2008 à 23:18
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
_klesk
Messages postés70Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention20 août 2008 9 janv. 2008 à 15:01
@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.
jphilippev
Messages postés253Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention 5 décembre 20081 8 janv. 2008 à 12:47
merci pour ta reponse j'étudie ca..
a quoi servent $sql['select'] et $sql['count'] que tu as mis en commentaire?
cs_Coiler
Messages postés3Date d'inscriptionmardi 10 avril 2007StatutMembreDernière intervention24 février 2009 7 janv. 2008 à 18:15
"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.
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 5 janv. 2008 à 14:03
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
jphilippev
Messages postés253Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention 5 décembre 20081 4 janv. 2008 à 12:43
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)
jphilippev
Messages postés253Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention 5 décembre 20081 4 janv. 2008 à 11:56
ah ok je vais allez voir ça...
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 4 janv. 2008 à 11:12
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
jphilippev
Messages postés253Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention 5 décembre 20081 3 janv. 2008 à 17:22
bonjour et bonne année
il font comment google pour avoir le mot approchant le plus quand on se trompe...???
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 13 nov. 2007 à 21:25
:)
Raf
cs_Straw
Messages postés33Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention25 août 2008 13 nov. 2007 à 13:12
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!
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 10 nov. 2007 à 09:13
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 ) );
/*
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 = '';
// 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 ';
/*
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
cs_Straw
Messages postés33Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention25 août 2008 9 nov. 2007 à 10:59
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
bien d'autre du même style, en tenant compte de la casse,
de la gestion du pluriel";
echo '
Message original avec des majuscules et des mots au pluriel :
'.$message.'
';
//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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 6 nov. 2007 à 21:20
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
cs_Straw
Messages postés33Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention25 août 2008 6 nov. 2007 à 12:07
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
sebastien247
Messages postés27Date d'inscriptionmercredi 16 mai 2007StatutMembreDernière intervention13 mars 2011 3 sept. 2007 à 18:19
J'ai detourné le probleme en recodant cette partie
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
sebastien247
Messages postés27Date d'inscriptionmercredi 16 mai 2007StatutMembreDernière intervention13 mars 2011 3 sept. 2007 à 15:42
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 '
';
echo ''.$row['titre'].'
';
// On enlève les éventuels antislash PUIS on crée les entrées en HTML (
)
$contenu = nl2br(stripslashes($row['contenu']));
echo $contenu;
// Affichage de la PUB
include($DOCUMENT_ROOT.'/pub.php');
//else echo 'Pas d\'enregistrements dans cette categorie...';
mysql_free_result($result);
echo '
';
// 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);
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 3 sept. 2007 à 14:41
Pas de pb! :)
@++
R@f
sebastien247
Messages postés27Date d'inscriptionmercredi 16 mai 2007StatutMembreDernière intervention13 mars 2011 3 sept. 2007 à 14:40
Désoler, sa marche enfaite je renvoyer le fichier de backup sur mon ftp au lieu du modifier...
Merci
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 3 sept. 2007 à 14:26
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
sebastien247
Messages postés27Date d'inscriptionmercredi 16 mai 2007StatutMembreDernière intervention13 mars 2011 3 sept. 2007 à 14:23
Non c'est toujours pareil :(
Oui il a bien submit a name
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 3 sept. 2007 à 14:06
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
sebastien247
Messages postés27Date d'inscriptionmercredi 16 mai 2007StatutMembreDernière intervention13 mars 2011 3 sept. 2007 à 14:01
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 3 sept. 2007 à 12:27
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
sebastien247
Messages postés27Date d'inscriptionmercredi 16 mai 2007StatutMembreDernière intervention13 mars 2011 3 sept. 2007 à 12:26
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 2 sept. 2007 à 21:41
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
sebastien247
Messages postés27Date d'inscriptionmercredi 16 mai 2007StatutMembreDernière intervention13 mars 2011 2 sept. 2007 à 21:07
Voici le code :
<?php
// On recupère les fichier necessaire
include "header.php";
include "search.class.php";
?>
Recherche :
<form action="search.php" method="post">
Rechercher tous les mots
Rechercher un de ces mots
Rechercher l'expression exacte
</form>
<?php
// création d'objet
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );
Cela ne m'affiche rien mis appart les tirer, et si j'ai 3 resultat il y aura 3 ligne de tirer
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 2 sept. 2007 à 10:32
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
sebastien247
Messages postés27Date d'inscriptionmercredi 16 mai 2007StatutMembreDernière intervention13 mars 2011 2 sept. 2007 à 00:22
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
cs_zeguizmo
Messages postés138Date d'inscriptionvendredi 1 août 2003StatutMembreDernière intervention16 juillet 2009 23 août 2007 à 16:16
Merci pour ce fantastique code !
acppca
Messages postés3Date d'inscriptionsamedi 17 septembre 2005StatutMembreDernière intervention24 juillet 2007 24 juil. 2007 à 21:36
ok, c'est bien ce que je pensais, je suis à la masse ;)
merci
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 24 juil. 2007 à 21:17
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
acppca
Messages postés3Date d'inscriptionsamedi 17 septembre 2005StatutMembreDernière intervention24 juillet 2007 24 juil. 2007 à 21:02
voilà
j'ai réussis a corriger cette erreur ...
mais mnt le nombre de news s'affiche mais pas le contenue
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 24 juil. 2007 à 19:07
Yop!
Indique nous quelle est la ligne 148 stp, :)
@++
R@f
acppca
Messages postés3Date d'inscriptionsamedi 17 septembre 2005StatutMembreDernière intervention24 juillet 2007 24 juil. 2007 à 13:06
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 );
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 16 juil. 2007 à 08:05
Oui, ca joue!
Merci pour tes commentaires, :)
@++
R@f
_klesk
Messages postés70Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention20 août 2008 16 juil. 2007 à 00:00
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
@++
_klesk
Messages postés70Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention20 août 2008 15 juil. 2007 à 23:29
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 ;)
marc660
Messages postés171Date d'inscriptionjeudi 15 avril 2004StatutMembreDernière intervention18 juillet 2007 10 juil. 2007 à 11:50
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
cs_Straw
Messages postés33Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention25 août 2008 13 juin 2007 à 19:33
Super merci de la rapidité de ta réponse ça fonctionne nikel!
@ plouche !
Straw
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 13 juin 2007 à 19:14
cs_Straw
Messages postés33Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention25 août 2008 12 juin 2007 à 18:28
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 "
" . $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?
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 24 mai 2007 à 19:27
Yop!
Avec mysql_error( ) affiche l'erreur... T'es sûr que ca vient pas de ton between?
@++
R@f
toufouk
Messages postés20Date d'inscriptionlundi 4 octobre 2004StatutMembreDernière intervention23 août 2010 23 mai 2007 à 10:54
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
toufouk
Messages postés20Date d'inscriptionlundi 4 octobre 2004StatutMembreDernière intervention23 août 2010 23 mai 2007 à 09:49
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.
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 22 mai 2007 à 19:49
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
toufouk
Messages postés20Date d'inscriptionlundi 4 octobre 2004StatutMembreDernière intervention23 août 2010 22 mai 2007 à 14:34
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 .
toufouk
Messages postés20Date d'inscriptionlundi 4 octobre 2004StatutMembreDernière intervention23 août 2010 21 mai 2007 à 15:42
RIEN A REDIRE 10/10.
amirouche17
Messages postés2Date d'inscriptionjeudi 3 mai 2007StatutMembreDernière intervention10 mai 2007 10 mai 2007 à 11:47
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.
amirouche17
Messages postés2Date d'inscriptionjeudi 3 mai 2007StatutMembreDernière intervention10 mai 2007 10 mai 2007 à 11:36
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.
cs_Straw
Messages postés33Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention25 août 2008 8 mai 2007 à 11:48
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
$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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 7 avril 2007 à 18:48
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
kawther84
Messages postés321Date d'inscriptionvendredi 8 décembre 2006StatutMembreDernière intervention24 mars 2022 5 avril 2007 à 11:45
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
Epoc22
Messages postés198Date d'inscriptionlundi 28 février 2005StatutMembreDernière intervention14 novembre 20081 24 janv. 2007 à 16:54
Yeah salut tout le monde,
coockiesch ta source est nickel c'est exactement ce que je cherchait merci ;-) Pas une seule erreur !
10/10
@++
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 22 nov. 2006 à 14:41
Ton serveur tourne avec php4 le script est en php5... .. .
@ tchaOo°
R3dDragon
Messages postés62Date d'inscriptiondimanche 30 juillet 2006StatutMembreDernière intervention14 avril 2009 22 nov. 2006 à 13:48
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
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 27 sept. 2006 à 10:41
ok super merci beaucoup
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 26 sept. 2006 à 18:36
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
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 26 sept. 2006 à 14:18
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 26 sept. 2006 à 12:13
Ben non.... Ou alors elle est définie à un endroit auquel le script n'a pas accès!
@++
R@f
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 26 sept. 2006 à 11:51
Mais oui elle est définie
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 26 sept. 2006 à 11:12
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°
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 26 sept. 2006 à 10:43
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 26 sept. 2006 à 10:06
- 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'] . '
' . mysql_error();
Et tu peux nous dire ce que ca affiche!
@++
R@f
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 26 sept. 2006 à 09:51
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 ?
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 26 sept. 2006 à 09:39
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
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 26 sept. 2006 à 09:33
Hello merci mais j'ai toujour une erreur j'ai fais comme tu dis
// 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 ';
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 26 sept. 2006 à 09:22
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
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 26 sept. 2006 à 09:12
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 "
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 26 sept. 2006 à 08:45
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+
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 26 sept. 2006 à 08:37
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+
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 25 sept. 2006 à 18:10
$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
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 25 sept. 2006 à 14:04
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+
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 25 sept. 2006 à 12:20
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 25 sept. 2006 à 11:11
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 25 sept. 2006 à 10:58
Si je prend le code donné en exemple:
// création d'objet
$s = new dbSearch( $_POST['search_option'], $_POST['search_text'] );
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 25 sept. 2006 à 10:26
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 ?
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 25 sept. 2006 à 10:13
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
cs_iomega
Messages postés144Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 1 septembre 2008 25 sept. 2006 à 09:57
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 ?
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 25 sept. 2006 à 08:43
Sinon tu peux rechercher sous google: tutorial mysql php
@++
R@f
BTAJV
Messages postés145Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention17 avril 2008 24 sept. 2006 à 15:05
Bon oki je vai perceverer mais connai tu un site ou ya des tuto de requette car je ne sais pas en faire
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 24 sept. 2006 à 14:09
Mais c'est le but de cette source de créer la requete... .. !
@ tchaOo°
BTAJV
Messages postés145Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention17 avril 2008 24 sept. 2006 à 11:47
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
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 8 sept. 2006 à 16:57
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°
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 8 sept. 2006 à 16:16
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
BTAJV
Messages postés145Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention17 avril 2008 8 sept. 2006 à 15:55
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 8 sept. 2006 à 15:21
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
BTAJV
Messages postés145Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention17 avril 2008 8 sept. 2006 à 14:52
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 8 sept. 2006 à 14:37
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
BTAJV
Messages postés145Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention17 avril 2008 8 sept. 2006 à 12:44
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
BTAJV
Messages postés145Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention17 avril 2008 8 sept. 2006 à 12:43
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
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 8 sept. 2006 à 12:41
Salut!
Il cherche dans les champs de la bdd... :)
@++
R@f
BTAJV
Messages postés145Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention17 avril 2008 8 sept. 2006 à 11:17
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
dom_ponge
Messages postés47Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention17 septembre 2006 9 août 2006 à 03:06
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).
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 4 août 2006 à 10:05
Malalam > Merci
DOM_PONGE > Tu peux tjs demander des infos, si ça bug, :)
@++
R@f
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 4 août 2006 à 08:53
J'ai supprimé ta note, DOM_PONGE :-) Le mal est réparé ;-)
dom_ponge
Messages postés47Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention17 septembre 2006 4 août 2006 à 04:44
Oops dsl j'ai mal fait.... c'est à cause que le code est fait pour PHP5 et je n'ai que PHP4...
dom_ponge
Messages postés47Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention17 septembre 2006 4 août 2006 à 03:56
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é.
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 26 juil. 2006 à 23:34
"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.
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 26 juil. 2006 à 13:03
Oki, merci, :)
Mais vais laisser comme ça, que chacun ait le choix de se connecter ou pas avant... :)
@++
R@f
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 26 juil. 2006 à 12:53
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.
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 26 juil. 2006 à 11:45
Merci, :)
Petite question: addslashes suffit ou pas???
@++
R@f
Optitech
Messages postés134Date d'inscriptionsamedi 19 octobre 2002StatutMembreDernière intervention 3 janvier 2009 26 juil. 2006 à 09:54
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
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 26 juil. 2006 à 09:30
"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() :)
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 25 juil. 2006 à 22:23
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
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 25 juil. 2006 à 21:10
Pas besoin de connection active pour mysql_real_escape_string()... .. . ;o)
@ tchaOo°
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 25 juil. 2006 à 20:09
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
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 25 juil. 2006 à 18:34
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é
19 mai 2010 à 00:08
28 avril 2009 à 22:01
$_POST['search_text'] contient l'entrée de l'utilisateur, tu peux l'afficher!
Bonne soirée!
Raf
28 avril 2009 à 17:07
<?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'] . '
' . 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'] ) , '
' , stripslashes( $row['Contenu'] ) , '
<hr />';
}
mysql_close();
?>
Je ne suis que débutant en PHP, pourez-tu m'aider? merci d'avance
tom
17 mars 2009 à 15:21
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
22 juil. 2008 à 14:31
--->
$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
22 juil. 2008 à 14:23
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
22 juil. 2008 à 11:48
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
22 juil. 2008 à 11:43
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
2 juin 2008 à 17:54
2 juin 2008 à 17:53
Utilise le forme, stp....
@++
R@f
2 juin 2008 à 15:48
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>
<center>
Résultats de la recherche</center>
<?php
$zone_fr=$_POST['zone_fr'];
$niveau=$_POST['niveau'];
$vent_opt=$_POST['vent_opt'];
$envoyer=$_POST['envoyer'];
if(isset($_POST['envoyer'])) $envoyer=$_POST['envoyer'];
else $envoyer="";
if ($zone_fr=="" && $niveau=="" && $vent_opt=="")
{echo "<center> Veuillez remplir au moins un champ!! </center>";}
elseif($envoyer == 'Recherche ')
{
echo' ' ;
echo'
';
echo'
';
if(isset($_POST['zone_fr'])) $zone_fr =$_POST['zone_fr'];
else $zone_fr= "";
if(isset($_POST['niveau'])) $niveau=$_POST['niveau'];
else $niveau="";
if(isset($_POST['vent_opt'])) $cms=$_POST['vent_opt'];
else $vent_opt="";
include("connectionkite.php");
$connect = connectToBasec();
;
$sql "SELECT DISTINCT zone.zone_fr,zone.spot,zone.ID_spot,session.sess_type,session.niveau,session.vent_opt FROM zone,info,session WHERE zone.ID_spot info.ID_spot and zone.zone_fr like '%$zone_fr%' and session.niveau like '%$niveau%' and session.vent_opt like '%$vent_opt%'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$result="0";
//Test du résultat
while($data = mysql_fetch_assoc($req)){$result="1";}
//Affichage des données.
if ($result=="0"){
echo"<center> Aucun enregistement retourné ... </center>
";
}
else{
//affichage des données
echo'';
echo'----
';
echo'<center>zone</center>,
<center>spot</center>,
<center>niveau</center>, <center>type de session</center>, <center>Numeros</center>, <center>Détails</center>, ';
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data=mysql_fetch_assoc($req))
{
$zone_fr=$data['zone_fr'];
$niveau=$data['niveau'];
$vent_opt=$data['vent_opt'];
$ID_spot=$data['ID_spot'];
echo'----
';
echo'<center>'.$data['zone_fr'].', </center>
<center>'.$data['spot'].', </center>
<center>'.$data['niveau'].', </center><center>'.$data['sess_type'].', </center><center>'.$data['ID_spot'].', </center>';
echo'';
echo" <center></center>";
echo', ';
}}
echo'
';
echo'
';
echo'
';
}
?>
</html>
merci d'avance
25 févr. 2008 à 20:40
$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.
19 févr. 2008 à 19:08
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
15 févr. 2008 à 21:37
Mais cela peut-être une amélioration à apporter a ton source, qui reste tout a fait performant :p
5 févr. 2008 à 19:11
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
1 févr. 2008 à 15:26
ou je doit mettre le while, le code...
merci de votre aide
11 janv. 2008 à 23:18
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
9 janv. 2008 à 15:01
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.
8 janv. 2008 à 12:47
a quoi servent $sql['select'] et $sql['count'] que tu as mis en commentaire?
7 janv. 2008 à 18:15
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.
5 janv. 2008 à 14:03
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
4 janv. 2008 à 12:43
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)
4 janv. 2008 à 11:56
4 janv. 2008 à 11:12
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
3 janv. 2008 à 17:22
il font comment google pour avoir le mot approchant le plus quand on se trompe...???
13 nov. 2007 à 21:25
Raf
13 nov. 2007 à 13:12
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!
10 nov. 2007 à 09:13
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
9 nov. 2007 à 10:59
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
bien d'autre du même style, en tenant compte de la casse,
de la gestion du pluriel";
echo '
Message original avec des majuscules et des mots au pluriel :
'.$message.'
';
//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
6 nov. 2007 à 21:20
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
6 nov. 2007 à 12:07
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
3 sept. 2007 à 18:19
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
3 sept. 2007 à 15:42
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 '
';
echo ''.$row['titre'].'
';
// On enlève les éventuels antislash PUIS on crée les entrées en HTML (
)
$contenu = nl2br(stripslashes($row['contenu']));
echo $contenu;
echo '';
echo $row['nb_notes'];
if($row['nb_notes'] <= 1) {echo ' vote';}
if($row['nb_notes'] > 1) {echo ' votes';}
echo ', ';
if($row['id'] == $_POST['video_id'])
{
echo $deja_vote;
echo $vote_ajoute;
}
echo ', ';
if($row['note'] == 0) {echo '';}
if($row['note'] == 1) {echo '';}
if($row['note'] == 2) {echo '';}
if($row['note'] == 3) {echo '';}
if($row['note'] == 4) {echo '';}
if($row['note'] == 5) {echo '';}
echo '
';
//echo '<form method="post" action="'.$_SERVER["REQUEST_URI"].'">';
//echo '';
//echo '';
//echo '';
//echo '';
//echo '';
//echo '';
//echo '';
//echo '';
//echo '
';
//echo '</form>';
echo '';
echo 'le ';
echo date('d/m/Y à H\hi', $row['timestamp']);
echo '';
echo '
';
// Affichage de la PUB
include($DOCUMENT_ROOT.'/pub.php');
//else echo 'Pas d\'enregistrements dans cette categorie...';
mysql_free_result($result);
echo '
';
// 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 '
';
}
Merci
3 sept. 2007 à 14:41
@++
R@f
3 sept. 2007 à 14:40
Merci
3 sept. 2007 à 14:26
Envoie moi ton email ou msn par MP, je peux éventuellement regarder ton code...
@++
R@f
3 sept. 2007 à 14:23
Oui il a bien submit a name
3 sept. 2007 à 14:06
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
3 sept. 2007 à 14:01
Voici ce que j'ai mis :
if (isset( $_POST['submit'] == true)
{
La requette
}
Merci pour ton aide
3 sept. 2007 à 12:27
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
3 sept. 2007 à 12:26
2 sept. 2007 à 21:41
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
2 sept. 2007 à 21:07
<?php
// On recupère les fichier necessaire
include "header.php";
include "search.class.php";
?>
Recherche :
<form action="search.php" method="post">
Rechercher tous les mots
Rechercher un de ces mots
Rechercher l'expression exacte
</form>
<?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 '
';
echo $row['contenu'];
echo '
';
}
?>
Cela ne m'affiche rien mis appart les tirer, et si j'ai 3 resultat il y aura 3 ligne de tirer
2 sept. 2007 à 10:32
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
2 sept. 2007 à 00:22
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
23 août 2007 à 16:16
24 juil. 2007 à 21:36
merci
24 juil. 2007 à 21:17
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
24 juil. 2007 à 21:02
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'] ) , '
' , stripslashes( $row['content'] ) , '
<hr />';
}
?>
24 juil. 2007 à 19:07
Indique nous quelle est la ligne 148 stp, :)
@++
R@f
24 juil. 2007 à 13:06
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'] ) , '
' , stripslashes( $row['content'] ) , '
<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...
17 juil. 2007 à 18:19
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
17 juil. 2007 à 00:01
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 ?
16 juil. 2007 à 08:05
Merci pour tes commentaires, :)
@++
R@f
16 juil. 2007 à 00:00
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
@++
15 juil. 2007 à 23:29
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 ;)
10 juil. 2007 à 11:50
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
13 juin 2007 à 19:33
@ plouche !
Straw
13 juin 2007 à 19:14
$row = mysql_fetch_row( $rs3 );
echo $row[0];
@++
R@f
12 juin 2007 à 18:28
J'aimerais juste pouvoir afficher le nombre de résultats obtenus : voici mon code :
$rs3 = mysql_query($sql['count']) or die(mysql_error());;
echo "
" . $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?
24 mai 2007 à 19:27
Avec mysql_error( ) affiche l'erreur... T'es sûr que ca vient pas de ton between?
@++
R@f
23 mai 2007 à 10:54
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
23 mai 2007 à 09:49
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.
22 mai 2007 à 19:49
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
22 mai 2007 à 14:34
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 .
21 mai 2007 à 15:42
10 mai 2007 à 11:47
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.
10 mai 2007 à 11:36
8 mai 2007 à 11:48
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 , '
' , $contenu , '
<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
7 avril 2007 à 18:48
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
5 avril 2007 à 11:45
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
24 janv. 2007 à 16:54
coockiesch ta source est nickel c'est exactement ce que je cherchait merci ;-) Pas une seule erreur !
10/10
@++
22 nov. 2006 à 14:41
@ tchaOo°
22 nov. 2006 à 13:48
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
27 sept. 2006 à 10:41
26 sept. 2006 à 18:36
- 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
26 sept. 2006 à 14:18
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'] ) , '
' , stripslashes( $row['what'] ) , '
<hr />';
}
26 sept. 2006 à 12:13
@++
R@f
26 sept. 2006 à 11:51
26 sept. 2006 à 11:12
@ tchaOo°
26 sept. 2006 à 10:43
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
26 sept. 2006 à 10:06
Après le
$sql = $s->mkQuery( ... );
echo $sql['select'] . '
' . mysql_error();
Et tu peux nous dire ce que ca affiche!
@++
R@f
26 sept. 2006 à 09:51
$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 ?
26 sept. 2006 à 09:39
$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
26 sept. 2006 à 09:33
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'] ) , '
' , stripslashes( $row['what'] ) , '
<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
26 sept. 2006 à 09:22
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
26 sept. 2006 à 09:12
26 sept. 2006 à 08:45
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+
26 sept. 2006 à 08:37
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+
25 sept. 2006 à 18:10
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
25 sept. 2006 à 14:04
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+
25 sept. 2006 à 12:20
J'ai fait ça: http://www.phpcs.com/codes/NUMEROS-PAGE_24067.aspx
@++
R@f
25 sept. 2006 à 11:11
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
25 sept. 2006 à 10:58
// 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'] ) , '
' , stripslashes( $row['texte'] ) , '
<hr />';
}
@++
R@f
25 sept. 2006 à 10:26
merci encore de ton aide
as-tu un exemple ?
25 sept. 2006 à 10:13
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
25 sept. 2006 à 09:57
25 sept. 2006 à 08:43
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
24 sept. 2006 à 15:05
24 sept. 2006 à 14:09
@ tchaOo°
24 sept. 2006 à 11:47
merci d'avance
8 sept. 2006 à 16:57
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°
8 sept. 2006 à 16:16
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
8 sept. 2006 à 15:55
BTajv@hotmail.com
Merci d'avance CORTANA
8 sept. 2006 à 15:21
@++
R@f
8 sept. 2006 à 14:52
8 sept. 2006 à 14:37
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
8 sept. 2006 à 12:44
8 sept. 2006 à 12:43
Je te remerci d'avance.
Cortana
8 sept. 2006 à 12:41
Il cherche dans les champs de la bdd... :)
@++
R@f
8 sept. 2006 à 11:17
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
9 août 2006 à 03:06
Et là je met 9/10.(Le code pourrai faire la recherche lui même et ne pas donné que la requète).
4 août 2006 à 10:05
DOM_PONGE > Tu peux tjs demander des infos, si ça bug, :)
@++
R@f
4 août 2006 à 08:53
4 août 2006 à 04:44
4 août 2006 à 03:56
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é.
26 juil. 2006 à 23:34
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.
26 juil. 2006 à 13:03
Mais vais laisser comme ça, que chacun ait le choix de se connecter ou pas avant... :)
@++
R@f
26 juil. 2006 à 12:53
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.
26 juil. 2006 à 11:45
Petite question: addslashes suffit ou pas???
@++
R@f
26 juil. 2006 à 09:54
Moi ce que j'aime bien dans ta source c'est les commentaires !
Beau boullot
26 juil. 2006 à 09:30
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() :)
25 juil. 2006 à 22:23
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
25 juil. 2006 à 21:10
@ tchaOo°
25 juil. 2006 à 20:09
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
25 juil. 2006 à 18:34
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é