Autorisation accée etape par étape

Résolu/Fermé
arthur - Modifié le 1 mai 2019 à 10:11
 arthur - 1 mai 2019 à 17:20
Bonjour,

es-ce quelqu'un peut m'expliquer étape par étape pour les accée autorisé du forum

car j'ai du mal enfin plus du mal que les autres

je vous mets ceux qu'il est marqué dans le tuto et si on peut m'expliquer ou il faut mettre lle code

merci

il dit sur la page voirforum.php

sur la requette qui est

//A partir d'ici, on va compter le nombre de messages 
//pour n'afficher que les 25 premiers
$query=$db->prepare('SELECT forum_name, forum_topic, auth_view, auth_topic FROM forum_forum WHERE forum_id = :forum');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();


il dit

Juste en dessous, nous allons utiliser la fonction pour vérifier les droits du membres : s'il y a un problème on utilise la fonction erreur avant d'afficher quoi que ce soit. A vous d'aller faire les bonnes modifications dans la page constants.php, je vais pas tout faire non plus (nan mais ! :colere2: )


<?php
if (!verif_auth($data['auth_view']))
{
erreur(ERR_AUTH_VIEW);
}
?>


es-ce que ce code je doit mettre dans la page constant ou sur la page voirfforum en sous de la requette

en sachant sur la page constant j'ai ca

<?php
define('VISITEUR',1);
define('INSCRIT',2);
define('MODO',3);
define('ADMIN',4);
define('ERR_IS_CO','Vous ne pouvez pas accéder à cette page si vous n\'êtes pas connecté');
?>


es ce que je met lecode en sous du code constant ou voir forum






Configuration: Windows / Chrome 73.0.3683.103

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
1 mai 2019 à 10:49
Heuuuu.... ben.. la réponse est dans la question je pense......

il dit sur la page voirforum.php

donc... la réponse à ta question est :
sur la page voirforum.php
0
j'avais mis ca sur la page aau cas ou

mais quand je met ca ce code pour cacher le button


	  if (verif_auth($data['auth_topic']))
	  {
	  //Et le bouton pour poster
	  echo'<a href="./poster.php?action=nouveautopic&f='.$forum.'"><img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
	  }
	  else
	  {
	  echo'on affiche pas dimage';
	  }


mais je vois toujour le button es ce que c'est normal ou pas
0
ca marche, je voit pas limage car il fallait être deconecter

mais je reviendrais des que j'aurais un soucy de compenhention du texte
0
juste une question

il dit ajouter a ma table

ALTER TABLE `forum_topic` ADD `topic_locked` enum('0','1')  AFTER `topic_post`


là c'est bon

ensuite j'ai bien rajouté forum_topic.topic_locked à ma requette

	  $query=$db->prepare('SELECT forum_topic.topic_id, topic_titre, topic_createur, topic_vu, topic_post, topic_time, topic_last_post, forum_topic.topic_locked , Mb.membre_pseudo AS membre_pseudo_createur, post_createur, post_time, Ma.membre_pseudo AS membre_pseudo_last_posteur, post_id FROM forum_topic 
	                       LEFT JOIN forum_membres Mb ON Mb.membre_id = forum_topic.topic_createur
						   LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
						   LEFT JOIN forum_membres Ma ON Ma.membre_id = forum_post.post_createur    
						   WHERE topic_genre = "Annonce" AND forum_topic.forum_id = :forum 
						   ORDER BY topic_last_post DESC');



là c'est bon,

mais après il dit

Un tout petit mot sur l'édition
Je sais que j'ai dit plus haut que ça serait simple mais je vais quand même vous indiquer comment faire pour écrire un lien pointant directement vers le post édité.
Dans le cas d'une réponse c'est simple puisqu'il s'agit forcément du dernier post envoyé donc pour obtenir la page il suffit de prendre la dernière.
Ici c'est un peu différent, alors on est obligé de compter... et bien comptons 



//Cette requête va récupérer le nombre de posts avant celui que vous éditez
$query= $db->prepare('SELECT COUNT(*) AS nbr FROM forum_post 
WHERE topic_id = :topic AND post_time < LE POST_TIME DU MESSAGE');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data = $query->fetch();

//Les 3 lignes habituelles
$nombreDeMessagesParPage = 15;
$nbr_post = $data['nbr']+1;
$page = ceil($nbr_post / $nombreDeMessagesParPage);

echo'<p>Votre message a bien été édité!<br /><br />
Cliquez <a href="./voirtopic.php?t='.$topic.'&page='.$page.'#p_'.$post.'">ici</a> pour le voir</p>';


si je mets en sous de la equette il me dit

Notice: Undefined variable: topic in /var/www/legtux.org/users/communautaire/www/V1/voirforum.php on line 101

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'POST_TIME DU MESSAGE' at line 2 in /var/www/legtux.org/users/site/www/V1/voirforum.php:102 Stack trace: #0 /var/www/legtux.org/users/site/www/V1/voirforum.php(102): PDOStatement->execute() #1 {main} thrown in /var/www/legtux.org/users/site/www/V1/voirforum.php on line 102


een attendant ta reponse j'attendrais pour passé à la suite
0
je revien a la meme erreur qu'avant

il dit

Page poster.php et postok
Comme ce qu'on fait depuis tout à l'heure est assez répétitif, et surtout assez facile, je vais vous laisser vous occuper seuls de cette page, parce qu'il est important que vous ayez compris le fonctionnement de ce système afin de pouvoir le personnaliser au maximum.

Voilà ce qu'il faut vérifier :

déjà, que le visiteur a le droit d'être sur le forum (auth_view)

ensuite, qu'il a le droit de poster un nouveau sujet (pour cela, il faut travailler à l'intérieur du switch après le case"nouveautopic":)

enfin, de la même façon qu'il peut répondre (case"repondre":)

Encore une fois, tout est déjà mis en place grâce à une requête, celle-ci diffère selon qu'on se trouve dans le cas d'un nouveau topic ou d'une réponse.

Pensez à placer les vérifications avant d'afficher le contenu de la page : si elle n'est pas remplie, faîtes un simple erreur, puis passez à la suite.

Pour ce qui est de la page postok.php, on ne peut logiquement pas s'y rendre en postant quelque chose, dans la mesure où l'accès à la page poster.php est bloqué si on n'a pas les droits. Toutefois, ça ne coûte rien de le faire quand même : faites donc exactement les mêmes modifications là-bas.

Nous avons maintenant terminé ce système d'autorisations ; dans tous les forums, vous pouvez régler différents niveaux d'accès. Libre à vous de faire une partie réservée aux modérateurs ou aux administrateurs.


j'ai bien mis pour la page poster


en haut de l page apres la requette

	  ////////////////////////ajout du début le 1/05 afin de donner une autorisation d'accée sur la page 
	  
	  if (!verif_auth($data['auth_view']))
	  {
	  erreur(ERR_AUTH_VIEW);
	  }

	  ////////////////////////ajout du fin le 1/05 afin de donner une autorisation d'accée sur la page 


et ensuite sur mes 2 formulaires case nouveau topic et repondre topic


	  ////////////////////////////////////////////////la premier étape/////////////////////////////////////////////////////////////////////////
	  case "repondre": //Premier cas on souhaite répondre
	  ////////////////////////ajout du début le 1/05 afin de donner une autorisation d'accée sur la page 
	  if (verif_auth($data['auth_topic']))
	  {
	  ?>
	  
	  <h1>Poster une réponse</h1>
	  
	  <form method="post" action="postok.php?action=repondre&t=<?php echo $topic ?>" name="formulaire">
	  
	  <fieldset><legend>Mise en forme</legend>
	  <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
	  <input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
	  <input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
	  <input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
	  <br /><br />
	  <img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(' :D ');return(false)" />
	  <img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(' :lol: ');return(false)" />
	  <img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(' :triste: ');return(false)" />
	  <img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(' :frime: ');return(false)" />
	  <img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies(' XD ');return(false)" />
	  <img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(' :s ');return(false)" />
	  <img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(' :o ');return(false)" />
	  <img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(' :interrogation: ');return(false)" />
	  <img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(' :exclamation: ');return(false)" />
	  </fieldset>
	  
	  <fieldset><legend>Message</legend><textarea cols="80" rows="8" id="message" name="message"></textarea></fieldset>
	  
	  <input type="submit" name="submit" value="Envoyer" /><input type="reset" name = "Effacer" value = "Effacer"/>
	  </p></form>
	  
	  <?php
	  }
	  else
	  {
	  echo'vous n\avez pas le droit dacceder aux formulaire du repondre topic, il faut être inscrit';
	  }
	  ////////////////////////ajout du fin le 1/05 afin de donner une autorisation d'accée sur la page 
	  break;
	  
	  
	  
	  ////////////////////////////////////////////////la deucième étape/////////////////////////////////////////////////////////////////////////
	  
	  case "nouveautopic":

	  ////////////////////////ajout du début le 1/05 afin de donner une autorisation d'accée sur la page 
	  if (verif_auth($data['auth_topic']))
	  {
	  ?>
	  
	  <h1>Nouveau topic</h1>
	  <form method="post" action="postok.php?action=nouveautopic&f=<?php echo $forum ?>" name="formulaire">
	  
	  <fieldset><legend>Titre</legend>
	  
	  <input type="text" size="80" id="titre" name="titre" /></fieldset>
	  
	  <fieldset><legend>Mise en forme</legend>
	  
	  <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
	  <input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
	  <input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
	  <input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
	  <br /><br />
	  <img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(':D');return(false)" />
	  <img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(':lol:');return(false)" />
	  <img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(':triste:');return(false)" />
	  <img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(':frime:');return(false)" />
	  <img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies('XD');return(false)" />
	  <img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(':s');return(false)" />
	  <img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(':O');return(false)" />
	  <img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(':interrogation:');return(false)" />
	  <img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(':exclamation:');return(false)" /></fieldset>
	  
	  <fieldset><legend>Message</legend>
	  
	  <textarea cols="80" rows="8" id="message" name="message"></textarea>
	  <label><input type="radio" name="mess" value="Annonce" />Annonce</label>
	  <label><input type="radio" name="mess" value="Message" checked="checked" />Topic</label>
	  </fieldset>
	  <p>
	  <input type="submit" name="submit" value="Envoyer" />
	  <input type="reset" name = "Effacer" value = "Effacer" /></p>
	  </form>
	  <?php
	  }
	  else
	  {
	  echo'vous n\avez pas le droit dacceder aux formulaire du nouveau topic, il faut être inscrit';
	  }
	  ////////////////////////ajout du fin le 1/05 afin de donner une autorisation d'accée sur la page 
	  break;


qd je me deconnecte donc la c bon pas d'erreur et il cache bien les button étant visiteur et pas dérreur de variable


ensuite il dit qu'il faut recommencer sur la page postock


dc je remet le code autorisation etc......


<?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="Poster";
	  $balises = true;
	  include("includes/identifiants.php");
	  include("includes/debut.php");
	  include("includes/menu.php");
	  
	  //On récupère la valeur de la variable action
	  $action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';
	  
	  // Si le membre n'est pas connecté, il est arrivé ici par erreur
	  if ($id==0) erreur(ERR_IS_CO);

	  ////////////////////////ajout du début le 1/05 afin de donner une autorisation d'accée sur la page 
	  
	  if (!verif_auth($data['auth_view']))
	  {
	  erreur(ERR_AUTH_VIEW);
	  }

	  ////////////////////////ajout du fin le 1/05 afin de donner une autorisation d'accée sur la page 


	  /////////////on va afficher le swith pour le traitement/////////////////////////////
	  ///qui se compose en 2 partie pour le moment
	  // première partie : nouveau topic
	  // deuxième partie : on repond un topic
	  // troixième étape repondre mp
	  // quatrième étape  nouveau mp
	  // cinnquième étape supprimer mp
	  
	  switch($action)
	  {
	  
	  ////////////////////////////////////////////////la premier étape/////////////////////////////////////////////////////////////////////////
	  //Premier cas : nouveau topic
	  case "nouveautopic":

	  ////////////////////////ajout du début le 1/05 afin de donner une autorisation d'accée sur la page 
	  if (verif_auth($data['auth_topic']))
	  {

	  //On passe le message dans une série de fonction
	  $message = $_POST['message'];
	  $mess = $_POST['mess'];
	  
	  //Pareil pour le titre
	  $titre = $_POST['titre'];
	  
	  //ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable f
	  
	  $forum = (int) $_GET['f'];
	  $temps = time();
	  
	  if (empty($message) || empty($titre))
	  {
	  echo'<p>Votre message ou votre titre est vide, cliquez <a href="./poster.php?action=nouveautopic&f='.$forum.'">ici</a> pour recommencer</p>';
	  }
	  else //Si jamais le message n'est pas vide
	  {
	  
	  //On entre le topic dans la base de donnée en laissant
	  //le champ topic_last_post à 0
	  
	  $query=$db->prepare('INSERT INTO forum_topic (forum_id, topic_titre, topic_createur, topic_vu, topic_time, topic_genre)
	                       VALUES(:forum, :titre, :id, 1, :temps, :mess)');
      $query->bindValue(':forum', $forum, PDO::PARAM_INT);
	  $query->bindValue(':titre', $titre, PDO::PARAM_STR);
	  $query->bindValue(':id', $id, PDO::PARAM_INT);
	  $query->bindValue(':temps', $temps, PDO::PARAM_INT);
	  $query->bindValue(':mess', $mess, PDO::PARAM_STR);
	  $query->execute();
	  
	  $nouveautopic = $db->lastInsertId(); //Notre fameuse fonction !
	  $query->CloseCursor();
	  
	  //Puis on entre le message
	  $query=$db->prepare('INSERT INTO forum_post (post_createur, post_texte, post_time, topic_id, post_forum_id)
	                       VALUES (:id, :mess, :temps, :nouveautopic, :forum)');
      $query->bindValue(':id', $id, PDO::PARAM_INT);
	  $query->bindValue(':mess', $message, PDO::PARAM_STR);
	  $query->bindValue(':temps', $temps,PDO::PARAM_INT);
	  $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
	  $query->bindValue(':forum', $forum, PDO::PARAM_INT);
	  $query->execute();
	  
	  $nouveaupost = $db->lastInsertId(); //Encore notre fameuse fonction !
	  $query->CloseCursor();
	  
	  //Ici on update comme prévu la valeur de topic_last_post et de topic_first_post
	  $query=$db->prepare('UPDATE forum_topic
	                       SET topic_last_post = :nouveaupost, topic_first_post = :nouveaupost
						   WHERE topic_id = :nouveautopic');
      $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);    
      $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
      $query->execute();
      $query->CloseCursor();
	  
	  //Enfin on met à jour les tables forum_forum et forum_membres
	  $query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 ,forum_topic = forum_topic + 1, forum_last_post_id = :nouveaupost
	                       WHERE forum_id = :forum');
      $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);    
	  $query->bindValue(':forum', (int) $forum, PDO::PARAM_INT);
	  $query->execute();
	  $query->CloseCursor();
	  
	  $query=$db->prepare('UPDATE forum_membres SET membre_post = membre_post + 1 WHERE membre_id = :id');
	  $query->bindValue(':id', $id, PDO::PARAM_INT);
	  $query->execute();
	  $query->CloseCursor();
	  
	  //Et un petit message
	  echo'<p>Votre message a bien été ajouté!<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />Cliquez <a href="./voirtopic.php?t='.$nouveautopic.'">ici</a> pour le voir</p>';
	  }

	  }
	  else
	  {
	  echo'vous n\avez pas le droit dacceder aux formulaire du repondre topic, il faut être inscrit';
	  }
	  ////////////////////////ajout du fin le 1/05 afin de donner une autorisation d'accée sur la page 
	  break; //Houra !


	  ////////////////////////////////////////////////la deucième étape/////////////////////////////////////////////////////////////////////////
	  
	  //Deuxième cas : répondre
	  case "repondre":

	  ////////////////////////ajout du début le 1/05 afin de donner une autorisation d'accée sur la page 
	  if (verif_auth($data['auth_topic']))
	  {

	  $message = $_POST['message'];
	  
	  //ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable t
	  $topic = (int) $_GET['t'];
	  $temps = time();
	  
	  if (empty($message))
	  {
	  echo'<p>Votre message est vide, cliquez <a href="./poster.php?action=repondre&t='.$topic.'">ici</a> pour recommencer</p>';
	  }
	  
	  else //Sinon, si le message n'est pas vide
	  {
	  
	  //On récupère l'id du forum
	  $query=$db->prepare('SELECT forum_id, topic_post FROM forum_topic WHERE topic_id = :topic');
	  $query->bindValue(':topic', $topic, PDO::PARAM_INT);
	  $query->execute();
	  $data=$query->fetch();
	  $forum = $data['forum_id'];
	  
	  //Puis on entre le message
	  $query=$db->prepare('INSERT INTO forum_post (post_createur, post_texte, post_time, topic_id, post_forum_id)
	                       VALUES(:id,:mess,:temps,:topic,:forum)');
	  $query->bindValue(':id', $id, PDO::PARAM_INT);   
	  $query->bindValue(':mess', $message, PDO::PARAM_STR);
	  $query->bindValue(':temps', $temps, PDO::PARAM_INT);
	  $query->bindValue(':topic', $topic, PDO::PARAM_INT);
	  $query->bindValue(':forum', $forum, PDO::PARAM_INT);
	  $query->execute();
	  
	  $nouveaupost = $db->lastInsertId();
	  $query->CloseCursor();
	  
	  //On change un peu la table forum_topic
	  $query=$db->prepare('UPDATE forum_topic SET topic_post = topic_post + 1, topic_last_post = :nouveaupost WHERE topic_id =:topic');
	  $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
	  $query->bindValue(':topic', (int) $topic, PDO::PARAM_INT);
	  $query->execute();
	  $query->CloseCursor();
	  
	  //Puis même combat sur les 2 autres tables
	  $query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 , forum_last_post_id = :nouveaupost WHERE forum_id = :forum');
	  $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
	  $query->bindValue(':forum', (int) $forum, PDO::PARAM_INT);
	  $query->execute();
	  
	  $query->CloseCursor();
	  
	  $query=$db->prepare('UPDATE forum_membres SET membre_post = membre_post + 1 WHERE membre_id = :id');
	  $query->bindValue(':id', $id, PDO::PARAM_INT);
	  $query->execute();
	  $query->CloseCursor();
	  
	  //Et un petit message
	  $nombreDeMessagesParPage = 15;
	  $nbr_post = $data['topic_post']+1;
	  $page = ceil($nbr_post / $nombreDeMessagesParPage);
	  echo'<p>Votre message a bien été ajouté!<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />Cliquez <a href="./voirtopic.php?t='.$topic.'&page='.$page.'#p_'.$nouveaupost.'">ici</a> pour le voir</p>';
	  }
	  //Fin du else

	  }
	  else
	  {
	  echo'vous n\avez pas le droit dacceder aux formulaire du repondre topic, il faut être inscrit';
	  }
	  ////////////////////////ajout du fin le 1/05 afin de donner une autorisation d'accée sur la page 
	  break;	

le reste du code


quand je suis déconnecter , il ne m'affiche pas d'erreur

quand je m'inscrit il m'affiche cette erreur

Notice: Undefined variable: data in /var/www/legtux.org/users/site/www/V1/postok.php on line 20

Notice: Undefined variable: data in /var/www/legtux.org/users/site/www/V1/postok.php on line 44


es-ce qu'on peut résoudre ou pas cette variable

à moins qu'il faut que j'ailes juste qu'au bout pour retrouver la variable

ou à moin que j'ai mal placé le code

c'est a partir de là ou je suis coincé
0