Aller au menu - Aller au contenu

TP : Modérer le forum

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2 
Pseudo Commentaire
Page Précédente  1  2 
Hors ligne guitoulio # Posté le 10/11/2009 à 10:10:59

moi j'i comprends rien tu ne dit pas toujours ou les code doivent ils être mis et vu que je suis nouveau je me galere beaucoup.
Hors ligne M4TtH13u # Posté le 13/01/2010 à 12:55:11
Qui ne tente rien n'a rien
Avatar

j'ai essayé de mettre le tuto pour l'administration et quand je decide de supprimer mon message il me demande si c'est bien ce que je veux je repond oui et ensuite une feuille blanche apparait j'ai regarder l'adresse ça vient du fichier postok.php
j'ai decouvert que le case'delete' quand il etait pas le fichier postok.php fonctionnait o_O
alors qu'avec ça fonctionne pas :colere2: il doit y avoir un probleme dans le code

Secret (cliquez pour afficher)
case "delete": //Si on veut supprimer le post
//On récupère la valeur de p
$post = (int) $_GET['p'];
$requete1 = mysql_query('
SELECT post_createur, post_texte, forum_id, topic_id, auth_modo
FROM forum_post
LEFT JOIN forum_forum ON forum_post.post_forum_id = forum_forum.forum_id
WHERE post_id='.$post.'');
$data1 = mysql_fetch_assoc($requete1);
$topic = $data1['topic_id'];
$forum = $data1['forum_id'];

//Ensuite on vérifie que le membre a le droit d'être ici
//(soit le créateur soit un modo/admin)
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></div></body></html>';
exit();
}
else //Sinon ça roule et on continue
{
//Ici on vérifie plusieurs choses :
//est-ce un premier post ? Dernier post ou post classique ?

$requete_first_post = mysql_query("SELECT COUNT(*)
AS first_post
FROM forum_topic
WHERE topic_first_post = $post");

$requete_last_post = mysql_query("SELECT COUNT(*)
AS last_post
FROM forum_topic
WHERE topic_last_post = $post");

$first_post = mysql_fetch_assoc($requete_first_post);
$last_post = mysql_fetch_assoc($requete_last_post);


//On distingue maintenant les cas
if ($first_post['first_post'] != 0)
//Si le message est le premier
{

//Les autorisations ont changé !
if (!verif_auth($data1['auth_modo']))
{
echo'<p>
Vous n\'avez aucun droit d\'être ici</p></div></body></html>';
exit();
}
//Il faut s'assurer que ce n'est pas une erreur

echo'<p>Vous avez choisi de supprimer un post.
Cependant ce post est le premier du topic.
Voulez vous supprimer le topic ? <br />
<a href="./postok.php?action=delete_topic&amp;t='.$topic.'">oui</a>
- <a href="./voirtopic.php?t='.$topic.'">non</a></p>';


}

elseif ($last_post['last_post'] != 0)
//Si le message est le dernier

{

//On supprime le post
mysql_query("DELETE FROM forum_post
WHERE post_id = '".$post."'");

//On modifie la valeur de topic_last_post pour cela on
//récupère l'id du plus récent message de ce topic
$requete4 = mysql_query('SELECT post_id
FROM forum_post
WHERE topic_id = '.$topic.'
ORDER BY post_id DESC
LIMIT 0,1');
$data4 = mysql_fetch_assoc($requete4);

//On fait de même pour forum_last_post_id
$requete5 = mysql_query('SELECT post_id
FROM forum_post
WHERE post_forum_id = '.$forum.'
ORDER BY post_id DESC
LIMIT 0,1');
$data5 = mysql_fetch_assoc($requete5);

//On met à jour la valeur de topic_last_post
mysql_query("UPDATE forum_topic
SET topic_last_post = $data4['post_id']
WHERE topic_last_post = $post");

//On enlève 1 au nombre de messages du forum et on met à
//jour forum_last_post
mysql_query("UPDATE forum_forum
SET forum_post = forum_post - 1,
forum_last_post_id = $data5['post_id']
WHERE forum_id = $forum");

//On enlève 1 au nombre de messages du topic
mysql_query("UPDATE forum_topic
SET topic_post = topic_post - 1
WHERE topic_id = $topic");

//On enlève 1 au nombre de messages du membre
mysql_query("UPDATE forum_membres
SET membre_post = membre_post - 1
WHERE membre_id = $data1['post_createur']");

//Enfin le message
echo'<p>Le message a bien été supprimé !<br />
Cliquez <a href="./voirtopic.php?t='.$topic.'">ici</a>
pour retourner au topic<br />
Cliquez <a href="./index.php">ici</a>
pour revenir à l index du forum</p>';

}

elseif ($last_post['last_post'] == 0
&& $first_post['first_post'] == 0) // Si c'est un post classique

{

//On supprime le post
mysql_query("DELETE FROM forum_post
WHERE post_id = $post");

//On enlève 1 au nombre de messages du forum
mysql_query("UPDATE forum_forum
SET forum_post = forum_post - 1
WHERE forum_id ='".$forum."'");

//On enlève 1 au nombre de messages du topic
mysql_query("UPDATE forum_topic
SET topic_post = topic_post - 1
WHERE topic_id = $topic");

//On enlève 1 au nombre de messages du membre
mysql_query("UPDATE forum_membres
SET membre_post = membre_post - 1
WHERE membre_id = $data1['post_createur']");

//Enfin le message
echo'<p>Le message a bien été supprimé !<br />
Cliquez <a href="./voirtopic.php?t='.$topic.'">ici</a> pour retourner au topic<br />
Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum</p>';
}

}
break;
case "delete_topic":
$topic = (int) $_GET['t'];
$requete1 = mysql_query('
SELECT forum_topic.forum_id, auth_modo
FROM forum_topic
LEFT JOIN forum_forum ON forum_topic.forum_id = forum_forum.forum_id
WHERE topic_id='.$topic.'');
$data1 = mysql_fetch_assoc($requete1);
$forum = $data1['forum_id'];

//Ensuite on vérifie que le membre a le droit d'être ici
//c'est-à-dire si c'est un modo / admin

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></div></body></html>';
exit();
}
else //Sinon ça roule et on continue
{
//On compte le nombre de post du topic
$requete_count_post = mysql_query("SELECT COUNT(*)
AS nombre_post
FROM forum_post
WHERE topic_id = $topic");

$data_nombrepost = mysql_fetch_assoc($requete_count_post);
$nombrepost = $data_nombrepost['nombre_post'];

//On supprime le topic
mysql_query("DELETE FROM forum_topic
WHERE topic_id = $topic");

//On enlève le nombre de post posté par chaque membre dans le topic
$requete_postparmembre = mysql_query('SELECT post_createur,
COUNT(*) AS nombre_mess
FROM forum_post
WHERE topic_id = '.$topic.'
GROUP BY post_createur');

while($data_postparmembre = mysql_fetch_assoc($requete_postparmembre))
{
mysql_query('UPDATE forum_membres
SET membre_post = membre_post - '.$data_postparmembre['nombre_mess'].'
WHERE membre_id = '.$data_postparmembre['post_createur']);
}

//Et on supprime les posts !
mysql_query("DELETE FROM forum_post
WHERE topic_id = $topic");

//Dernière chose, on récupère le dernier post du forum
$requete_forum = mysql_query('SELECT post_id
FROM forum_post
WHERE post_forum_id = '.$forum.'
ORDER BY post_id DESC
LIMIT 0,1');
$data_forum = mysql_fetch_assoc($requete_forum);

//Ensuite on modifie certaines valeurs :
mysql_query("UPDATE forum_forum
SET forum_topic = forum_topic - 1,
forum_post = forum_post - $nombrepost,
forum_last_post_id = $data_forum['post_id']
WHERE forum_id = $forum");


//Enfin le message
echo'<p>Le topic a bien été supprimé !<br />
Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum</p>';
}
break;

la case delete topic aussi d'ailleurs ne fonctionne pas ça doit venir du code mais j'ai pas de message d'erreur
:pirate:
Hors ligne antoniomartique # Posté le 13/02/2010 à 08:51:32
Avatar

Moi j'ai un probleme lorsqu'il faut deverouiller les topic :(
sa m'affiche Notice: Undefined variable: amp in C:\wamp2\wamp\www\site\voirtopic.php on line 178
Notice: Use of undefined constant topic - assumed 'topic' in C:\wamp2\wamp\www\site\voirtopic.php on line 178
Voici les quelques lignes concerné:
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
if ($data3['topic_locked'] == 1) // Topic verrouillé !
{
echo'<a href="./postok.php?action=unlock&t='.$amp;topic.'">
<img src="./images/unlock.gif" alt="deverrouiller" 
title="Déverrouiller ce sujet" /></a>';
}
else //Sinon le topic est déverrouillé !
{
echo'<a href="./postok.php?action=lock&amp;t='.$topic.'">
<img src="./images/lock.gif" alt="verrouiller" 
title="Verrouiller ce sujet" /></a>';
}


EDIT:
solution:
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
if ($data3['topic_locked'] == 1) // Topic verrouillé !
{
echo'<a href="./postok.php?action=unlock&amp;t='.topic.'">
<img src="./images/unlock.gif" alt="deverrouiller" 
title="Déverrouiller ce sujet" /></a>';
}
else //Sinon le topic est déverrouillé !
{
echo'<a href="./postok.php?action=lock&amp;t='.$topic.'">
<img src="./images/lock.gif" alt="verrouiller" 
title="Verrouiller ce sujet" /></a>';
}

"les choses changent mais n'évoluent jamais" www.justwin.fr
 
Connecté samo73 # Posté le 17/03/2010 à 17:05:11
La science est une lumière

Bjr tout le monde ,
même si c'est trop tard, ça peut toujours aider certains zéros perdus comme moi, juste pour répondre à la question de Dharks concernant l'erreur :
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/test/www/forum/postok.php on line 297

et qui située dans la page "postok.php", et beh l'erreur est dans le case "delete_topic" et plus précisément dans la partie du code suivante:

Code : PHP
1
2
3
4
5
6
//Ensuite on modifie certaines valeurs :
        mysql_query("UPDATE forum_forum
        SET forum_topic = forum_topic - 1,
        forum_post = forum_post - $nombrepost,
        forum_last_post_id = $data_forum['post_id']
        WHERE forum_id = $forum");

et la correction est la suivante:

Code : PHP
1
2
3
4
5
6
//Ensuite on modifie certaines valeurs :
        mysql_query("UPDATE forum_forum
        SET forum_topic = forum_topic - 1,
        forum_post = forum_post - $nombrepost,
        forum_last_post_id = '".$data_forum['post_id']."'
        WHERE forum_id = '".$forum."'");

voilà donc la solution de cette mystérieuse erreur. see you freinds.
Hors ligne rambika # Posté le 07/04/2010 à 00:09:07

Bonsoir,
J'ai des soucis au niveau de la suppression des messages. Tout s'efface mais dans la page index, le forum_topic, forum_last_post_id et forum_post ne s'est pas mis à jour. Pourtant, au niveau du membre qui a posté, il s'est bien mis à jour.
Quelqu'un pourrait-il m'aider sur ce update qui ne fonctionne pas ? Merci d'avance
Hors ligne rambika # Posté le 11/04/2010 à 03:15:57

vraiment personne pour m'aider ?
Hors ligne rambika # Posté le 14/04/2010 à 21:47:08

Encore moi qui cherche désepérement une solution à mon problème. En fait, ça met à jour lorsqu'on supprime un message mais lorsque c'est le premier, ça supprime mais ne se remet pas à jour les nombres de messages.
Hors ligne rambika # Posté le 15/04/2010 à 22:48:00

dsl
Hors ligne MasterMh # Posté le 03/07/2010 à 23:15:50

...
Hors ligne Zorado # Posté le 06/08/2010 à 19:26:02
www.futurstation.net
Avatar

Bonjour, moi je rencontre un gros problème, tout marche bien, mais tout le monde peut supprimer n'importe quelle post, il suffit d'utiliser le lien direct "postok.php?action=delete&p=(n° du message)", pouvez vous me dire ce que je dois faire ?

Image utilisateur
 
Hors ligne Zhela # Posté le 11/03/2011 à 14:13:53
Avatar

Ville : Court-st-etienne
Pays : Belgique
Études : Université catholique de Louvain

Il y a quand même une belle faille de sécurité CSRF...
 
Hors ligne Ac_Business # Posté le 18/08/2011 à 20:15:59

Bonjours

tout d'abord ce sujet est tout simplement magnifique grâce à lui j'ai réalisé une partie pénible de mon site.

je voulais juste vous exposé un bout de code qui permet de cacher les éléments verrouiller et déplacer car j'ai des doute a propos de ma requête :

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
<?php
$query = $db->prepare('SELECT topic_locked, 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');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
if (verif_auth($data['auth_modo'])){
if ($data['topic_locked'] == 1) // Topic verrouillé !
{
    echo'<a href="./postok.php?action=unlock&t='.$topic.'">
    <img src="./images/unlock.gif" alt="deverrouiller" title="Déverrouiller ce sujet" /></a>';
}
else //Sinon le topic est déverrouillé !
{
    echo'<a href="./postok.php?action=lock&amp;t='.$topic.'">
    <img src="./images/lock.gif" alt="verrouiller" title="Verrouiller ce sujet" /></a>';
}
$query->CloseCursor();
}
?>


j'ai modifier la requête initial au tuto pour récupérer auth_modo afin de l'utilisé dans un if qui vérifier le niveau du membre.

merci de me corrigé si j'ai négligé quelque chose ^^
Pour accéder à cette section
Connectez-vous !
connexion_rpx