Forum perso en php

Description

Voila déja qque foi que l'on me solicite pour que je file un coup de main à faire un forum en PHP.

Donc voila la source de base (que j'adapte en fonction des sites des un ou des autres)

Le principe est simple:
- 1 admin ayant tout les droits, 2 utilisateurs (dont 1 pour le quel on pourrait donner plus de privilèges), et 1 banni du fofo
- la possibilité de créer son propre compte

Améliorations à venir:
- une partie administration pour créer automatiquement la base,
- chiader un peu plus l'aspect graphique (mais en général ca dépend pas mal du site existant)

A voir si c'est utile:
- et gérer via le compte admin les autres comptes,
- vérifier les champs remplis dans le formulaire.

Source / Exemple :


Le tout est dans le zip,
mais voila la principale :

<?php

$DOC_TITLE = "forumPerso";
if(!isset($_REQUEST['type'])) $_REQUEST['type']='voir';

if (est_identifie()){
switch ($_REQUEST['type'])
  {
	case 'voir':
    affiche_forum();
    break;
	case 'voir_sujet':
    affiche_sujet();
    break;
	case 'ajout_sujet':
    ajouter_sujet();
    break;
	case 'ajout_post' :
    ajouter_post();
    break;
	case 'supp_sujet' :
    supprimer_sujet();
    affiche_forum();
    break;
	case 'censure_post' :
    censurer_post();
    break;
	case 'supp_post' :
    supprimer_post();
    break;
	case 'bannir' :
    bannir_membre();
    break;
	default :
     //affiche_forum();
	}
}else echo "<br><br><br><p align=\"center\" class=\"txt\" >vous devez etre <a href=\"index.php?m=utilisateurs&l=membre.php\">identifié</a> pour accéder au forum. </p>";

/******************************************************************************

  • FONCTIONS
                                                                                                                                                          • /
function affiche_forum() { Global $wwwroot; echo "<br><br><br><p align=\"center\"><a href=\"".$wwwroot."index.php?m=Forum&l=forum.php\">FORUM</a></p><br><br><br>"; echo 'Bienvenue '.$_SESSION['utilisateur']['prenom']." ".$_SESSION['utilisateur']['nom_famille']; echo '...['; echo '<a href="'.$wwwroot.'index.php?m=utilisateurs&l=change_params.php" alt="Accéder à votre compte" title="Accéder à votre compte">x</a>/'; echo '<a href="'.$wwwroot.'index.php?m=utilisateurs&l=change_mot_passe.php" alt="Modifier mot de passe" title="Modifier mot de passe">x</a>]'; echo '<br><br>'; if(isset($_REQUEST['id_sujet'])) { $tmp=$_REQUEST['id_sujet']; $int_sujet = mysql_query("SELECT * FROM forumperso_sujet WHERE id_sujet='$tmp' ORDER BY id_sujet "); } else $int_sujet = mysql_query("SELECT * FROM forumperso_sujet ORDER BY id_sujet "); if (mysql_num_rows($int_sujet)!=0) { while ($recup_sujet = mysql_fetch_array($int_sujet)) { ?> <table cellpadding="0" cellspacing="0" height="100%" width="100%" border="0""> <tr> <td height="50" width="100%" valign="bottom"> <ul id="forumsujet"> <li> <A href="<?php echo $_SERVER['PHP_SELF']; ?>?m=Forum&l=forum.php&type=voir_sujet&id_sujet=<?php echo $recup_sujet['id_sujet'];?> "><?php echo $recup_sujet['nom_sujet']; ?></A> <?php if($_SESSION['utilisateur']['priv']=="admin") { echo "<a onClick=\"Javascript:return confirm('Êtes-vous sûr de vouloir supprimer le Sujet Completement ?');\" title=\"Supprimer\" href=\"".$wwwroot."index.php?m=Forum&l=forum.php&type=supp_sujet&idsuj=".$recup_sujet['id_sujet']."\">"; echo "<img src=\"fonctions/images/trash-48.gif\" border=\"0\" width=\"25\" height=\"25\" alt=\"Supprimer\" />"; echo "</a>"; } ?> <br> </li> </ul> </td> </tr> </table> <?php } } if($_REQUEST['type']=='voir') { echo "<br><br><br>"; echo "<FORM method=post action=\"".$wwwroot."index.php?m=Forum&l=forum.php&type=ajout_sujet\">"; echo "<p align=\"center\"><INPUT type=\"submit\" value=\"Nouveau Sujet\" ></p>"; echo "</FORM>"; } } function affiche_sujet() { GLOBAL $wwwroot; affiche_forum(); //affiche le sujet en question $tmp=$_REQUEST['id_sujet']; //recuperer les post en rapport avec ce sujet $int_post = mysql_query("SELECT id_post FROM forumperso_sujet_post WHERE id_sujet='$tmp' ORDER BY id_post "); if (mysql_num_rows($int_post)!=0) { while ($recup_post = mysql_fetch_array($int_post)) { $tmp2=$recup_post['id_post']; $aff_post = mysql_query("SELECT * FROM forumperso_post WHERE id_post='$tmp2' ORDER BY id_post "); mysql_num_rows($aff_post); $affiche_post = mysql_fetch_array($aff_post); echo "<table width=\"80%\" border=\"2\" class=\"txt\" align=\"center\">"; echo "<tr>"; echo "<td>"; echo "Posté par ".$affiche_post['nom_reponse']; if(a_priv('admin')) { echo'&nbsp;&nbsp;<a href="'.$wwwroot.'index.php?m=Forum&l=forum.php&type=bannir&Abannir='.$affiche_post['nom_reponse'].'" title="BANNIR CE MEMBRE"><img src="fonctions/images/ban.gif" border="no"></a>'; } echo "</td>"; if(a_priv("admin")) echo "<td width=\"20%\">"; else echo "<td width=\"25%\">"; echo " Le ".$affiche_post['date_reponse']; echo "</td>"; if(a_priv("admin")) { echo "<td width=\"5%\">"; echo "<a href=\"".$wwwroot."index.php?m=Forum&l=forum.php&type=censure_post&id_sujet=".$_REQUEST['id_sujet']."&post=".$affiche_post['id_post']."\" title=\"Censurer le message\"><img src=\"fonctions/images/b_drop.png\" border=\"no\"></a> "; echo "</td>"; echo "<td width=\"5%\">"; echo "<a href=\"".$wwwroot."index.php?m=Forum&l=forum.php&type=supp_post&id_sujet=".$_REQUEST['id_sujet']."&post=".$affiche_post['id_post']."\" title=\"Detruire le message\"><img src=\"fonctions/images/trash-48.gif\" width=\"25\" heigth=\"25\" border=\"no\"></a> "; echo "</td>"; } echo "</tr>"; echo "<tr>"; echo "<td colspan=\""; if(a_priv("admin")){echo "4";}else{echo "2";} echo "\">"; //remplacer les ;) :D :) ..... $bd="<img src=\"Forum/ico/"; $bf="\" width=\"25\">"; $bf2="\">"; $Old_txt=array( ':??:' , ':OO:' , ':Lum:' , ':)' , ';)' , ':p' , ':D' , ':o_O:' , ';P;' , ':8):' , ':cry:' , ';(' , ':(' , ':grr:' , '?:' , ':O:' , ':zz:' , ':beurk:' , ':smack:' , 'MDR' , 'LOL' , ':out:' ); $New_txt=array($bd.'what.gif'.$bf,$bd.'nerd.gif'.$bf,$bd.'light.gif'.$bf,$bd.'happy.gif'.$bf,$bd.'nice.gif'.$bf,$bd.'fool.gif'.$bf,$bd.'eclat.gif'.$bf,$bd.'horny.gif'.$bf,$bd.'clown.gif'.$bf,$bd.'cool.gif'.$bf,$bd.'crying.gif'.$bf,$bd.'bad.gif'.$bf,$bd.'scared.gif'.$bf,$bd.'angry.gif'.$bf,$bd.'inlove.gif'.$bf,$bd.'saint.gif'.$bf,$bd.'sleepy.gif'.$bf,$bd.'ill.gif'.$bf,$bd.'smack.gif'.$bf,$bd.'mdr.gif'.$bf2,$bd.'lol.gif'.$bf2,$bd.'sors.gif'.$bf2); $affiche_post['texte'] = str_replace ( $Old_txt , $New_txt , $affiche_post['texte'] ); echo stripslashes($affiche_post['texte']); echo "<br>"; echo "<br>"; echo "</td>"; echo "</tr>"; echo "</table><br>"; } echo "<FORM method=post action=\"".$wwwroot."index.php?m=Forum&l=forum.php&type=ajout_post&id_sujet=".$tmp."\">"; echo "<p align=\"center\"><INPUT type=\"submit\" value=\"Repondre\" ></p>"; echo "</FORM>"; }else{echo "aucun message sur ce sujet";} } function ajouter_sujet() { if(!isset($_REQUEST['id_sujet'])) //Si pas de variable id_sujet , on laisse l'utilisateur creer son sujet { ?> <FORM method="post" action="<?php $_SERVER['PHP_SELF'];?>?m=Forum&l=forum.php&type=ajout_sujet&id_sujet=new"> <p class="txt">Titre du sujet : </p> <input type="text" maxlenght="50" name="sujet" value="<?php if(isset($_REQUEST['sujet'])) echo $_REQUEST['sujet']; ?>"/> <?php if(isset($_REQUEST['erreursujet'])) echo "<font color=\"red\"><= Vous devez mettre un titre</font>"; ?> <p class="txt" >Message : </p> <input type="hidden" value="html" name="p_format" tabindex="1" id="p_format" /> <p> <textarea style="width:100%" rows="10" name="texte" id="texte"><?php if(isset($_REQUEST['texte'])) echo $_REQUEST['texte']; ?></textarea> <?php if(isset($_REQUEST['erreurtexte'])) echo "<font color=\"red\"><= Vous devez remplir ce champ texte</font>"; ?> </p> <script src="fonctions/toolbar.js" type="text/javascript"></script> <script type="text/javascript"> if (document.getElementById) { var tb = new dcToolBar(document.getElementById('texte'), document.getElementById('p_format'),'fonctions/images/'); tb.btStrong('Forte emphase'); tb.btEm('Emphase'); tb.btIns('Inséré'); tb.btDel('Supprimé'); tb.btQ('Citation en ligne'); tb.addSpace(10); tb.btCode('Code'); tb.addSpace(10); tb.btBquote('Bloc de citation'); tb.addSpace(10); tb.btLink('Lien', 'URL ?', 'Langue ?', 'fr'); tb.btImgLink('Image externe', 'URL ?'); tb.addSpace(10); tb.draw('Vous pouvez utiliser les raccourcis suivants pour enrichir votre présentation.'); var tbico = new dcToolBar(document.getElementById('texte'), document.getElementById('p_format'),'Forum/ico/'); tbico.insIco(':??:','what.gif'); tbico.insIco(':OO:','nerd.gif'); tbico.insIco(':Lum:','light.gif'); tbico.insIco(':)','happy.gif'); tbico.insIco(';)','nice.gif'); tbico.insIco(':p','fool.gif'); tbico.insIco(':D','eclat.gif'); tbico.insIco(':o_O:','horny.gif'); tbico.insIco(';P;','clown.gif'); tbico.insIco(':8):','cool.gif'); tbico.insIco(':cry:','crying.gif'); tbico.insIco(';(','bad.gif'); tbico.insIco(':(','scared.gif'); tbico.insIco(':grr:','angry.gif'); tbico.insIco('?:','inlove.gif'); tbico.insIco(':O:','saint.gif'); tbico.insIco(':zz:','sleepy.gif'); tbico.insIco(':beurk:','ill.gif'); tbico.insIco(':smack:','smack.gif'); tbico.insIco('MDR','mdr.gif'); tbico.insIco('LOL','lol.gif'); tbico.insIco(':out:','sors.gif'); tbico.draw('Vous pouvez utiliser les icones suivantes.'); } </script> <p align="center"><INPUT type="submit" value="Ajouter" ></p> </FORM> <?php } else if($_REQUEST['id_sujet']=='new') //Si y'a une variable id_sujet qui est new, on verifie les champ remplis { if(($_REQUEST['sujet']!='') && ($_REQUEST['texte']!='')) //les 2 champs sont rempli, ont enregistre { //Qui et quand en est l'auteur: $Auteur = $_SESSION['utilisateur']['prenom']." ".$_SESSION['utilisateur']['nom_famille']['0'].$_SESSION['utilisateur']['nom_famille']['1'].$_SESSION['utilisateur']['nom_famille']['2']; $date =date("Y")."-".date("n")."-".date("d"); //rechercher le dernier sujet créé $search_sujet = mysql_query("SELECT * FROM forumperso_sujet ORDER BY id_sujet DESC "); if (mysql_num_rows($search_sujet)!=0) $recup_sujet = mysql_fetch_array($search_sujet); $nbs_sujet = $recup_sujet['id_sujet']+1; $sujet = $_REQUEST['sujet']; //Mise a jour ssi il n'est pas banni: if($_SESSION['utilisateur']['priv']!='banni') { //de la table sujet: $qid = mysql_query(" INSERT INTO forumperso_sujet( id_sujet , nom_sujet , createur , date_crea ) VALUES ('$nbs_sujet','$sujet' , '$Auteur', '$date')"); //idem pour les post $search_post = mysql_query("SELECT * FROM forumperso_post ORDER BY id_post DESC "); if (mysql_num_rows($search_post)!=0) $recup_post = mysql_fetch_array($search_post); $nbs_post = $recup_post['id_post']+1; $post = addslashes($_REQUEST['texte']); $post = nl2br($post); // pour les retour ligne du message //MAJ $qid = mysql_query(" INSERT INTO forumperso_post ( id_post , texte , nom_reponse , date_reponse) VALUES ('$nbs_post','$post', '$Auteur' , '$date' )"); //et enfin la table de liaison $qid = mysql_query(" INSERT INTO forumperso_sujet_post ( id_sujet , id_post ) VALUES ( '$nbs_sujet' ,'$nbs_post' )"); } //echo '<script language="javascript">window.location="index.php?m=Forum&l=forum.php";</script>'; echo "<br><br> <p class=\"txt\">Votre nouveau sujet a été correctement enregistré</p><br>"; echo "<a href=\"javascript:history.go(-2)\">Retour</a>"; } else // il manque un des 2 champs, on recharge la page en demandant a l'utilisateur de remplir les champs manquant { $msg_erreur="index.php?m=Forum&l=forum.php&type=ajout_sujet"; if(($_REQUEST['sujet']=='')) $msg_erreur=$msg_erreur."&erreursujet=1"; if(($_REQUEST['texte']=='')) $msg_erreur=$msg_erreur."&erreurtexte=1"; $msg_erreur=$msg_erreur."&sujet=".$_REQUEST['sujet']."&texte=".$_REQUEST['texte']; echo '<script language="javascript">window.location="',$msg_erreur,'";</script>'; } } else echo"erreur de traitement"; } function ajouter_post() { GLOBAL $wwwroot; affiche_sujet(); if(!isset($_REQUEST['id_post'])) //Si pas de variable id_sujet , on laisse l'utilisateur creer son sujet { ?> <FORM method="post" action="<?php $_SERVER['PHP_SELF'];?>?m=Forum&l=forum.php&type=ajout_post&id_sujet=<?php echo $_REQUEST['id_sujet']; ?>&id_post=new"> <p class=txt>Reponse : </p> <input type="hidden" value="html" name="p_format" tabindex="1" id="p_format" /> <p> <textarea style="width:100%" rows="10" name="texte" id="texte"><?php if(isset($_REQUEST['texte'])) echo $_REQUEST['texte']; ?></textarea> <?php if(isset($_REQUEST['erreurtexte'])) echo "<font color=\"red\"><= Vous devez remplir ce champ texte</font>"; ?> </p> <script src="fonctions/toolbar.js" type="text/javascript"></script> <script type="text/javascript"> if (document.getElementById) { var tb = new dcToolBar(document.getElementById('texte'), document.getElementById('p_format'),'fonctions/images/'); var tbico = new dcToolBar(document.getElementById('texte'), document.getElementById('p_format'),'fonctions/images/'); tb.btStrong('Forte emphase'); tb.btEm('Emphase'); tb.btIns('Inséré'); tb.btDel('Supprimé'); tb.btQ('Citation en ligne'); tb.addSpace(10); tb.btCode('Code'); tb.addSpace(10); tb.btBquote('Bloc de citation'); tb.addSpace(10); tb.btLink('Lien', 'URL ?', 'Langue ?', 'fr'); tb.btImgLink('Image externe', 'URL ?'); tb.addSpace(10); tb.draw('Vous pouvez utiliser les raccourcis suivants pour enrichir votre présentation.'); var tbico = new dcToolBar(document.getElementById('texte'), document.getElementById('p_format'),'Forum/ico/'); tbico.insIco(':??:','what.gif'); tbico.insIco(':OO:','nerd.gif'); tbico.insIco(':Lum:','light.gif'); tbico.insIco(':)','happy.gif'); tbico.insIco(';)','nice.gif'); tbico.insIco(':p','fool.gif'); tbico.insIco(':D','eclat.gif'); tbico.insIco(':o_O:','horny.gif'); tbico.insIco(';P;','clown.gif'); tbico.insIco(':8):','cool.gif'); tbico.insIco(':cry:','crying.gif'); tbico.insIco(';(','bad.gif'); tbico.insIco(':(','scared.gif'); tbico.insIco(':grr:','angry.gif'); tbico.insIco('?:','inlove.gif'); tbico.insIco(':O:','saint.gif'); tbico.insIco(':zz:','sleepy.gif'); tbico.insIco(':beurk:','ill.gif'); tbico.insIco(':smack:','smack.gif'); tbico.insIco('MDR','mdr.gif'); tbico.insIco('LOL','lol.gif'); tbico.insIco(':out:','sors.gif'); tbico.draw('Vous pouvez utiliser les icones suivantes.'); } </script> <p align="center"><INPUT type="submit" value="Valider" ></p> </FORM> <?php } else if($_REQUEST['id_post']=='new') //Si y'a une variable id_post qui est new, on verifie les champ remplis { if($_REQUEST['texte']!='') //le champ texte est rempli, ont enregistre { //Qui et quand y repond: $Auteur = $_SESSION['utilisateur']['prenom']." ".$_SESSION['utilisateur']['nom_famille']['0'].$_SESSION['utilisateur']['nom_famille']['1'].$_SESSION['utilisateur']['nom_famille']['2']; $date =date("Y")."-".date("n")."-".date("d"); //on conait deja le sujet grace à id_sujet $num_sujet=$_REQUEST['id_sujet']; //on recherche le dernier post créé $search_post = mysql_query("SELECT * FROM forumperso_post ORDER BY id_post DESC "); if (mysql_num_rows($search_post)!=0) $recup_post = mysql_fetch_array($search_post); $nbs_post = $recup_post['id_post']+1; $post = addslashes($_REQUEST['texte']); $post = nl2br($post); // pour les retour ligne du message //MAJ ssi il n'est pas bannis if($_SESSION['utilisateur']['priv']!='banni') { //du post $qid = mysql_query(" INSERT INTO forumperso_post ( id_post , texte , nom_reponse , date_reponse) VALUES ('$nbs_post','$post', '$Auteur' , '$date' )"); //et la table de liaison $qid = mysql_query(" INSERT INTO forumperso_sujet_post ( id_sujet , id_post ) VALUES ( '$num_sujet' ,'$nbs_post' )"); } echo '<script language="javascript">window.location="index.php?m=Forum&l=forum.php&type=voir_sujet&id_sujet='.$_REQUEST['id_sujet'].'";</script>'; echo "Votre réponse a été correctement enregistrée"; } else // il manque un des 2 champs, on recharge la page en demandant a l'utilisateur de remplir les champs manquant { $msg_erreur="index.php?m=Forum&l=forum.php&type=ajout_post&id_sujet=".$_REQUEST['id_sujet'];; if(($_REQUEST['texte']=='')) $msg_erreur=$msg_erreur."&erreurtexte=1"; echo '<script language="javascript">window.location="',$msg_erreur,'";</script>'; } } else echo"erreur de traitement"; } function censurer_post() { $censure = "CENSURé PAR L\'ADMINISTRATEUR"; $post=$_REQUEST['post']; $qid = mysql_query("UPDATE forumperso_post SET texte = '".$censure."' WHERE id_post = '".$post."'"); affiche_sujet(); } function supprimer_post() { $post_a_virer=$_REQUEST['post']; //supprime le post $qid = mysql_query("DELETE FROM forumperso_post WHERE id_post ='$post_a_virer'"); //puis la liaison $qid = mysql_query("DELETE FROM forumperso_sujet_post WHERE id_post ='$post_a_virer'"); echo "<font color=\"red\"><br><br>Le post a été supprimé !<br><br></font><br>"; echo "<a href=\"javascript:history.go(-1)\">Retour</a>"; } function supprimer_sujet() { $sujet_a_virer=$_REQUEST['idsuj']; //avant on verifie les post associés $qid = mysql_query("SELECT id_post FROM forumperso_sujet_post WHERE id_sujet='$sujet_a_virer'"); if (mysql_num_rows($qid)!=0) { while ($post = mysql_fetch_array($qid)) { $num_post=$post['id_post']; $post_a_virer = mysql_query("DELETE FROM forumperso_post WHERE id_post ='$num_post'"); $liason_a_virer = mysql_query("DELETE FROM forumperso_sujet_post WHERE id_post ='$num_post'"); } } $qid = mysql_query("DELETE FROM forumperso_sujet WHERE id_sujet ='$sujet_a_virer'"); echo "<font color=\"red\"><br><br>Le sujet et tous les posts associées ont été supprimés !<br><br></font>"; } function bannir_membre() { GLOBAL $wwwroot; //fonction utile pour bannir un menbre (BUG!!! si plusieurs personnes ont le même prémon et leur nom de famille qui commence par les 3 mêmes lettre, on est alors pas sur de bannir la bon!!!) //celui ci pourra continuer à ecrire, mais son message ne sera pas sauvegardé //c'est encore le meilleur moyen de ne pas etre trop emerdé par les robots $recup=$_REQUEST['Abannir']; $recup=explode(" ",$recup); //recup contient en 0 le prenom, et en 1 le nom de famille $recupLog=mysql_query("SELECT * FROM forumperso_utilisateur WHERE prenom='$recup[0]'"); if (mysql_num_rows($recupLog)!=0) { while ($NomTrouve = mysql_fetch_array($recupLog)) { if($recup[1]==($NomTrouve['nom_famille']['0'].$NomTrouve['nom_famille']['1'].$NomTrouve['nom_famille']['2'])) { //si les 3 1er lettre du nom de familles correspondent $Degage=$NomTrouve['id_utilisateur']; $qid = mysql_query("UPDATE forumperso_utilisateur SET priv = 'banni' WHERE id_utilisateur = '".$Degage."'"); echo $NomTrouve['prenom']." ".$NomTrouve['nom_famille']." vient d'être bannis du forum !!!"; echo '<br><a href="'.$wwwroot.'index.php">Retour</a>'; } } } } ?>

Conclusion :


A vous de me dire ce que vous en pensez

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.