Je sais, j'aurais peut être mieux fait de lancer deux discutions diférentes mais comme les deux sont liés et que ma demande, c'est en vue d'utilisation du code que je fournis plus bas, je les regroupent en un seul.
Afin de gagner un peu de temps sur la programmation de mon site, j'aurais besoin d'une fonction qui transforme une simple chaine de caractère en sa regexp équivalente qui ne tiendraiss pas compte de la case.
Vu le nombre de personne sur ce forum qui utilisent les regexp, ca m'étonerais pas que l'un d'entre vous aient déjà fait ça et j'espère bien que l'un d'entre vous me fera part de son travail.
Pour le moment, j'ai fait le code qui récupére lesd donnée dans une base de données et qui les transforment comme il faut mais il faut pour celà que les données contenus dans la base soient déjà au format regexp ce qui m'oblige de faire baucoup d'essaies vu que c'est la première fois que j'utilises dzs regexp et donc je tombes dans toutes les erreurs possibles.
function req_liste_smilie($module,$section)
{ global $service_include;
return "SELECT CONCAT(\"/\",code,\"/\" ) code,CONCAT(\"<IMG SRC=\\\"/image/smilie/\",smilie,\"\\\" ALT=\\\"\",code,\"\\\">\" ) smilie,exemple FROM remplace_smilie,remplace_module WHERE remplace_smilie.groupe=remplace_module.groupe AND module=\"".$module."\" AND section=\"".$section."\" AND type=1";
}
function req_liste_code($module,$section)
{ global $service_include;
return "SELECT CONCAT(\"/\",code_deb,\"(.*)\",code_milieu,\"(.*)\",code_fin,\"/\" ) code, CONCAT(html_debut,\"\\\\1\",html_milieu,\"\\\\2\",html_fin) html,exemple FROM remplace_code,remplace_module WHERE remplace_code.groupe=remplace_module.groupe AND module=\"".$module."\" AND section=\"".$section."\" AND type=2";
}
function initialiseCodes2($module,$section)
{ global $code_code;
global $code_html;
global $code_exemple;
echo req_liste_code($module,$section)."<BR>";
$res=LanceRequete(req_liste_code($module,$section));
if ($sql_err==0)
{ while($arr=mysql_fetch_array($res))
{ $i=$i+1;
$code_code[$i]=$arr["code"];
$code_html[$i]=$arr["html"];
$code_exemple[$i]=$arr["exemple"];
} // while$arr=mysql_fetch_array($res)
}
}
function initialiseSmilies2($module,$section)
{ global $sql_err;
global $smilie_code;
global $smilie_image;
$i=0;
echo req_liste_smilie($module,$section)."<BR>";
$res=LanceRequete(req_liste_smilie($module,$section));
if ($sql_err==0)
{ while($arr=mysql_fetch_array($res))
{ $i=$i+1;
echo $arr["code"]."<BR>";
echo $arr["smilie"]."<BR>";
$smilie_code[$i]=$arr["code"];
$smilie_image[$i]=$arr["smilie"];
$smilie_exemple[$i]=$arr["exemple"];
} // while$arr=mysql_fetch_array($res)
}
}
function codetohtml2($texte)
{ global $code_code;
global $code_html;
return codetosmilie2(preg_replace($code_code,$code_html,$texte));
}
function codetosmilie2($texte)
{
global $smilie_code;
global $smilie_image;
return preg_replace($smilie_code,$smilie_image,$texte);
}
Petites explications sur ce code :
la fonction LanceRequete est une fonction que j'ai créé pour éviter d'écrire 2 fois les mêmes test. Elle soccupe d'exécuter la requête qu'on lui passe en paramêtre et retourne le résultat.
De plus elle afecte à la variable globale $sql_err les valeurs suivantes :
0 si pas d'erreur et des lignes sont retourné par la requête
1 si pas de valeur retourné par la requête alors qu'elle est bien exécuté par la bdd
2 si erreur dans la requête
Ca me permet ensuite de tester en une fois l'existance de résultat et la non erreur de la requête.
Du côté de la base de donnée, mes tables utilisé par ce code sont les suivantes :
CREATE TABLE remplace_code (
codeid int(10) unsigned NOT NULL auto_increment,
code_deb varchar(255) NOT NULL default '',
code_milieu varchar(255) NOT NULL default '',
code_fin varchar(255) NOT NULL default '',
html_debut varchar(255) NOT NULL default '',
html_milieu varchar(255) default NULL,
html_fin varchar(255) NOT NULL default '',
exemple varchar(255) NOT NULL default '',
groupe int(10) unsigned NOT NULL default '0',
PRIMARY KEY (codeid)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Structure de la table `remplace_module`
#
CREATE TABLE remplace_module (
moduleid int(10) unsigned NOT NULL auto_increment,
module varchar(255) NOT NULL default '',
section varchar(255) NOT NULL default '',
groupe int(10) unsigned NOT NULL default '0',
type tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (moduleid)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Structure de la table `remplace_smilie`
#
CREATE TABLE remplace_smilie (
smilieid int(10) unsigned NOT NULL auto_increment,
code varchar(255) NOT NULL default '',
smilie varchar(255) NOT NULL default '',
exemple varchar(255) NOT NULL default '',
groupe int(10) unsigned NOT NULL default '0',
PRIMARY KEY (smilieid)
) TYPE=MyISAM;
La table remplace_module sert à définir quelle partie du site va utiliser telle série de smilies et de formatage de texte. C'est utile pour diférencier les codes utiliser par tout le monde de ceux réservé aux news et de ceux réservé aux articles par exemples. Pour les colones section et module, la colone module sert à définir si c'est une demande du chat, du forum, du système de news ... et la colone news si c'est pour le titre de la news, le corps de la news ... (pour éviter de se retrouver avec une citation au milieu du titre par exemple)
Bon, me manque plus que la fonction dont j'ai parlé au début pour ne plus avoir à me casser la tête quand je rajoutes un smilie qui contient des caractère spéciaux. (des '*' , des '' par exemple)
Merci d'avance à ceux qui vont je l'espères me dépaner.
J'espère aussi que le code que je fournis là va aider quelques personnes.
EDIT : Modification de des deux requêtes pour éviter un bug d'affichage dans lun et pour avoir le code de départ dans la ALT de l'autre.
Message édité par omega2 le 08-09-2002 à 12:34:07