pas de probleme, je sais bien que les commentaires c'est pas mon fort
Commençons par analyser le fichier html:
Celui ci doit contenir,
- un cadre qui affiche les derniers messages
- un cadre qui affiche un formulaire permettant de poster un message
- un cadre qui affiche un formulaire permettant de choisir un pseudonyme
Ces trois cadre portent respectivement les noms 'shoutbox','postmsg' et 'login' .
Ensuite, il faut appeler un javascript qui va gerer
le contenu de ces differents cadre de facon dynamique.
Nous utiliserons donc un script php chargé de generer du javascript,
prêt à être chargé par une page html.
C'est ici qu'entre en jeu notre fichier shoutbox.php,
La façon dont la shoutbox est gerée ce fait de maniere habituelle:
Les messages sont stockés dans une db, le script affiche les 6 dernier messages,
ou en insere un nouveau suivant les parametres reçus.
La seule differences réside dans le fait que au lieu de faire une simple sortie ' echo "<table> ... </table>"; '
Il faudra sortir un code compréhensible par javascript,
on pourrait donc penser à ' echo "document.write('<table> ... </table>');"; '.
Mais il est bien plus interressant encore d'ecrire directement dans un cadre,
donc nous utiliserons une methode du dhtml: ' innerHtml ' qui permet de lire et ecrire dans un élement (div,span,td,...).
Voici donc au final ce que nous devrions avoir:
Code:
<?
// fichier: test.php
echo "document.getElementById('shoutbox').innerHTML = 'le texte à mettre dans le cadre shoutbox';";
?>
Ce script genere du javacript prêt à être chargé grace à cette balide html:
Code:
<!-- fichier: test.html -->
<div id=shoutbox></div>
<script language='javascript' src='test.php'></script>
Sur l'exemple ci-dessus, quand le navigateur va arriver à hauteur de la balise ' <script ...> ',
il va charger le fichier test.php qui renvera le code javascript suivant:
Code:
document.getElementById('shoutbox').innerHTML = 'le texte à mettre dans le cadre shoutbox';
Et donc, la phrase 'le texte à mettre ...' serra inscrite dans le <div id=shoutbox></div> du fichier test.html.
Voila pour la petite parenthese explicative,
Pour faire le reste brievement:
La fonction
jsflush permet de vider le cadre 'shoutbox';
La fonction
jsprint permet d'ajouter du texte au cadre 'shoutbox';
Code:
session_name("jshoutbox");
session_start();
Permet de demarrer une session qui servira à stocker le pseudo et le temps entre chaque message.
Code:
extract(array_merge($_GET, $_POST));
Permet de simplifier les tableau de requete,
exemple: '$_GET['message']' devient automatiquement '$message' .
Code:
if(isset($shoutboxsubmit)){
if(session_is_registered("pseudo")){
if(!(session_is_registered("timenow") && ((time()-$_SESSION['timenow'])<=10))){
$_SESSION['timenow'] = time();
@mysql_query("INSERT INTO shoutbox (auteur,message) VALUES ('".$_SESSION['pseudo']."','".$message."')", $connectnews);
}
}
header("Location: ".$HTTP_SERVER_VARS['HTTP_REFERER']);
}else if(isset($logginsubmit)){
$_SESSION['pseudo'] = htmlspecialchars($loggin);
header("Location: ".$HTTP_SERVER_VARS['HTTP_REFERER']);
}
Si '$shoutboxsubmit' n'est pas vide, (ce qui veut dire que le formulaire de message à été utilisé)
Alors, Si L'utilisateur à defini un pseudo,
Alors, Si l'utilisateur à déjà posté et ceci il y a plus de 10 secondes,
On indique que l'utilisateur vient de poster à tel heure.
Et on inscrit son message dans la db.
Retour à la page précédente.
Sinon, Si '$slogginsubmit' n'est pas vide, (et donc que l'utilisateur tente de s'enregistrer)
On enregistre son pseudo dans la session,
Et on retourne à la page précédente.
----
Ensuite, on execute une requete sql qui recupere les 6 derniers messages par ordre decroissant.
On vide le cadre 'shoutbox',
et on y ajoute les messages au fur et à mesures.
La derniere partie permet de définire lequel des 2 cadres doit être affiché,
entre celui pour poster et celui pour s'identifier.
---------------
Pour ne rien cacher, c'est ma premiere experience avec innerHtml et j'ai été assez decu.
J'ai essayé d'afficher les différents formulaire via innerHtml, mais ce sans succes,
impossible d'envoyer ou d'appeler un element du formulaire.
Et pour l'affichage des messages, j'avais utilisé des tables,
mais elles etaient tout bonnement ignorée par cette fonction
Donc en conclusion, dans ce cas précis, c'est la methode à utiliser, .. mais dans ce cas précis uniquement.
[nb]
Je rajoute la table sql que j'avais omis dans le .rar
Code:
CREATE TABLE `shoutbox` (
`id` int(11) NOT NULL auto_increment,
`message` text NOT NULL,
`auteur` varchar(120) NOT NULL default '',
`date` timestamp(14) NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;
[/nb]