i M@N

  • Signature
    One Love, One Heart, One Unity.
  • Site web
  • Nombre de sujets
    92
  • Nombre de messages
    1 681
  • Nombre de commentaires
    35
  • Nombre de news
    Aucune
  • Niveau en PHP
    Bon

Ses derniers messages sur les forums

i M@N
le 24/01/2005 à 18:29
SYSTEME DE GESTiON DES SMiLiES
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.
i M@N
le 21/01/2005 à 18:44
Les sessions
Hello !

Dans ton fichier index.php et dans tous les fichiers qui utilisent les sessions tu mets ça :
<?
/*là c'est pour la durée de vie du cookie de session sur le server (ici 0 pour une durée de vie maximale tant que le brownser est connecté au site) */
ini_set ("session.cookie_lifetime","0");
/*là tu mets la durée de validité que tu veux en secondes (ici 3600 = 1 heure) */
ini_set ("session.gc_maxlifetime","3600");
/*là c'est pour dire au server de supprimer le cookie de session au bout de 180 minutes soit 3 heures */
ini_set ("session.cache_expire","180");
?>


Jette un oeil au fichier php.ini que tu as en local (sur ton ordi si tu as installé apache) et tu verras les autres paramètres modifiables.
Une dernière remarque : chez free tu dois créer un dossier "sessions" pour que ça fonctionne.

@+...
One Love, One Heart, One Unity.
i M@N
le 15/01/2005 à 13:17
Redirection ...
Hello !

Bah si t'utilises les sessions ? tu interroges ta base, tu récupères tes paramètres, tu les enregistres dans une session et dans ta page que tu appelles tu te sers des variables de la session ... nan ?

@+....
One Love, One Heart, One Unity.
i M@N
le 11/01/2005 à 11:56
News au format PDF
Hello !

Bah j'ai Acrobat 7.0 et ça fonctionne chez moi.
<?

require('./fpdf.php');

class PDF extends FPDF
{
var $B;
var $I;
var $U;
var $HREF;

function PDF($orientation='P',$unit='mm',$format='A4')
{
//Appel au constructeur parent
$this->FPDF($orientation,$unit,$format);
//Initialisation
$this->B=0;
$this->I=0;
$this->U=0;
$this->HREF='';
}

function WriteHTML($html)
{
//Parseur HTML
$html=str_replace("\n",' ',$html);
$a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
foreach($a as $i=>$e)
{
if($i%2==0)
{
//Texte
if($this->HREF)
$this->PutLink($this->HREF,$e);
else
$this->Write(5,$e);
}
else
{
//Balise
if($e{0}=='/')
$this->CloseTag(strtoupper(substr($e,1)));
else
{
//Extraction des attributs
$a2=explode(' ',$e);
$tag=strtoupper(array_shift($a2));
$attr=array();
foreach($a2 as $v)
if(ereg('^([^=]*)=["\']?([^"\']*)["\']?$',$v,$a3))
$attr[strtoupper($a3[1])]=$a3[2];
$this->OpenTag($tag,$attr);
}
}
}
}

function OpenTag($tag,$attr)
{
//Balise ouvrante
if($tag=='B' or $tag=='I' or $tag=='U')
$this->SetStyle($tag,true);
if($tag=='A')
$this->HREF=$attr['HREF'];
if($tag=='BR')
$this->Ln(5);
}

function CloseTag($tag)
{
//Balise fermante
if($tag=='B' or $tag=='I' or $tag=='U')
$this->SetStyle($tag,false);
if($tag=='A')
$this->HREF='';
}

function SetStyle($tag,$enable)
{
//Modifie le style et sélectionne la police correspondante
$this->$tag+=($enable ? 1 : -1);
$style='';
foreach(array('B','I','U') as $s)
if($this->$s>0)
$style.=$s;
$this->SetFont('',$style);
}

function PutLink($URL,$txt)
{
//Place un hyperlien
$this->SetTextColor(0,0,255);
$this->SetStyle('U',true);
$this->Write(5,$txt,$URL);
$this->SetStyle('U',false);
$this->SetTextColor(0);
}
}

$pdf=new PDF();
$pdf->AddPage();

$pdf->SetFont('Courier','',20);
$pdf->SetFontSize(10);

$pdf->SetFillColor(239,224,200);
$pdf->Ln(8);


ob_start();
/* place ici tout ton php qui génère ce que tu veux */

include ('./fichier.php');

/* fin de la génération "d'html" */
$html_genere = ob_get_contents();

$pdf->WriteHTML($html_genere);


$pdf->Ln(8);

$pdf->Output('fichier.pdf', 'F');

?>
@+...
One Love, One Heart, One Unity.
i M@N
le 08/01/2005 à 13:02
News au format PDF
Reuh ...

Bon bah merci beaucoup.

Mis à part quelques détails (police e, Arial alors que je voudrais Tahoma, le centrage inexistant) ça fonctionne pas mal. smiley

@+...
One Love, One Heart, One Unity.
i M@N
le 08/01/2005 à 12:10
News au format PDF
Reuh ..

Merci, j'ai testé vite fait et je vois pas encore comment faire d'une page html générée par PHP un PDF mais je vais finir par trouver ...
$pdf->WriteHTML($file);

Faudrait que j'arrive à mettre la source html générée par PHP dans $file je pense ...

Thnx smiley LA GLOBULE.

@+...
One Love, One Heart, One Unity.
i M@N
le 08/01/2005 à 11:37
News au format PDF
Reuh ...

Wé mais je voudrais un exemple comme un comment faire parce que j'avais essayé et j'avais pas réussi ... :-/

@+...
One Love, One Heart, One Unity.
LoadingChargement en cours