PHP Recherche chaîne de caractère

regisgb17 Messages postés 25 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 17 mars 2010 - 9 mars 2010 à 19:23
regisgb17 Messages postés 25 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 17 mars 2010 - 17 mars 2010 à 22:57
Bonjour,

Sur mon site www.alpesfaune.fr j'ai créé une recherche de photos.

J'utilise en php la fonction eregi() qui recherche si une chaîne de caractère est contenue dans une autre sans tenir compte des majuscules.

Comment faire pour ne pas tenir compte des accents ? et des caracteres spéciaux..

Merci

Régis
http://alpesfaune.fr

9 réponses

kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
9 mars 2010 à 21:51
Salut,

Il manque à mon sens des précisions :
- que souhaites tu (très) précisément ?
où se trouve la chaîne dans laquelle chercher ? En DB ? dans un répertoire ? un
fichier texte contenant des mots clés ? autre ?
- quelle est la regex que tu utilises ?
- quel traitement, si il y a, effectues tu pour les données postées ?
- etc ...

eregi() est dépréciée, utilise plutôt preg_match()


Merci pour le site, c'est un régal !!
Superbes photos, ... chapeau bas
J'avais déjà eu l'occasion de le consulter, mais pas de faire part de mes impressions (sur le contenu, pas la forme ) voilà qui est fait.

Dommage cependant que l'ergonomie ne soit pas top et que ces affreuses pubs google viennent tout gâcher (sont elles vraiment nécessaires ??)


Cordialement,

Kohntark -
0
regisgb17 Messages postés 25 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 17 mars 2010 1
10 mars 2010 à 10:30
Merci ta réponse et pour tes commentaires sur les photos n'hesites pas à t'inscires pour qu on puisse te prevenir quand il y a de nouvelles photos..;

Pour la pub si ca peu arrondir mes fin de mois c'est cool, je ne l'ai mise en place que depuis 3 jours. et j'ai essayé de la faire discrete (couleur de fond)...



Pour la recherche:
Détail du fonctionnement:
En BDD:
1 num par photo
avec son nom

Donc je fais une recherche comme ca en php:

[...]
$var = mysql_query("SELECT (num de la photo), (nom photo) FROM photos");
while ($row = mysql_fetch_assoc($var))
{
if(eregi($rech,$row["(nom de la photo)"]))
[...]

$rech étant la recherche que tu fais...


Voila si il y a une meilleure facon je suis preneur...

Merci

Régis
http://alpesfaune.fr
0
regisgb17 Messages postés 25 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 17 mars 2010 1
16 mars 2010 à 09:53
Pour info j'ai fais:

strtr($var,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');

pour remplacer les caracteres accentués par des non accentués...

Régis
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
16 mars 2010 à 20:40
Salut,

Attention :
L'utilisation de strtr() va poser problème si tu utilises un encodage UTF-8. Penses y dès maintenant histoire d'éviter les problèmes futurs, parce qu'un jour ou l'autre faut bien y passer hein
Remplace donc par str_replace() qui gère sans soucis les différents encodages.

Ta solution en est certes une, mais elle n'est pas la meilleure, et encore moins la plus simple.
Pourquoi ne fais tu pas simplement :

SELECT num_de_la_photo, nom_photo FROM photos
WHERE nom_photo LIKE '%ce_que_l_utilisateur_a_posté%'

Tu récupères ainsi le ou les résultats qui peuvent intéresser le visiteur sans passer par le traitement php/regex.
Mais ça reste loin du moteur de recherche !
Peut être devrais tu mettre en place un système de mots clés ?

Pour la pub si ca peu arrondir mes fin de mois c'est cool, je ne l'ai mise en place que depuis 3 jours. et j'ai essayé de la faire discrete (couleur de fond)...

Ben j'trouve que c'est loupé !! Ce n'est pas discret du tout et ça défigure gravement le site, d'autant plus que ton design est très simpliste, ce que je considère, mais c'est personnel, comme une qualité, même si quelques artifices ne nuiraient pas, et pourquoi pas un petit texte accompagnant les photos.

Tu as retouché n'est ce pas ? ... je demande car il me semblait que ces fâcheuses pubs prenaient plus de place la dernière fois et que le "Pour ne plus
voir la PUB Inscrivez vous" n'existait pas.

Concernant un "arrondissement des fins de mois" je doute fort que tu t'y retrouves avec le nombre de visiteurs que tu as.

Ce que je pense :
- la pub ... beurk (je ne m'étends pas plus)
- tu as de très bonnes photos
- la rubrique carte est une bonne idée

Pourquoi ne pas étoffer cette dernière rubrique en :
- personnalisant le message du recto (parce que "bonne année 2010" ça risque de ne plus intéresser grand monde) selon le souhait de l'utilisateur
- améliorant (grandement) la présentation du message
- mettant un peu plus en avant ton site, sans pour autant retomber dans le piège de la pub
- etc ...

Il y a à mon avis des choses à faire de ce côté, qui pourraient je pense remplacer avantageusement la pub, en mettant en place un service payant qui proposerait des avantages face au gratuit.

... me suis envoyé une carte :
- un/des F5 (actualiser) envoie autant de fois le mail, le formatage présente des défauts
- le "Si vous avez des difficultés pour visualiser ce message, cliquez sur le lien suivant: ..." ne reprends pas le message
- ...

Bref, tu l'auras compris, j'aime pas ces pubs, alors je m'inscris :
"Identifiant et Mot de passe limités à 8 carractères"
=> est ce vraiment une bonne idée ? Qu'est ce qui peut le justifier ?
Pour le mdp passe encore (et encore !!) mais l'identifiant ?

Je réduis la taille de mon pass
=> "Warning: Cannot modify header information - headers already sent by (output started at /homez.42/alpesfau/www/inscription.php:83) in /homez.42/alpesfau/www/inscription.php on line 84"

... ça à l'air de passer malgré tout.

Je confirme, sans les pubs c'est bien mieux !!


Cordialement,



Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
16 mars 2010 à 20:55
... et puis comment fait on pour se reconnecter ??



Kohntark -
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
16 mars 2010 à 20:57
OK, faut retourner sur la page d'accueil ... pas très ergonomique !!



Kohntark -
0
regisgb17 Messages postés 25 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 17 mars 2010 1
17 mars 2010 à 16:48
Tout d'abord merci de tous ces commentaires qui ne peuvent que m aider a améliorer le site.
Juste pour info, je ne passe pas assez de temps sur l'evolution du site, je dev pour le plaisir... de temps a autre...


Ta solution en est certes une, mais elle n'est pas la meilleure, et encore moins la plus simple.
Pourquoi ne fais tu pas simplement :

SELECT num_de_la_photo, nom_photo FROM photos
WHERE nom_photo LIKE '%ce_que_l_utilisateur_a_posté%'


Super ta solus c'est exactement ce que je cherché... Mais le defaut c'est que like est sensible aux accents... Donc il faut que je cré des keywords... ce qui implique plusieurs modifs... C'est donc une évolution a venir...


Ben j'trouve que c'est loupé !! Ce n'est pas discret du tout et ça défigure gravement le site, d'autant plus que ton design est très simpliste, ce que je considère, mais c'est personnel, comme une qualité, même si quelques artifices ne nuiraient pas, et pourquoi pas un petit texte accompagnant les photos.



le css est une évolution en vue pour améliorer l'ergonomie mais ce n'est pas pour tout de suite...
et le texte accompagnant les photos est une bonne idée...


Tu as retouché n'est ce pas ? ... je demande car il me semblait que ces fâcheuses pubs prenaient plus de place la dernière fois et que le "Pour ne plus
voir la PUB Inscrivez vous" n'existait pas.


Et bien oui j'ai pris en compte tes remarques. Trop de pub gâche les photos... Donc ceux qui sont inscrits n'ont pas de pub... je pense que c'est un bon équilibre... Merci de t'être inscrit... c cool...


Pour tous tes conseils sur les cartes je suis d'accord avec toi, j'y avais pensé... mais je n'ai pas encore eu le temps de le mettre en place...


Pour la limite du nombre de caractères je ne vois pas non plus de bonne raison, je ne me souviens pas pourquoi cette limite... a corriger...


Et pour le bugg je m'en occupe tres vite...



Encore merci de tes conseils et avis...

J'espère a très bientôt sur Alpes Faune...

Régis
http://www.alpesfaune.fr
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
17 mars 2010 à 22:23
Mais le defaut c'est que like est sensible aux accents... Donc il faut que je cré des keywords... ce qui implique plusieurs modifs... C'est donc une évolution a venir...

Non, LIKE n'est pas sensible aux accents en soi. C'est la collation MySQL qui détermine son comportement et celui de bien d'autres fonctions.
Par exemple, si tu est encodé UTF-8 dans ta DB :
choisir une collation UTF8_general_ci ne tiendra compte ni de la casse, ni des accents, et de ce fait tu peux passer directement une requête similaire à celle de mon exemple.
Par contre une collation UTF8_bin prendra en compte la casse (MACHIN != machin) et les accents.
Choisir la première est souvent une bonne idée, sachant que tu peux spécifier ces collations à différents niveaux (la base, la connexion, les champs, ...) et surtout que tu peux le faire dynamiquement; ainsi, en admettant que tu sois en utf8 avec une collation en utf8_bin (donc dépendant de la casse et des accents) :

SELECT num_de_la_photo, nom_photo
FROM photos
WHERE nom_photo COLLATE utf8_general_ci
LIKE '%ce_que_l_utilisateur_a_posté%' 


permettra de faire une recherche sans tenir compte de la casse et des accents (puisque collation utf8_general_ci).
C'est à mon sens bien plus pratique, et surtout plus fiable et rapide, que de passer par une fonction php.


En espérant que ça puisse t'aider.

Bonne soirée,

Kohntark -
0
regisgb17 Messages postés 25 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 17 mars 2010 1
17 mars 2010 à 22:57
merci

j esserai...

Bonne soirée


Régis
http://www.alpesfaune.fr
0