Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Systèmes complets > Créer son forum de toutes pièces > Et plus > Et encore trois autres > Lecture du tutoriel

Et encore trois autres

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : General Vans
Note : Pas de note

Plus d'informations Plus d'informations
Dans ce chapitre nous allons étudier deux nouveaux systèmes qui pourront être ajouté à votre forum très facilement en ne modifiant que quelques pages.

Alors avant d'aller plus loin voilà ces deux fonctions :

Le second va demander un peu de modifications y compris dans la base de données mais je vous rassure, le troisième est vraiment enfantin.

Bon bah on y va alors !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire

La liste des membres

Avant de faire quoi que ce soit concernant les amis, il faut dresser un aspect communautaire à votre forum en installant une liste des membres.

Cette liste est vraiment simple à réaliser, il suffit en fait de faire une requête et d'afficher les résultats dans un tableau.

On va rapidement voir comment faire ça, tout d'abord il vous faut une nouvelle page que personnellement j'ai appelé memberlist.php, on commence un peu comme sur la page voirforum.php.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
//Cette fonction doit être appelée avant tout code html
session_start();

//On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
$titre = "Liste des membres";
include("includes/debut.php");
?>
<body>
<div id="banniere"></div>
<?php
//Maintenant, on se connecte à la base de données
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);

//A partir d'ici, on va compter le nombre de members
//pour n'afficher que les 25 premiers
$requete1 = mysql_query("SELECT COUNT(*) AS nbr FROM forum_membres");
$data1 = mysql_fetch_assoc($requete1);

$total = $data1['nbr'];
$MembreParPage = 25;
$NombreDePages = ceil($total / $MembreParPage);
?>
<div id="corps_forum">
<?php
echo'<a href ="./index.php">Index du forum</a> /
<a href="./memberlist.php">Liste des membres</a>';

if (isset($_SESSION['pseudo'])) // Si le membre est connecté
{
       
        //Voici les options
        echo'<p>Vous êtes connecté en tant que
        <a href="./voirprofil.php?m='.$_SESSION['id'].'&action=consulter">
        '.$_SESSION['pseudo'].'</a><br />
        <a href="./voirprofil.php?action=modifier">Modifier mon profil</a><br />
        <a href="./messagesprives.php">Consulter mes messages privés</a><br />
        <a href ="./deconnexion.php">Se déconnecter</a><br /></p>';

}
// Sinon, on propose de se connecter ou de s'enregistrer
else
{
        echo'<p>Vous n êtes pas connecté <br />
        <a href="./connexion.php">Se connecter</a><br />
        <a href="./register.php">Pas encore inscrit ?</a><br /></p>';
}
//Nombre de pages

if (isset($_GET['page']))
{
$page = intval($_GET['page']);
}
else
{
$page = 1;
}
//On affiche les pages 1-2-3, etc.
echo 'Page : ';
for ($i = 1 ; $i <= $NombreDePages ; $i++)
{
    if ($i == $page) //On ne met pas de lien sur la page actuelle
    {
    echo $i;
    }
    else
    {
    echo '<p>
    <a href="memberlist.php?f='.$forum.'&amp;page='.$i.'">'.$i.'</a>
    </p>';
    }
}


$premier = ($page - 1) * $MembreParPage;

//Le titre de la page
echo '<h1>Liste des membres</h1><br /><br />';


Là on a tout mis en place, arriver ici il faut pouvoir proposer au visiteur de classer les membres comme il le souhaite (par pseudo, age, date de naissance...). Pour le nombre de classement et leur nature c'est à vous de voir, pour ma part j'ai uniquement mis 4 propositions, le pseudo, la date d'inscription, la date de dernière connexion et le nombre de messages :) .

Ensuite il faut également faire en sorte qu'il puisse les classer par ordre croissant ou décroissant.

Pour faire ça, j'ai utilisé deux array qui vont permettre de convertir en texte compréhensible par n'importe qui le nom des champs de la table forum_membres correspondants.
Je m'explique ( :-° ), en fait on va demander au visiteur grâce à une liste déroulante de choisir par quoi il veut trier les membres. Seulement on ne peut pas lui proposer les noms des champs brut donc on passe par un tableau qui convertit tout ça.

Le mieux est encore de regarder le code ^^ .

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//Tri

$convert_order = array('membre_pseudo', 'membre_inscrit', 'membre_post', 'membre_derniere_visite'); 
$convert_tri = array('ASC', 'DESC');
//On récupère la valeur de s
if (isset ($_POST['s'])) $sort = $convert_order[$_POST['s']];
else $sort = $convert_order[0];
//On récupère la valeur de t
if (isset ($_POST['t'])) $tri = $convert_tri[$_POST['t']];
else $tri = $convert_tri[0];

?>
<form action="memberlist.php" method="post">
<p><label for="s">Trier par : </label>

<select name="s" id="s">
<option value="0" name="0">Pseudo</option>
<option value="1" name="1">Inscription</option>
<option value="2" name="2">Messages</option>
<option value="3" name="3">Dernière visite</option>
</select>

<select name="t" id="t">
<option value="0" name="0">Croissant</option>
<option value="1" name="1">Décroissant</option>
</select>
<input type="submit" value="Trier" /></p>
</form>
<?php
//Requête

$requete2 = mysql_query('SELECT membre_id, membre_pseudo, membre_inscrit, membre_post, membre_derniere_visite, online_id
FROM forum_membres
LEFT JOIN forum_whosonline ON online_id = membre_id
ORDER BY '.$sort.', online_id '.$tri.'
LIMIT ' . $premier . ', ' . $MembreParPage .'')
or die (mysql_error());

if (mysql_num_rows($requete2) > 0)
{
?>
       <table>
       <tr>
       <th class="pseudo"><strong>Pseudo</strong></th>             
       <th class="posts"><strong>Messages</strong></th>
       <th class="inscrit"><strong>Inscrit depuis le</strong></th>
       <th class="derniere_visite"><strong>Dernière visite</strong></th>                       
       <th><strong>Connecté</strong></th>             

       </tr>
       <?php
       //On lance la boucle
       
       while ($data2 = mysql_fetch_assoc($requete2))
       {
       echo '<tr><td>
       <a href="./voirprofil.php?m='.$data2['membre_id'].'&amp;action=consulter">
       '.$data2['membre_pseudo'].'</a></td>
       <td>'.$data2['membre_post'].'</td>
       <td>'.date('d/m/Y',$data2['membre_inscrit']).'</td>
       <td>'.date('d/m/Y',$data2['membre_derniere_visite']).'</td>';
       if (empty($data2['online_id'])) echo '<td>non</td>'; 
       else echo '<td>oui</td>';
       echo '</tr>';
       }
       ?>
       </table>
       <?php
}
else //S'il n'y a pas de message
{
        echo'<p>Ce forum ne contient aucun membre actuellement</p>';
}
?>
</div>
</body></html>


Et le voilà le travail, vous avez à présent une liste de membres assez sommaire mais qui a le mérite de marcher :D .

J'aimerai tout de même revenir sur la requête, vous avez remarqué que je fais une jointure sur la table forum_whosonline. En fait je cherche à récupérer l'id du membre, si elle s'y trouve c'est que le membre est connecté, sinon c'est qu'il ne l'est pas et donc la valeur de $data2['online_id'] sera NULL.
On réutilisera cette méthode dans la suite et maintenant on va pouvoir passer à la page de gestion des amis sans plus tarder!

Gestion des amis

Avoir des amis sur un forum... On se sent tout de suite moins seul, c'est plus rapide pour communiquer et puis ça met une meilleure ambiance, bref, que du bonheur :p .

J'imagine que la plupart d'entre vous a déjà au moins essayé ce système sur le site du zéro mais je vais quand même expliquer le principe.

Tout se passe sur une seule page que j'ai appelée amis.php, celle-ci comme beaucoup dans ce tuto, s'articule autour d'un switch.
Tout d'abord lorsque l'on arrive sur la page, un tableau liste les amis que l'on a, à partir de là il est possible de :


En effet pour avoir un ami, il faut que celui-ci soit d'accord, c'est pourquoi lorsque vous voulez ajouter un membre à votre liste, il est immédiatement prévenu (par MP par exemple) qu'il doit se rendre sur sa page de gestion des amis pour valider ou supprimer cette demande.

Avant tout, il nous faut une table dans la base de données, celle-ci (forum_amis) comprend 4 champs :


Voici le code à copier :

Code : SQL
1
2
3
4
5
6
7
CREATE TABLE `forum_amis` (
  `ami_from` int(11) NOT NULL,
  `ami_to` int(11) NOT NULL,
  `ami_confirm` enum('0','1') collate latin1_general_ci NOT NULL,
  `ami_date` int(11) NOT NULL,
  PRIMARY KEY  (`ami_to`,`ami_from`)
)


Allez on commence de suite :)

Déjà le début de la page est très classique, il faut simplement récupérer la valeur de action qui se trouve dans l'url et s'assurer que le visiteur est bien connecté.
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
//Cette fonction doit être appelée avant tout code html
session_start();
 
//On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
$titre = "Gestion des amis";
include("includes/debut.php");
?>
<body>
<div id="banniere"></div>
<?php
//Maintenant, on se connecte à la base de données
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
 
$action = htmlspecialchars($_GET['action']);
?>
<div id="corps_forum">
<?php
echo'<a href ="./index.php">Index du forum</a> /
<a href="./amis.php">Gestion des amis</a>';
 
if (isset($_SESSION['pseudo'])) // Si le membre est connecté
{
       
        //Voici les options
        echo'<p>Vous êtes connecté en tant que
        <a href="./voirprofil.php?m='.$_SESSION['id'].'&action=consulter">
        '.$_SESSION['pseudo'].'</a><br />
        <a href="./voirprofil.php?action=modifier">Modifier mon profil</a><br />
        <a href="./messagesprives.php">Consulter mes messages privés</a><br />
        <a href ="./deconnexion.php">Se déconnecter</a><br /></p>';
 
}
// Sinon, on propose de se connecter ou de s'enregistrer
else
{
        exit("<p>Désolé, vous devez être connecté pour être sur cette page</p>");
}
 
//Le titre 
echo '<h1>Gestion amis</h1><br /><br />';


Comme prévu, rien de très compliqué ni nouveau :p

Ajouter un ami



Pour ajouter un ami, on propose au membre un champ dans lequel il écrira le pseudo de cette personne, ensuite il faut lancer une série de tests pour s'assurer qu'il n'y a pas de problème.

Tout d'abord le formulaire :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
switch($action)
{
case "add": //On veut ajouter un ami
if (!isset($_POST['pseudo']))
{
echo '<form action="amis.php?action=add" method="post">
<p><label for="pseudo">Entrez le pseudo</label>
<input type="text" name="pseudo" id="pseudo" />
<input type="submit" value="Envoyer" />
</p></form>';
}


Comme vous voyez, on ne lance le formulaire que si la variable $_POST['pseudo'] est vide, c'est-à-dire si on vient d'arriver sur la page.

Ensuite pour la batterie de tests, j'ai prévu 3 conditions :


On va donc traduire ça en php.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
else
{
$pseudo = htmlspecialchars($_POST['pseudo']);
//On vérifie que le pseudo renvoit bien quelque chose :o (1)
$requete = mysql_query("SELECT membre_id, COUNT(*) AS nbr FROM forum_membres 
WHERE membre_pseudo = '".$pseudo."'
GROUP BY membre_pseudo") or die(mysql_error());
$data = mysql_fetch_assoc($requete);
$pseudo_exist = $data['nbr'];
$i = 0;
if(!$pseudo_exist)
{
echo '<p>Ce membre ne semble pas exister<br />
Cliquez <a href="./amis.php?action=add">ici</a> pour réessayer</p>';
$i++;
}
 
//On vérifie que le membre n'est pas déjà un ami (2)
$deja_ami = mysql_result(mysql_query("SELECT COUNT(*) AS nbr FROM forum_amis 
WHERE ami_from = '".$_SESSION['id']."' AND ami_to = '".$data['membre_id']."'
OR ami_from = '".$_SESSION['id']."' AND ami_to = '".$data['membre_id']."'"),0);
if ($deja_ami != 0)
{
echo '<p>Ce membre fait déjà parti de vos amis ou a déjà proposé son amitié :p<br />
Cliquez <a href="./amis.php?action=add">ici</a> pour réessayer</p>';
$i++;
}
 
//On vérifie que le membre ne s'ajoute pas lui même (3)
if ($data['membre_id'] == $_SESSION['id'])
{
echo '<p>Vous ne pouvez pas vous ajouter vous même<br />
Cliquez <a href="./amis.php?action=add">ici</a> pour réessayer</p>';
$i++;
}
 
//Si tout colle, on lance la requête
if ($i == 0)
{
mysql_query("INSERT INTO forum_amis (ami_from, ami_to, ami_confirm, ami_date)
VALUES('".$_SESSION['id']."', '".$data['membre_id']."', '0', '".time()."')");
 
echo '<p>'.$pseudo.' a bien été ajouté à vos amis, il faut toutefois qu il donne son accord.<br />
Cliquez <a href="./index.php">ici</a> pour retourner à l index du forum</p>';
}
}


Comme vous le voyez, la variable $i s'occupe de compter le nombre d'erreur. Même si je vois mal comment il peut y en avoir plusieurs en même temps o_O , cela permet de savoir si on peut lancer la requête ou non.

Voilà vous pouvez à présent demander à ajouter des amis ce qui est quand même un premier pas ^^ .

On va à présent voir la validation de ces demandes.

Validation des demandes



Cette partie du switch se présente de la façon suivante :
On affiche un tableau qui liste les membres qui vous ont voulu comme ami mais dont vous n'avez pas encore validé la demande.
Pour chacun on propose un lien vers l'acceptation et un autre vers le refus.
De la même façon, il va falloir vérifier qu'on vient d'arriver sur la page (auquel cas on affiche le tableau) ou qu'on a déjà fait son choix (dans ce cas on lance les requêtes).

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
case "check":
$membre = (int) $_GET['m'];
if (empty($membre))
{
$requete = mysql_query("SELECT ami_from, ami_date, membre_pseudo FROM forum_amis
LEFT JOIN forum_membres ON membre_id = ami_from
WHERE ami_to = '".$_SESSION['id']."' AND ami_confirm = '0'
ORDER BY ami_date DESC");
 
echo '<table align="center"><tr>
<th class="pseudo"><strong>Pseudo</strong></th>
<th class="inscrit"><strong>Date d ajout</strong></th>
<th><strong>Action</strong></th></tr>';
 
if (mysql_num_rows($requete) == 0)
{
echo '<td colspan="3" align="center">Vous n avez aucune proposition</td>';
}
while ($data = mysql_fetch_assoc($requete))
{
echo '<tr><td>
<a href="./voirprofil.php?m='.$data['ami_from'].'&amp;action=consulter">
'.$data['membre_pseudo'].'</a></td>
<td>'.date('d/m/Y',$data['ami_date']).'</td>
<td><a href="./amis.php?action=check&amp;m='.$data['ami_from'].'">
Accepter</a> - 
<a href="./amis.php?action=delete&amp;m='.$data['ami_from'].'">Refuser</a>
</td></tr>';
}
}


Si vous étudiez un peu les deux liens, vous verrez que dans ce switch on ne va s'occuper que du cas où vous acceptez la demande de validation. On récupère la valeur de l'ami qui se trouve dans l'url sous le nom de m. C'est par ailleur la présence, ou l'absence de cette variable qui nous indique si on doit afficher le tableau ou si on doit lancer les requêtes.

D'ailleurs on va voir les requêtes de suite :)

Code : PHP
1
2
3
4
5
6
7
8
9
else
{
mysql_query("UPDATE forum_amis SET ami_confirm = '1' 
WHERE ami_from = '".$membre."' AND ami_to = '".$_SESSION['id']."'");
 
echo '<p>Le membre a bien été ajouté à votre liste d ami<br />
Cliquez <a href="./amis.php">ici</a> pour retourner à la liste des amis';
}
break;


On change la valeur du champ ami_confirm à 1 et le tour est joué !

Hep attends une minute, dans la base de données on aura tantôt des membres qui seront dans les listes en tant que ami_to ou ami_from !


Oui mais ça ne pose pas de problème, il suffira de s'arranger avec la requête pour ne pas oublier de cas. En fait à partir du moment où la demande est validée, la différence entre les champs ami_to et ami_from n'existe plus.

Allez on file vers la suppression et puis on aura gagné !

Supprimer un ami



Derrière ce titre très ambigu ( :D ) se cache la dernière partie de notre switch.
La suppression d'un ami peut être de deux natures, soit vous voulez vous débarrasser d'un ami que vous avez depuis un moment et dont vous avez déjà validé la demande d'ajout. Soit vous voulez refuser une demande d'ajout.

L'avantage c'est qu'on a même pas besoin de faire la différence entre les deux, il suffit de récupérer la valeur de l'id du membre et de le virer de la base de données.

En revanche, comme il s'agit d'une suppression, il faut s'assurer que ce n'est pas une erreur en demandant une confirmation.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
case "delete":
$membre = (int) $_GET['m'];
$ok = htmlspecialchars($_GET['ok']);
if (!isset($ok))
{
echo '<p>Etes vous certain de vouloir supprimer ce membre ?<br />
<a href="./amis.php?action=delete&amp;ok=ok&amp;m='.$membre.'">oui</a> - 
<a href="./amis.php">non</a></p>';
}
else
{
mysql_query('DELETE FROM forum_amis 
WHERE ami_from = '.$membre.' AND ami_to = '.$_SESSION['id'].'
AND ami_to = '.$membre.' AND ami_from = '.$_SESSION['id']);
 
echo '<p>Membre correctement supprimé :D <br />
Cliquez <a href="./amis.php">ici</a> pour retourner à la liste des amis</p>';
}
break;


Vous voyez que comme on ignore si le membre se trouve au champ ami_to ou ami_from, on supprime les deux sans faire de distinction. Je ne pense pas que ce code pose de problème dans le cas contraire.

Il est tout de même important de prévenir l'ami en question, vous pouvez vous arranger pour qu'il reçoive le cas échéant un MP pour le prévenir. Il est en est d'ailleurs de même pour les demandes d'ajout, les validations etc...


Enfin on affiche la liste des amis



Je vais passer vite là dessus étant donné que c'est ce que l'on a fait dans le premier chapitre.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
default:
 
echo '<p> Bienvenue sur la page de gestion d ami<br />
<a href="./amis.php?action=add">Cliquez ici pour ajouter un ami</a>
<br />
<a href="./amis.php?action=check">Cliquez ici pour voir les demandes d ajout</a></p>';
 
$requete = mysql_query("SELECT ami_from, ami_date, membre_pseudo, online_id 
FROM forum_amis
LEFT JOIN forum_membres ON membre_id = ami_from
LEFT JOIN forum_whosonline ON online_id = ami_from
WHERE ami_to = '".$_SESSION['id']."' AND ami_confirm = '1'
AND ami_from = '".$_SESSION['id']."' AND ami_confirm = '1'
ORDER BY ami_date, online_id DESC");
 
echo '<table align="center"><tr>
<th class="pseudo"><strong>Pseudo</strong></th>
<th class="inscrit"><strong>Date d ajout</strong></th>
<th><strong>Action</strong></th>
<th><strong>Connecté</strong></th></tr>';
 
if (mysql_num_rows($requete) == 0)
{
echo '<td colspan="3" align="center">Vous n avez aucun ami pour l instant</td>';
}
while ($data = mysql_fetch_assoc($requete))
{
echo '<tr><td>
<a href="./voirprofil.php?m='.$data['ami_from'].'&amp;action=consulter">
'.$data['membre_pseudo'].'</a></td>
<td>'.date('d/m/Y',$data['ami_date']).'</td>
<td>
<a href="./messagesprives.php?action=repondre&amp;&amp;m='.$data['ami_from'].'">
Envoyer un MP</a><br />
<a href="./amis.php?action=delete&m='.$data['ami_from'].'">Supprimer</a></td>';
if (!empty($data['online_id'])) echo '<td>Oui</td>'; else echo '<td>Non</td>';
echo '</tr>';
}
break;
}//Fin du switch
 
?>
</div>
</body></html>


On récupère tout ce qui concerne le membre dans la table forum_amis puis on affiche. Maintenan c'est à vous de personnaliser cette page comme ça vous arrange.
En général, il est très utile comme sur le SDZ de mettre dans le menu la liste des amis connectés ce qui n'est pas très compliqué si vous avez suivi jusque ici :)

Réponses automatiques

Bon on passe maintenant à l'autre système qui est la réponse automatique que les modérateurs peuvent activer pour leur éviter de répéter 10 fois par jour la même chose.
Croyez moi sur un forum assez important ça évite pas mal de crise de nerfs à votre équipe ^^

Alors, le principe est assez simple, sur la base de données vous allez enregistrer une série de messages que vous voulez voir afficher. Puis sur la page voirtopic.php, à côté de toutes les options de modérations, vous mettrez une liste déroulante qui contient tous ces messages. Ensuite le modérateur en sélectionne un puis envoie le tout. Il faut également penser à verrouiller le topic une fois tout ça fait.

Vous pouvez également stocker les messages sur un fichier php à part ce qui peut être plus facile pour les écrire.
Dans tous les cas il faut tenir compte du parsage, comme sur ce tuto, les messages sont parsés à l'affichage, il faudra les écrire comme si vous faisiez un post (donc en utilisant le bbcode/zcode etc... :-°


Vous allez donc lancer ceci dans votre base de données
Code : SQL
1
2
3
4
5
6
CREATE TABLE `forum_automess` (
`automess_id` TINYINT( 3 ) NOT NULL AUTO_INCREMENT ,
`automess_mess` TEXT NOT NULL ,
`automess_titre` VARCHAR( 200 ) NOT NULL ,
PRIMARY KEY ( `automess_id` )
) TYPE = MYISAM ;


Je pense que vous pouvez deviner un peu le principe, le titre sera le texte qui va apparaitre dans la liste déroulante et le message sera ... le message qui sera posté :D

Afficher la liste déroulante



Pour ce code qui se trouve sur la page voirtopic.php, le code est simple puisqu'il suffit de faire une requête et de tout lister. Par contre, assurez vous bien d'être toujours dans la partie de votre page qui est sous la vérification d'accès. En effet, seuls les modérateurs peuvent poster des réponses automatiques :)

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
echo '<p>Réponse automatique :</p>
<form method="post" action=postok.php?action=autorep&amp;t='.$topic.'>
<select name="rep">';
$requete = mysql_query('SELECT automess_id, automess_titre
FROM forum_automess');
while ($data = mysql_fetch_assoc($requete))
{
     echo '<option value="'.$data['automess_id'].'">
     '.$data['automess_titre'].'</option>';
}
echo '</select>  
<input type="submit" name="submit" value="Envoyer" /></form>';


Le mieux est encore de placer ce code à la suite du script qui affichait la liste déroulante pour le déplacement du topic.

Etant donné qu'une fois la réponse activée le topic sera verrouillé, il peut être préférable de ne pas afficher cette option dans le cas où le topic est déjà verrouillé. Il suffit pour cela de mettre une condition en jouant sur la valeur du champ topic_locked


Traitement du message



Pour cette partie on va reprendre la page postok.php et ajouter une dernière option à notre switch.
Si vous regardez la cible du formulaire qui se trouve plus haut, vous voyez que je l'ai appelé autorep. Par ailleurs, ce formulaire renvoie l'id du message à afficher sous le sobre nom de rep.

A partir de là il suffit de faire une requête pour récupérer le texte en question et l'afficher comme s'il s'agissait d'un vrai message. Puis avant de terminer il faudra veiller à fermer le sujet.

Bref, beaucoup de copie de code déjà vu et un peu de nouveautés :) .

Début du script



Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
case "autorep":
$topic = (int) $_GET['t'];
$requete1 = mysql_query('
SELECT forum_topic.forum_id, auth_modo
FROM forum_topic
LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id
WHERE topic_id = '.$topic.'');
$data1 = mysql_fetch_assoc($requete1);
if (!verif_auth($data1['auth_modo']))
{
// Si cette condition n'est pas remplie ça va barder :o
echo'<p>Vous n\'avez aucun droit d\'être ici</p>';
exit();
}


Comme habituellement (je vous renvoie au TP sur la modération si ça ne vous rappelle vraiment rien) on fait une vérification sur les droits du membre, on récupère des infos sur le topic et puis on commence.

Récupération du message




Code : PHP
1
2
3
4
5
6
$rep = (int) $_POST['rep'];
$forum = $data1['forum_id'];
$requete = mysql_query('SELECT automess_mess FROM forum_automess 
WHERE automess_id = '.$rep);
$data = mysql_fetch_assoc($requete);
$message = $data['automess_mess'];


Rien de très compliqué ici, on récupère simplement des informations avant de commencer à lancer la machine ^^

Enregistrement du message



Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql_query("INSERT INTO forum_post
(post_id, post_createur, post_texte, post_time, topic_id, post_forum_id)
VALUES(',' ,'".$_SESSION['id']."', '".$message."', '".time()."', '".$topic."', '".$forum."')")
or die ("Une erreur semble avoir survenu lors de l'envoi du message");

$nouveaupost = mysql_insert_id();

//On change un peu la table forum_topic
mysql_query("UPDATE forum_topic
SET topic_post = topic_post + 1,
topic_last_post = '".$nouveaupost."'
WHERE topic_id ='".$topic."'")
or die ("Une erreur semble avoir survenu lors de l'envoi du message");

//Puis même combat sur les 2 autres tables
mysql_query("UPDATE forum_forum
SET forum_post = forum_post + 1 ,
forum_last_post_id = '".$nouveaupost."'
WHERE forum_id = '".$forum."'")
or die ("Une erreur semble avoir survenu lors de l'envoi du message");

mysql_query("UPDATE forum_membres
SET membre_post = membre_post + 1
WHERE membre_id = '".$_SESSION['id']."'")
or die ("Une erreur semble avoir survenu lors de l'envoi du message");


Ce code est exactement le même que celui qui se trouvait dans la partie traitant des réponses. On enregistre le message, on met à jour le forum et le profil du membre (oui une réponse automatique reste une réponse et donc augmente de 1 le nombre de posts d'un modo ^^ ).

On verrouille et c'est gagné !



Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
mysql_query("UPDATE forum_topic
SET topic_locked = '1'
WHERE topic_id = '".$topic."'");
echo '<p>La réponse automatique a bien été envoyée ! <br />
Cliquez <a href="./voirtopic.php?t='.$topic.'">ici</a>
pour revenir au topic<br />
Cliquez <a href="./index.php">ici</a>
pour revenir à l index du forum</p>';

break;


Et voilà le travail les amis :p Tout est maintenant en place pour que vos modérateurs ne se tracassent pas trop et puissent assouvir leur moindre désir de répression :diable: .

Chapitre précédent Sommaire
Retour en haut Retour en haut


Créé : le 13/09/2006 à 19:48:41
Modifié : Hier à 18:17:06
Avancement : 100%
Nb de visites : 5136
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 70 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.0807s (0.0693s)