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)
Cette partie vous donnera le code minimum pour ajouter un membre à la liste des participants d'un MP, et la page pour supprimer un MP. Ces pages sont des petits plus que je vous fournis, parce qu'elles ne sont vraiment pas compliquées à coder.
Comme toujours, une petite vérification.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <?php
if(!empty($_GET['id_mp']))
$id_mp = intval($_GET['id_mp']);
if(!isset($id_mp)) // Si on a pas d'id
die('Vous n\'avez pas choisi de MP');
$sql = 'SELECT mps.mp_id, mp_titre, (SELECT COUNT(*) FROM mp_messages mpm WHERE mpm.mp_id = mps.mp_id) AS nb_messages
FROM mp_sujets mps
WHERE mps.mp_id = '.$id_mp;
$requete = mysql_query($sql) or die(mysql_error());
if(!($infos_mp = mysql_fetch_assoc($requete))
die('Le MP n\'existe pas.');
?>
|
Pour plus de facilité, je pars du principe que tout le monde peut ajouter un membre à la liste des participants.
Avant d'afficher le formulaire pour sélectionner un pseudo, il faut voir si le
nombre de participants dans la conversation
n'est pas supérieur à celui de la configuration. Pour ça, on va récupérer la liste des participants - pour pouvoir vérifier ensuite si le membre que l'on va ajouter n'est pas déjà dans la liste -, les mettre dans un array et
compter le nombre d'entrées.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | <?php
$sql = 'SELECT mpp.membre_id, membre_pseudo, mpp_supprimer
FROM mp_participants mpp
LEFT JOIN membres m ON m.membre_id = mpp.membre_id
WHERE mp_id = '.$id_mp.'
ORDER BY membre_pseudo ASC';
$requete = mysql_query($sql) or die(mysql_error());
$liste_participants = array();
while($row = mysql_fetch_assoc($requete))
{
$liste_participants[$row['membre_id']] = $row;
}
mysql_free_result($requete);
if(count($liste_participants) == $config['nb_participants_par_mp'])
die('Vous ne pouvez pas ajouter de membres');
?>
|
Ceci étant fait, on peut préparer notre page. Si on a proposé un membre, on insère, sinon on affiche le formulaire :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <?php
if(isset($_POST['envoyer']) AND trim($_POST['pseudo']) AND !empty($_POST['pseudo']))
{
// Insertion
}
else
{
?>
<form method="post" action="ajouter_membre.php">
<fieldset>
<label for="pseudo">Pseudo</label>
<input type="text" name="pseudo" id="pseudo" tabindex="1" /><br /><br />
<input type="submit" name="envoyer" value="Envoyer" tabindex="2" />
</fieldset>
</form>
<?php } ?>
|
Et maintenant, on va insérer.
C'est simple, on a que deux vérifications à faire :
si le membre existe et peut avoir une nouvelle conversation, et si le
membre n'est pas déjà dans la liste des participants.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <?php
if(isset($_POST['envoyer']) AND trim($_POST['pseudo']) AND !empty($_POST['pseudo']))
{
$sql = 'SELECT m.membre_id FROM membres m WHERE m.membre_pseudo = "'.mysql_real_escape_string($HTTP_POST_VARS['pseudo']).'" AND (SELECT COUNT(*) FROM mp_participants WHERE mp_participants.membre_id = m.membre_id) < '.$config['nb_max_mp'];
$requete = mysql_query($sql) or die(mysql_error());
if($row = mysql_fetch_assoc($requete) AND !array_key_exists($row['membre_id'], $liste_participants)) // Si le membre existe et s'il n'est pas dans les clés du tableau
{
$sql = 'INSERT INTO mp_participants (mp_id, membre_id) VALUES ('.$id_mp.', '.$row['membre_id'].')';
mysql_query($sql) or die(mysql_error());
}
}
?>
|
Et voilà. Très très rapide comme je vous l'avais dit.
Il ne faut pas oublier de faire les vérifications habituelles. Mais, cette fois-ci, on récupère aussi
le nombre de participants et le nombre de participants qui ont supprimé la conversation.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <?php
if(!empty($_GET['id_mp']))
$id_mp = intval($_GET['id_mp']);
if(!isset($id_mp)) // Si on a pas d'id
die('Vous n\'avez pas choisi de MP');
$sql = 'SELECT mps.mp_id, mp_titre, (SELECT COUNT(*) FROM mp_messages mpm WHERE mpm.mp_id = mps.mp_id) AS nb_messages, (SELECT COUNT(*) FROM mp_participants mpp WHERE mpp.mp_id = mps.mp_id AND mpp.mpp_supprimer = 1) AS nb_supprimer, (SELECT COUNT(*) FROM mp_participants mpp2 WHERE mpp2.mp_id = mps.mp_id) AS nb_participants
FROM mp_sujets mps
WHERE mps.mp_id = '.$id_mp;
$requete = mysql_query($sql) or die(mysql_error());
if(!($infos_mp = mysql_fetch_assoc($requete))
die('Le MP n\'existe pas.');
?>
|
Pour supprimer, c'est très facile, mais il y a une nouvelle condition. Si le nombre de personnes qui ont supprimé la conversation + 1 (le membre actuel) est égal au nombre total de participants, on supprime toutes les informations de toutes les tables. Sinon, on fait juste un
UPDATE.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | <?php
if($infos_mp['nb_participants'] == ($infos_mp['nb_supprimer'] + 1))
{
$sql = 'DELETE t1, t2, t3, t4
FROM mp_participants AS t1
LEFT JOIN mp_sujets AS t2 ON t2.mp_id = t1.mp_id
LEFT JOIN mp_messages AS t3 ON t3.mp_id = t1.mp_id
WHERE t1.mp_id = '.$id_mp;
mysql_query($sql) or die(mysql_error());
}
else
{
$sql = 'UPDATE mp_participants SET mpp_supprimer = 1 WHERE membre_id = '.$id_membre;
mysql_query($sql) or die(mysql_error());
}
?>
|
Pour le
DELETE, on peut utiliser les jointures pour joindre toutes les tables et supprimer toutes les données dont le
WHERE est vérifié.
Pour le DELETE sur plusieurs tables, on peut le faire de cette façon :
DELETE t1, t2 FROM t1, t2 WHERE ...
Dans ce cas-là, seules les lignes correspondantes dans les tables t1 et t2 sont supprimées.
N'hésitez pas à
lire la doc pour bien comprendre.