PHP / MySQL : Rechercher un mot dans une base avec REGEXP

Posté par : Neg le : 2010-03-02 12:55:34



Pour effectuer une recherche dans le champ d'une table d'une base de données on peut utiliser la fonction LIKE avec les jokers %. Ainsi pour chercher si un champs contient "jour" on lance une requête du type :
SELECT mon_champ FROM ma_table WHERE mon_champ LIKE '%jour%'


Seulement, la requête va aussi nous retourné le résultat si le champ contient "bonjour" ou "abajour". Le mot "jour" n'étant pas forcément entouré d'espaces (si il est en début ou fin de champs, ou encore entre parenthèses ou guillemets) utiliser LIKE '% jour %' ne fonctionnera pas correctement non plus.

MySQL fournit dans ce cas la fonction REGEXP qui permet des recherches complexes utilisant les expressions régulières. Pour trouver un mot isolé on doit alors utiliser une requête comme celle ci :
SELECT mon_champ FROM ma_table WHERE mon_champ REGEXP '[[:<:]]jour[[:>:]]'


Pour aller un peu plus loin, si on tape plusieurs mots dans le champ de recherche il convient de les séparer et de les chercher séparément pour que le résultat soit convenable. Voila le traitement php à faire pour ce travail :
//$chaine étant la chaine complète à rechercher, on commence par séparer et compter les différents mots de la chaine :
$chaine=explode(' ', $chaine);
$nb=count($chaine);
//on declare une variable vide, et si il y'a plusieurs mots, pour chacun on incrémente sa recherche à la variable :
$req_sup='';
if($nb>1)
{
for($i=1;$i<$nb;$i++)
{
$req_sup.=" AND mon_champ REGEXP '[[:<:]]".$chaine[$i]."[[:>:]]' "
}
}
//on ajoute $req_sup à notre requete avec le premier mot, il suffira ensuite d'exécuter la requête.
$req="SELECT mon_champ FROM ma_table WHERE mon_champ REGEXP '[[:<:]]".$chaine[0]."[[:>:]]' ".$req_sup.""

lien direct : http://www.chezneg.fr/leblog/chezneg-leblog.php?id_art=232&titre=PHP-/-MySQL-:-Rechercher-un-mot-dans-une-base-avec-REGEXP
tags : Informatique (59), php (14), SQL (3),


J'aime, 3 personnes aiment çaCommentaire(s)(0)

Opium du peuple - Les corons (Clip)

Posté par : Neg le : 2010-02-22 11:36:02





le myspace du groupe de punk rock de variété

lien direct : http://www.chezneg.fr/leblog/chezneg-leblog.php?id_art=231&titre=Opium-du-peuple---Les-corons-(Clip)
tags : Artistes/Groupes (26), clip (15), musique (20), Vidéos (24), rock (3), punk (2),


J'aime, 2 personnes aiment çaCommentaire(s)(0)

la rue brikabrak

Posté par : Neg le : 2010-02-05 12:00:38



Ca m'amuse :
American Apparel lance un concours de culs

Ca m'énerve :
C'est la crise alors on a droit aux pratiques anti concurrentielles. il faut augmenter l'age de la retraite pour rééquilibrer le bilan, mais pas de limites

Pour toi public :
sortie de l'album les temps modernes d'Alonzo
sortie de l'album rêve général(e) d'Agnès Bihl

Dév' :
L'équipe de Facebook réécrit le runtime PHP pour ses besoins

lien direct : http://www.chezneg.fr/leblog/chezneg-leblog.php?id_art=230&titre=la-rue-brikabrak
tags : brève (25), Artistes/Groupes (26), actualité (33),


J'aime, 2 personnes aiment çaCommentaire(s)(0)

Calendrier Aubade : Fevrier 2010

Posté par : Neg le : 2010-02-01 11:07:15



lien direct : http://www.chezneg.fr/leblog/chezneg-leblog.php?id_art=229&titre=Calendrier-Aubade-:-Fevrier-2010
tags : Photos (22), fille (17), sexy (19), Aubade (12),


J'aime, 3 personnes aiment çaCommentaire(s)(0)

Verifier le format d'un e-mail en php

Posté par : Neg le : 2010-01-29 11:12:47



Lors de formulaire d'inscription sur un site, l'e-mail est demandé à l'internaute. Il s'agit ensuite de vérifier si la chaine entrée correspond bien au format d'un e-mail (chaine@chaine.ext).

Pour cela on utilisait jusqu'à présent les expressions régulières. Voici la fonction que j'utilisais :

//fonction vérifiant la validité d'un email
//attend la chaine a vérifier en parramètre
//renvoi une chaine vide si l'e-mail est valide
//sinon renvoi une indication sur l'erreur

function fct_verif_mail($mail)
{
$retour='';
$mail=trim($mail);
if($mail==="")
{
$retour="L'e-mail ne peut pas être vide ! ";
}
else
{
$atom = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';
$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';

$regex = '/^' . $atom . '+' .
'(\.' . $atom . '+)*' .
'@' .
'(' . $domain . '{1,63}\.)+' .
$domain . '{2,63}$/i';

if (!preg_match($regex, $mail))
{
$retour="L'adresse e-mail doit être valide ! ";
}
}
return $retour;
}


Seulement cette utilisation n'est plus à l'ordre du jour, en effet depuis php 5.2 la fonction filter_var() a fait son apparition.
Elle permet, entre autre, de vérifier le format d'un e-mail. La fonction à utiliser pour vos prochains développements serait donc :

function fct_verif_mail($mail)
{
$retour='';
$mail=trim($mail);
if($mail==="")
{
$retour="L'e-mail ne peut pas être vide ! ";
}
elseif(filter_var($mail, FILTER_VALIDATE_EMAIL) === FALSE)
{
$retour="L'adresse e-mail doit être valide ! ";
}
return $retour;
}


Source

Note à moi même : penser à faire cette modification pour mes futurs formulaires.


lien direct : http://www.chezneg.fr/leblog/chezneg-leblog.php?id_art=227&titre=Verifier-le-format-d'un-e-mail-en-php
tags : Informatique (59), php (14),


J'aime, 5 personnes aiment çaCommentaire(s)(0)

Page Suivante

propulsé par Neg