SYSTEME DE GESTiON DES SMiLiES

Répondre
i M@N
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 :
<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.';

?>
Have fun,

@+...
One Love, One Heart, One Unity.
Lefounard
le 24/01/2005 à 19:21
Lefounard
Bo taff,
il fonctionne bien , il est bien fait mais manque juste un petit details : c'est un script de upload des smileys !
Sinon c'est bien pour ceux qui ont pas de bdd, mais je préconise la bdd c'est plus pratique et aussi faut faire attention aussi aux fonctions f*** (open,...) car certaines sont restreintes chez certains hebergeurs gratuits ;).
Ciao,
I am singing in the rain , I am happy again !!
Lefounard
le 24/01/2005 à 19:24
Lefounard
merde je suis trop con j'avais pas vu la partie msql , quel boulet, je sors =>
lol en fait le code sql est contenu dans mon script donc http://www.lephpfacile.com/script/index.php?rubrik=2?!
Demande a LA_GLobule de remplacer mon script par le tien car le tient fonctionne sous les deux navigateurs !
Ciao,
I am singing in the rain , I am happy again !!
i M@N
le 24/01/2005 à 19:44
i M@N
Reuh ...
Bo taff,
il fonctionne bien , il est bien fait mais manque juste un petit details : c'est un script de upload des smileys !
Nan nan, c'est bien un script pour gérer les smilies ... pas d'upload.

@+...
One Love, One Heart, One Unity.
Lefounard
le 24/01/2005 à 20:10
Lefounard
disons que moi meme dans mon script j'avais pas mis le truc de upload mais bon c'est sur que ca depend aussi comment on interprete le mot gestion !
Pour moi la gestion c tout ce qui est : Ajout , Edition , Suppression.
Plus tard je pense que je reprendrai mon script mais
avec les class, ca peut etre pas mal (en utilisant 3 class et des compositions ou heritage, on peut faire un truc sympo !).
Ciao,
I am singing in the rain , I am happy again !!
Bzh
le 25/01/2005 à 16:54
Bzh
Cool !!!

Le code pour insérer les smileys juste sous le curseur qui fonctionne avec les autres navigateurs(différent de IE)!!!

Ch' aivais pas comment faire....smiley

Merci i M@N...

smiley
bibi
le 25/01/2005 à 17:06
bibi
le pire c'est qu'il é pa super compliké son code, donc encore plus respect :)
commit suicide
Répondre
LoadingChargement en cours