Recherche rapide
     
Espace Membres
il y'a actuellement 32370 membres
 
Pseudo  
Password  
inscriptions
 
Cours php/Tutoriels
  1/  Apprendre les bases de PHP
  1a/  Divers en PHP, les erreurs, les variables etc...
  2/  Les variables
  3/  Les variables d'environnements
  4/  Les conditions
  5/  Les boucles
  6/  Les cookies
  7/  Travailler sur les dates
  8/  Les tableaux array()
  9/  Travailler avec les fichiers
  10/  Traiter les chaines de caractères
  11/  Récuperer et verifier les données d'un formulaire
  12/  Envoyer des mails
  13/  Les pseudo-frames
  14/  Débuter avec mysql
  15/  Fonctions update et delete de mysql
  16/  Comprendre et utiliser la clause where
  17/  Liste de quelques fonctions mysql
  18/  Mysql par la pratique, construire un livre d'or
  19/  Construire un mini moteur ou annuaire
  20/  Afficher sur plusieurs pages
  21/  La construction de votre forum
  22/  Faire son script de sondage (vote)
  23/  Sessions , mise en pratique
  24/  Sessions , récapitulatif
  25/  Les expressions régulières
  26/  Coder son ANTI-FLOOD
  27/  Utiliser et créer ses fonctions
  28/  Upload et transfert de fichiers
 
 
 
Liens
  Les cours pour bien débuter PHP
Construire son forum n°21

Mis à jour le 23-1-2007

Vous êtes nombreux à vouloir réaliser vos applications en php, nous allons maintenant passer à une étape qui vous intéresse et construire un forum.

Bon toujours pas de copier collé, le but n'étant pas de pomper inutilement , mais de comprendre et d'apprendre à programmer.

On respire, et on y va

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 à chaque messages, reponse_id recevra l'id du message original à chaque nouvelles réponses, 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 appellera nouveau.php
<form method="post" action="ajouter.php">
<table style="width:350px; margin-left:auto; margin-right:auto">
<tr>
<td style="width:100px"><strong>Pseudo</strong></td>

<td style="width:250px"><input type="text" name="pseudo" /></td>
</tr>
<tr>
<td style="width:100px"><strong>E-Mail</strong></td>
<td style="width:250px"><input type="text" name="email" /></td>
</tr>
<td style="width:100px"><strong>Sujet</strong></td>
<td style="width:250px"><input type="text" name="sujet" /></td>
</tr>
<td colspan="2" style="text-align:center;font-weight:bold">Message</td>
</tr>
<tr>
<td colspan="2" style="text-align:center">
<textarea name="message" wrap="VIRTUAL" cols="40" rows="10"></textarea>
</td>
</tr>
<tr>
<td colspan="2" style="text-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 réponse au sujet pur le visiteur qu'on appellera reponse.php
<form method="post" action="ajouter.php">

<input type="hidden" name="reponse_id" value="<? print $_GET['id']; ?>" />// on ajoute dans ce formulaire un champ caché nommé reponse_id de façon a déterminer à quel id correspond la réponse apportée

<table style="width:350px;margin-left:auto;margin-right:auto">
<tr>
<td style="width:100px;font-weight:bold">Pseudo</td>

<td style="width:250px"><input type="text" name="pseudo" /></td>
</tr>
<tr>
<td style="width:100px; font-weight:bold">E-Mail</td>
<td style="width:250px"><input type="text" name="email" /></td>
</tr>
<td style="width:100px; font-weight:bold">Sujet</td>
<td style="width:250px"><input type="text" name="sujet" /></td>
</tr>
<td colspan="2" style="text-align:center; font-weight:bold ">Message</td>
</tr>
<tr>
<td colspan="2" style="text-align:center">
<textarea name="message" wrap="VIRTUAL" cols="40" rows="10"></textarea>
</td>
</tr>
<tr>
<td colspan="2" style="text-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

<?php
//----------------------------------------------------------------
//
// Page ajouter.php
//
// Ajout des messages et réponses dans mysql
// Vérification des champs obligatoires et traitement des données
//
//----------------------------------------------------------------

$mysql_host = 'localhost'; // entrer votre hôte ici
$mysql_user = 'votre login'; // entrer votre login
$mysql_password = 'password'; // entrer votre password
$mysql_base = 'le nom de votre base de donnée';
// entrer le nom de votre base

//----------------------------------------------------------------
// début du script , vérification des champs venant du formulaire

if( empty( $_POST['pseudo']) || empty($_POST['sujet']) || empty($_POST['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 français
$date = date("d-m-Y H:i");


// on supprime les caractères spéciaux
$pseudo = AddSlashes (htmlspecialchars($_POST['pseudo']));
$email = AddSlashes (htmlspecialchars($_POST['email']));
$message = AddSlashes (htmlspecialchars($_POST['message']));


//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

//sélection de votre 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 (id,reponse_id,date_verif,date,pseudo,email,sujet,message) VALUES ('','$_POST[reponse_id]','$date_verif','$date','$pseudo','$email','$sujet','$message') ") or die ("erreur requête". mysql_error());

//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 )

<?php
//----------------------------------------------------------------
//
// Page d'affichage des sujets, auteurs, dates
// index.php
//
//----------------------------------------------------------------

$mysql_host = 'localhost'; // entrer votre hôte ici
$mysql_user = 'votre login'; // entrer votre login
$mysql_password = 'password'; // entrer votre password
$mysql_base = 'le nom de votre 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");

//sélection de votre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion
base");


//la requête de sélection des messages , remarqué la clause where, on sélectionne 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 façon a sélectionner 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['email'].'">'.$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 façon basique, vous devrez vous même insérer votre code html, pour que le forum soit plus agréable à voir.
 
La page de lecture du message original et des réponses apportées, nommé lecture.php


<?php
//----------------------------------------------------------------
//
// Page d'affichage des messages et des réponses
// lecture.php
//
//----------------------------------------------------------------

$mysql_host = 'localhost'; // entrer votre hôte ici
$mysql_user = 'votre login'; // entrer votre login
$mysql_password = 'password'; // entrer votre password
$mysql_base = 'le nom de votre 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");

//sélection de votre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion
base");


//----------------------------------------------------------------
//
// la requête de sélection 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 ='".$_GET['id']."' ") or die ("erreur requête");

//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['email'].'">'.$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 même numéro id
// que le message original
//
//----------------------------------------------------------------
$rep = mysql_query("SELECT id,date,pseudo,email,sujet,message from forum_tbl where reponse_id ='".$_GET['id']."' ") or die ("erreur requête 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['email'].'">'.$reponse['pseudo'].'</a> posté le : '.$reponse['date'].'<br />';
print 'message: <br />';
print $reponse['message'];

print '<hr />'; // ligne html de séparation pour chaque 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 façon 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 numéro de l'id du message original, qui est passé par l'url , donc à chaque réponses, ce message sera classé de façonà pouvoir le ressortir à la suite des autres réponses. Ce champ est très important, c'est lui qui fait fonctionner le script correctement.
 

Voilà, encore un code de plus, il ne vous reste qu'à personnalisé l'ensemble et à le mettre en ligne, vous avez maintenant votre forum, il est donc unique .

Je précise quand même pour les petits malins qui se seraient contenté uniquement de copier le code sans faire l'effort de comprendre un minimum, parce que c'est mieux quand c'est tout fait, que celui-ci n'est pas complet à 100%, et que si vous souhaitez que le forum s'affiche comme il faut , il faudra chercher un peu dans les cours et se creuser les méninges, et oui, dommage ;-))
 

A vos claviers et bonne prog
'e' Stressman


>>> Cours suivant n° 1

 

 

 
 
Rubrique installer
  1°/  Apache et PHP
  2°/  Mysql sur votre PC (version tar.gz)
  3°/  Mysql sur votre PC (version rpm)
 
Newsletter

 
Votez !!
Pas de votes ni suggestions actuellement
 
 
 
Débuter Linux
 1°/   Introduction
 2°/   Installation ( 1ere partie )
 3°/   Installation ( 2ème partie )
 4°/   Connexion / documentation / Synthaxe
 5°/   Les différentes commandes sous linux
 6°/   Installer / Désinstaller / Lister les applications
 7°/   Manipulation des chaines de caractères
 
    © Copyright 2005 - az-php.com - tous droits réservés , reproduction interdite . Hébergé par 1hebergeur.com [ mentions légales & copyright ]