Auteur: tamy (w81-248.abo.wanadoo)
Date: 19-05-2003 20:37
[ msg ]
|
bonjour
j'ai téléchargé un script de forum trés bien pour débutant du site
http://www.az-php.com - ->Cours N°21 ,mais je n'arrive pas à le compléter
Pouvez m'aider a le completer pour le rendre fonctionnel .
merci d'avance pour votre aide
Ci _joint LE code
Création de la table
#
#structure de la table forum
#
CREATE TABLE forum_tbl (
id int NOT NULL auto_increment,
reponse_id varchar (30) not null,
date_verif varchar (20) NOT NULL,
date varchar(20) NOT NULL,
pseudo varchar (50) NOT NULL,
email varchar(55) NOT NULL,
sujet varchar (60) NOT NULL,
message text NOT NULL,
PRIMARY KEY (id)
);
Plusieurs paramètres pour la table du forum, l'id qui sera incrémentée automatiquement à chaques messages, reponse_id recevra l'id du message original à chaques nouvelles reponses, date_verif recevra la date au format us pour classer les sorties, date servira à afficher la date du post, le pseudo , l'email et message.
Le formulaire d'ajout de nouveau sujet pour le visiteur qu'on appelera nouveau.php
<form method="post" action="ajouter.php">
<table border="0" width="350" align="center">
<tr>
<td width="100"><b>Pseudo</b></td>
<td width="250"><input type="text" name="pseudo"></td>
</tr>
<tr>
<td width="100"><b>E-Mail</b></td>
<td width="250"><input type="text" name="email"></td>
</tr>
<td width="100"><b>Sujet</b></td>
<td width="250"><input type="text" name="sujet"></td>
</tr>
<td colspan="2" align="center"><b>Message</b></td>
</tr>
<tr>
<td colspan="2" align="center">
<textarea name="message" wrap="VIRTUAL" cols="40" rows="10"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Enregistrer"></td>
</tr>
</table>
</form>
Pas de détail ici, c'est un formulaire html !! Remarquez cependant qu'il n'y a pas de balise <html><body><head> car nous allons nous servir de la fonction include.
Le formulaire d'ajout de reponse au sujet pur le visiteur qu'on appelera reponse.php
<form method="post" action="ajouter.php">
<input type="hidden" name="reponse_id" value="<? print $id; ?>">// on ajoute dans ce formulaire un champ caché nommé reponse_id de facon a déterminer à quel id correspond la réponse apportée
<table border="0" width="350" align="center">
<tr>
<td width="100"><b>Pseudo</b></td>
<td width="250"><input type="text" name="pseudo"></td>
</tr>
<tr>
<td width="100"><b>E-Mail</b></td>
<td width="250"><input type="text" name="email"></td>
</tr>
<td width="100"><b>Sujet</b></td>
<td width="250"><input type="text" name="sujet"></td>
</tr>
<td colspan="2" align="center"><b>Message</b></td>
</tr>
<tr>
<td colspan="2" align="center">
<textarea name="message" wrap="VIRTUAL" cols="40" rows="10"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" value="Enregistrer"></td>
</tr>
</table>
</form>
Ne pas oublier le champ caché reponse_id, celui ci est très important dans la conception du forum
La page d'ajout des messages, nommée ajouter.php
<?
//----------------------------------------------------------------
//
// Page ajouter.php
//
// Ajout des messages et reponses dans mysql
// Verification des champs obligatoires et traitement des données
//
//----------------------------------------------------------------
$mysql_host = 'localhost'; // entrer vôtre hote ici
$mysql_user = 'votre login'; // entrer vôtre login
$mysql_password = 'password'; // entrer vôtre password
$mysql_base = 'le nom de vôtre base de donnée'; // entrer le nom de vôtre base
//----------------------------------------------------------------
// début du script , vérification des champs venant du formulaire
if( empty( $pseudo) || empty($sujet) || empty($message) ) // si les champ pseudo ,sujet ou message sont vides
{
print'<a href="javascript:history.back();">Cliquez ici pour compèter le formulaire</a>';
}
else{ // les champs sont ok, on insert dans la base
//on prépare la date au format US pour l'ordre de sortie
$date_verif = date("Y-m-d H:i");
//la date au format francais
$date = date("d-m-Y H:i");
// on supprime les caractères spéciaux
$pseudo = AddSlashes (htmlspecialchars($pseudo));
$email = AddSlashes (htmlspecialchars($email));
$message = AddSlashes (htmlspecialchars($message));
//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");
//selection de vôtre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion
base");
//requète d'insertion dans la table
mysql_query("INSERT Into forum_tbl VALUES ('','$reponse_id','$date_verif','$date','$pseudo','$email','$sujet','$message') ") or die ("erreur requète");
//on ferme la connexion
mysql_close();
//on redirige le visiteur sur la page d'accueil, là ou s'afficheront les messages soit index.php
header('location: index.php');
}
?>
La page index de votre forum( index.php )
<?
//----------------------------------------------------------------
//
// Page d'affichage des sujets, auteurs, dates
// index.php
//
//----------------------------------------------------------------
$mysql_host = 'localhost'; // entrer vôtre hote ici
$mysql_user = 'votre login'; // entrer vôtre login
$mysql_password = 'password'; // entrer vôtre password
$mysql_base = 'le nom de vôtre base de donnée'; // entrer le nom de votre base
//----------------------------------------------------------------
//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");
//selection de vôtre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion
base");
//la requète de selection des messages , remarqué la clause where, on selectionne seulement les sujets dont le champ reponse_id est vide , j'ai fixé ici une limite de sortie à 50 sujets, à vous de choisir celle que vous souhaité, ou de vous servir du cours n°20 ;-)
$req = mysql_query("SELECT id,date,pseudo,email,sujet from forum_tbl where reponse_id ='' Order by date_verif Desc Limit 0, 50 ") or die ("erreur requete");
//on ressort le contenu en boucle, et on stock dans un tableau avec mysql_fetch_array
while( $forum = mysql_fetch_array ($req))
{
//on affiche le résultat, dans le liens hypertexte du sujet, on passe par l'url l'id original du sujet, de facon a selectionner celui et les réponse dans la page lecture.php
print '<a href="lecture.php?id='.$forum[id].'">'.$forum[sujet].'</a> -Auteur : <a href="mailto:'.$forum.'">'.$forum[pseudo].'</a> posté le : '.$forum[date].'<br>';
print '<hr>';
}
//on referme la connexion
mysql_close();
include('nouveau.php'); // on inclus le formulaire pour les nouveaux sujets.
//----------------- FIN DE LA PAGE INDEX--------------------------------
?>
L'affichage se fait de facon basique, vous devrez vous même insèrer votre code html, pour que le forum soit plus agréable à voir bien sur.
La page de lecture du message original et des réponses apportées, nommé lecture.php
<?
//----------------------------------------------------------------
//
// Page d'affichage des messages et des réponses
// lecture.php
//
//----------------------------------------------------------------
$mysql_host = 'localhost'; // entrer vôtre hote ici
$mysql_user = 'votre login'; // entrer vôtre login
$mysql_password = 'password'; // entrer vôtre password
$mysql_base = 'le nom de vôtre base de donnée'; // entrer le nom de votre base
//----------------------------------------------------------------
//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");
//selection de vôtre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion
base");
//----------------------------------------------------------------
//
// la requète de selection du message original dont l'id est celle passée par l'url
//
//----------------------------------------------------------------
$req = mysql_query("SELECT id,date,pseudo,email,sujet,message from forum_tbl where id ='$id' ") or die ("erreur requete");
//on ressort le contenu et on stock dans un tableau avec mysql_fetch_array
$original = mysql_fetch_array ($req);
//on affiche le message original
print $original[sujet].'<br>';
print'Auteur : <a href="mailto:'.$original.'">'.$original[pseudo].'</a> posté le : '.$original[date].'<br>';
print 'message: <br>';
print $original[message];
print '<hr>'; // ligne html de séparation
//----------------------------------------------------------------
//
// On ressort maintenant les reponse_id ayant le meme numero id
// que le message original
//
//----------------------------------------------------------------
$rep = mysql_query("SELECT id,date,pseudo,email,sujet,message from forum_tbl where reponse_id ='$id' ") or die ("erreur requete reponse ");
//on ressort le contenu en boucle et on stock dans un tableau avec mysql_fetch_array
while ( $reponse = mysql_fetch_array ($rep)){
// on affiche les réponses
print $reponse[sujet].'<br>';
print'Auteur : <a href="mailto:'.$reponse.'">'.$reponse[pseudo].'</a> posté le : '.$reponse[date].'<br>';
print 'message: <br>';
print $reponse[message];
print '<hr>'; // ligne html de séparation pour chaques réponses
}
//on referme la connexion
mysql_close();
include('reponse.php'); //on inclu le formulaire pour les réponses à ce sujet
//----------------- FIN DU SCRIPT LECTURE--------------------------------
?>
L'affichage est aussi de facon basique, à vous de personnaliser.
Vous avez remarqué que nous avons insèré le formulaire de réponse en bas de la page lecture, souvenez vous du champ caché reponse_id , celui-ci porte maintenant le numero de l'id du message original, qui est passé par l'url , donc à chaque réponses, ce message sera classé de facon à pouvoir le ressortir à la suite des autres réponses. Ce champ est très important, c'est lui qui fait fonctionner le script correctement.
|