Vous n'êtes pas identifié(e).
Pages :: 1
bonjour,
sur mon site je veux faire un formulaire pour que les visiteurs puisse chercher dans ma base de donné, mais comment faire pour gérer plusieurs mots clé? et gérer également les +""and etc...
j'ai besoin d'aide
merci
Hors ligne
Saluton,
Il y a deux manières de gérer les recherches sur une base de données MySQL (si c'est bien le SGBDR que tu utilises), celle qui s'appuie sur l'opérateur LIKE et ses caractères JOKERS % et _
L'autre est de passer par l'indexation FULL TEXT, qui n'est possible qu'avec des tables MyISAM (ce qui, du coup, exclut InnoDB , les clefs étrangères, les triggers et les transactions) et qui utilise les opérateurs MATCH AGAINST.
Sans plus d'informations afférentes à ton projet, difficile de t'orienter vers une solution plutôt que l'autre.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
j'utilise mysql.
si j'ai une colonne "nom" et que dans le formulaire de recherche je met "royal" il me sort correctement ce que je cherche "Royal decameron costa..." par contre si je met "royal +costa" il me sort rien alors comment faire pour que le formulaire puisse lire l'operateur + comme dans un moteur de recherche. Et si le mot est mal ortaugraphier, par exemple : "reyal" est-ce possible de quand même afficher "royal....".
Hors ligne
Tu t'attaques à un gros morceau, et comme tu ne fournis pas le moindre bout de requête, il m'est difficile de t'orienter précisément.
Si tu veux faire de la recherche FULL TEXT, tout est là :http://dev.mysql.com/doc/refman/5.0/fr/ … earch.html.
Si tu veux juste combiner des LIKE avec des AND c'est plus simple.
Pour ce qui concerne les approximations orthographiques il faudra plutôt rechercher vers les SOUNDEX : http://forums.mysql.com/read.php?69,203569,203733.
Bonnes lectures.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Hello,
Sinon tu peux utiliser un moteur tout fait et franchement efficace (complètement in-maintenable mais efficace)
Ca s'appel PhpDig : Télécharger PhpDig
Et il gère les consonances et index pas mal les pages.
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
comment faire pour ajouter
MATCH nom AGAINST('".mysql_real_escape_string($_POST['search'])."')
la colonne nom est dans ma table hotel
a cette requete
$sql = 'SELECT hotel.nom, hotel.etoile, hotel.ville, hotel.web, photo.filepath, photo.filename, photo.numero FROM hotel, photo WHERE photo.nom = hotel.nom AND photo.numero="1" ';
Hors ligne
comment faire pour ajouter
MATCH nom AGAINST('".mysql_real_escape_string($_POST['search'])."')
la colonne nom est dans ma table hotel
a cette requete
La première des choses est de créer un index FULL TEXT sur la colonne hotel.nom et, donc, que la table hotel releve du MyISAM.
Ensuite d'utiliser la syntaxe normalisée pour les jointures.
J'ajoute que le recours malin à PDO, t'affranchirait, entre autres, des préoccupations de type mysql_real_escape_string.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
J'ajoute que le recours malin à PDO, t'affranchirait, entre autres, des préoccupations de type mysql_real_escape_string.
est-ce que tu pourrais m'expliquer un peu plus le PDO? car je suis pas certain d'avoir compris les explications que j'ai trouver sur google.
Hors ligne
Tout d'abord PDO (PHP Data Objects) implique PHP5.
Il s'agit d'une extension PECL de PHP qui fournit une classe d'abstraction d'accès aux bases de données.
En gros, quel que soit le SGBD (MySQL, SQLIte, PostgreSQL, Oracle,....) tu n'auras plus qu'une chose à changer, la chaîne de connexion, et ton code sera portable sur n'importe quel SGBD.
PECL, PHP Extension Community Library, est un ensemble d'extensions de PHP écrites en langage C. Ces extensions offrent des fonctionnalités impossibles à réaliser en PHP, certaines pour des raisons de performances, le langage C étant bien plus rapide que PHP.
Mais ce n'est pas tout, PDO se charge de l'encapsulation correcte des données dans les requêtes et surtout, autorise les requêtes préparées (prepared statements) ce qui peut copieusement booster les performances des requêtes itératives.
Il permet aussi, par le biais des exceptions, de gérer correctement les erreurs dans la communication avec le SGBD.
Je suis en train de traduire «Learning PHP Data Objects» et il est prévu que je rédige un tuto sur cette extension pour la V2 :
En attendant, tu n'es pas sans biscuit :
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
j'ai lu sur le sujet de PDO et j'ai commencer a l'utiliser sauf que la je suis bloquer.
rien ne s'affiche et j'ai aucun message d'erreur.
echo $data['nom'];
Hors ligne
J'imagine que tu as prélablement instancié PDO dans $db.
As-tu essayé comme cela :
La syntaxe avec les deux points doit requérir un jeu d'attributs en array en second paramètre de $db->prepare().
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
ca fonctionne, mais est-ce que seulement en utilisant PDO c'est assez ou je dois sécuriser mes variables qui sont passer par url
$statement = $db->prepare("SELECT filepath,filename,numero,nom FROM photo WHERE nom = :nom AND numero = '1'");
$statement->bindParam(":nom", $nom);
$statement->execute();
$data = $statement->fetch();
Hors ligne
Tu n'as donc pas encore lu toute la doc (moi non plus, je te rassure).
Jette un œil sur PDO::quote() qui protège une chaîne pour l'utiliser, justement, dans une requête SQL PDO::prepare().
Attention toutefois
numero ='1'
si numero est numérique il vaudrait mieux enlever les quotes autour du 1.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
merci pour l'info, mais peut importe ou je met le quote() ca fonctionne pas.
alors pourrais tu m'éclairer pour me dire ou placer le quote. si je le met
$nom = quote($_GET['nom']);
ca ne fonctionne pas
et la non plus
$statement = $db->prepare("SELECT filepath,filename,numero,nom FROM photo WHERE nom = quote(:nom) AND numero = '1'");
et la non plus
$statement->bindParam(":nom", quote($nom));
pourtant la doc n'est pas difficile a comprendre
Hors ligne
quote() n'est pas une fonction PHP, c'est une méthode $db->quote($nom)
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
En fait, il y a mieux :
Et PDO va prendre soin, tout seul, de mettre des quotes où il faut sur les données en entrée.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Pages :: 1