le 24/01/2005 à 18:29
i M@N
Hello !
J'ai fait un système de gestion de smilies.
Y'a une page avec un formulaire qui contient un JavaScript (adapté du script de Lefounard et que j'ai modifié pour le rendre compatible iE & Mozilla),
un script qui met la liste des smilies à jour et crée les liens JavaScript pour insérer un smiley à l'endroit du curseur,
une page pour afficher les messages,
enfin un script qui crée un code PHP à base de str_replace pour afficher les smilies.
iMPORTANT : Vous devez créer un répertoire smilies et y mettre vos smilies,
le formulaire doit s'appeler formulaire
le champ où on insère les smilies doit s'appeler texte :
dans otre fichier qui affichent les messages la variable qui contient les données issues du champ "texte" du formulaire doit s'appeller $texte,
ensuite il suffit de lancer le script qui génère smilies_replace.txt.
C'est parti !!
PAGE FORMULAiRE :
SCRiPT QUI CREE LA LiSTE DES SMiLiES (smilies.txt) :
PAGE TRAiTEMENT (message_traitement.php) :
LA PAGE QUi AFFiCHE VOS MESSAGES (messages.php) :
LE SCRiPT QUi GENERE smilies_replace.txt :Have fun,
@+...
J'ai fait un système de gestion de smilies.
Y'a une page avec un formulaire qui contient un JavaScript (adapté du script de Lefounard et que j'ai modifié pour le rendre compatible iE & Mozilla),
un script qui met la liste des smilies à jour et crée les liens JavaScript pour insérer un smiley à l'endroit du curseur,
une page pour afficher les messages,
enfin un script qui crée un code PHP à base de str_replace pour afficher les smilies.
iMPORTANT : Vous devez créer un répertoire smilies et y mettre vos smilies,
le formulaire doit s'appeler formulaire
le champ où on insère les smilies doit s'appeler texte :
<form action="./message_traitement.php" method="post" name="formulaire">
...
<b>Message :</b>
<input type="text" name="texte" maxlength="150" size="25" onchange="setPosCurseur()" onclick="setPosCurseur()">';
dans otre fichier qui affichent les messages la variable qui contient les données issues du champ "texte" du formulaire doit s'appeller $texte,
ensuite il suffit de lancer le script qui génère smilies_replace.txt.
C'est parti !!
PAGE FORMULAiRE :
<html>
<head>
<title>Smilies</title>
<SCRIPT TYPE="text/javascript">
var g_posCurseur;
function setPosCurseur()
{
g_posCurseur = getPosCurseur(formulaire.texte);
}
function getPosCurseur(oTextArea)
{
var sAncienTexte = oTextArea.value;
var oRange = document.selection.createRange();
var sAncRangeTexte = oRange.text;
var sMarquer = String.fromCharCode(28)+String.fromCharCode(29)+String.fromCharCode(30);
oRange.text = sAncRangeTexte + sMarquer; oRange.moveStart('character', (0 - sAncRangeTexte.length - sMarquer.length));
var sNouvTexte = oTextArea.value;
oRange.text = sAncRangeTexte;
for (i=0; i <= sNouvTexte.length; i++)
{
var sTemp = sNouvTexte.substring(i, i + sMarquer.length);
if (sTemp == sMarquer)
{
var cursorPos = (i - sAncRangeTexte.length);
return cursorPos;
}
}
}
function insereChaine(sChaine)
{
if (typeof(g_posCurseur)=='undefined')
{
formulaire.texte.value+=sChaine;
}
else
{
var firstPart = formulaire.texte.value.substring(0, g_posCurseur);
var secondPart = formulaire.texte.value.substring(g_posCurseur,formulaire.texte.value.length);
formulaire.texte.value = firstPart + sChaine + secondPart;
}
}
</SCRIPT>
</head>
<body>
<center>
<form action="./message_traitement.php" method="post" name="formulaire">
<b>Auteur :</b>
<input type="text" name="auteur" size="25">
<b>Message :</b>
<input type="text" name="texte" maxlength="150" size="25" onchange="setPosCurseur()" onclick="setPosCurseur()">';
<input type="submit" value="Poster" size="10">
</form>
<?
/*fichier inclu qui affiche la liste des smilies et crée les liens JavaScript pour les insérer à l'endroit du curseur (voir ci-dessous le code de smilies.txt)*/
include('./smilies.txt');
?>
</center>
</body>
</html>
SCRiPT QUI CREE LA LiSTE DES SMiLiES (smilies.txt) :
<b>Pour ajouter un smiley à votre message, cliquez dessus.</b>
<?
$path = "./smilies/";
$dossier = opendir ($path);
while ($fichier = readdir ($dossier)) {
if ($fichier != "." && $fichier != ".." && $fichier != "index.php") {
$tableau[] = $fichier;
}
}
closedir ($dossier);
echo '<center>';
sort($tableau);
for($i=0;$i<count($tableau);$i++){
/*les valeurs que l'on souhaite afficher*/
$image=$tableau[$i];
echo "<a href=\"javascript:insereChaine(':".$tableau[$i].":')\"><img src=\"".$path.$tableau[$i]."\" align=\"absMiddle\" border=\"0\" alt=\"".$tableau[$i]."\" title=\"".$tableau[$i]."\"></a> ";
}
echo '</center>';
?>
PAGE TRAiTEMENT (message_traitement.php) :
<?
if (isset($_POST['auteur'])) $auteur = $_POST['auteur']; else $auteur = "";
if (isset($_POST['texte'])) $texte = $_POST['texte']; else $texte = "";
/*on se connecte à notre base*/
include("./base_connexion.php");
/*fonction nous permettant de faire des redirections*/
function redirection($url){
if (headers_sent()){
print('<meta http-equiv="refresh" content="0;URL='.$url.'">');
}
else {
header("Location: $url");
}
}
/*on teste le contenu de la variable $auteur*/
if ($auteur=="") {
echo '<body onLoad="alert(\'Aucun auteur de précisé...\')">';
redirection('./');
exit;
}
/*on teste le contenu de la variable $texte*/
else if ($texte=="") {
echo '<body onLoad="alert(\'Le texte est vide...\')">';
redirection('./');
exit;
}
/*si tout est bon, on peut commencer l'insertion dans la base*/
else {
// on recupere la date de l'instant présent
$date = date("Y-m-d H:i:s");
// lancement de la requête d'insertion
$sql = "INSERT INTO messages VALUES('','$auteur','$date','$texte')";
/*on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)*/
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
/*on ferme la connexion à la base de données*/
mysql_close();
/*on redirige*/
redirection('./messages.php');
/*on termine le script courant*/
exit;
}
?>
LA PAGE QUi AFFiCHE VOS MESSAGES (messages.php) :
<?
/*on se connecte à notre base*/
include("./base_connexion.php");
/*lancement de la requête. on sélectionne les messages que l'on va ordonner suivant l'ordre "inverse" des dates (de la plus récente à la plus vieille : DESC)*/
$sql = 'SELECT id,auteur,date,texte FROM messages ORDER BY date DESC';
/*on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)*/
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
// on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($req)) {
/*on récupère les valeurs qui nous intéressent*/
$id_message = $data['id'];
$auteur = $data['auteur'];
$date = $data['date'];
/*la variable qui contient les données issues du champ "texte" du formulaire doit s'appeller $texte*/
$texte = $data['texte'];
/*on décompose la date*/
sscanf($date, "%4s-%2s-%2s %2s:%2s:%2s", &$an, &$mois, &$jour, &$heure, &$min, &$sec);
/*anti code*/
$texte = htmlentities ($texte);
/*Smilies*/
include('./smilies_replace.txt');
/*on affiche les résultats*/
echo '<b>'.$jour.'.'.$mois.'.'.$an.' - '.$auteur.' : </b>';
echo ''.$texte.'';
}
/*on libère l'espace mémoire alloué à cette requête*/
mysql_free_result ($req);
/*on ferme la connexion à la base de données*/
mysql_close ();
?>
LE SCRiPT QUi GENERE smilies_replace.txt :
<?
/*exploration du répertoire smilies*/
$path = "./smilies/";
$dossier = opendir ($path);
while ($fichier = readdir ($dossier)) {
if ($fichier != "." && $fichier != ".." && $fichier != "index.php") {
$tableau[] = $fichier;
}
}
closedir ($dossier);
sort($tableau);
/*on ouvre ou on crée le fichier*/
$fp = fopen ("./smilies_replace.txt", "w+");
/*on se positionne au début*/
fseek ($fp, 0);
fputs ($fp, "<? \r\n");
for($i=0;$i<count($tableau);$i++){
/*les valeurs que l'on souhaite afficher*/
$image=$tableau[$i];
$texte = "$"."texte = str_replace (':".$tableau[$i].":','<img src=\"".$path.$tableau[$i]."\" alt=\"".$tableau[$i]."\" title=\"".$tableau[$i]."\">', $"."texte);\r\n";
/*on écrit*/
fputs ($fp, $texte);
}
fputs ($fp, " ?>");
/*on ferme le fichier*/
fclose ($fp);
echo 'O.K ! ALL DONE ... SMiLiES UPDATED.';
?>
@+...