Page 1 sur 1

Formulaire spécifique

Posté : 23 févr. 2012, 12:57
par Fre3z69
Salut à tous

J'ai un gros soucis.

En effet je travail actuellement sur la partie administration de mon forum, mais il y a un hic.

Au niveau des droits des forum.

J'aimerais afficher le libellé des rangs (fait) dans un tableau qui contient des input type radio.

J'aimerais que en fonction des valeurs définis dans la BdD on puis cheched les radio.

Voici pour l'heure ce que j'ai fait

Le code (la page edit forum, qui contient l'édition des forums, donc des droits)
<?php
if (isset($_GET['forum_id']))
{
		$query=$cnx->prepare('SELECT forum_id, cat_id, forum_name, forum_description
		FROM t_forum
		WHERE forum_id = :forum_id'); 
		$query->bindValue(':forum_id',(int) $_GET['forum_id'],PDO::PARAM_INT);
		$query->execute();
		$data = $query->fetch();
		$rank=$cnx->prepare('SELECT rank_id, rank_libelle, forum_auth_view, forum_auth_post, forum_auth_topic, forum_auth_announce, forum_auth_moderation FROM t_rank, t_forum'); 
		$rank->execute();
?>
	<h3>Edition du forum :: <?php echo $data['forum_name']; ?></h3>
<div id="sous_content">
		<form action="./index.php?r=forum&mode=valider&forum_id=<?php echo $data['forum_id']; ?>" method="post">
			<dl><input type="hidden" name="forum_id" value="<?php echo $data['forum_id']; ?>"/>
				<dd>Nom du forum:<br /><input type="text" name="name" value="<?php echo $data['forum_name']; ?>" id="name"/></dd>
				<dd>Description du forum:<br /><textarea cols=40 rows=4 name="description" id="description"><?php echo $data['forum_description']; ?></textarea></dd>
				<dd>Cat&eacute;gorie : <br />
				<select name="cat_id">
<?php
				$query = $cnx->query('SELECT cat_id, cat_name
				FROM t_cat ORDER BY cat_order DESC');
				while($data2 = $query->fetch())
				{
					if($data2['cat_id'] == $data['cat_id'])
					{
					echo'<option value="'.$data2['cat_id'].'" 
							selected="selected">'.stripslashes(htmlspecialchars($data2['cat_name'])).' 
						</option>';
					}
					else
					{
						echo'<option value="'.$data2['cat_id'].'">'.$data2['cat_name'].'</option>';
					}
				}
?>
				</select></dd>
			</dl>
			<dl>
			<dd>
			<fieldset style="border:none;">
			<legend style="font-size:21px;font-weight:bold;">Permissions du forum</legend>
			<p>L'id à rentrer pour les permissions des utilisateurs correspond à l'id des rangs.</p>
			<p>Pour vous aider, référez vous au tableau de droite: Tableau des rangs.</p>
			<p>Les rangs supérieurs au rang séldctionné héritent de ce dernidr.<br/>
			Si un membre peux lire un message, les rangs suppérieurs le pourront aussi, mais pas ceux inférieurs.</p>
				<table  class="autorisation" cellpadding="3">
					<tr  class="headautorisation">
						<th class="actions">Actions</th>
<?php
while ($data1 = $rank->fetch())
{
	$forum_auth_view = $data1['forum_auth_view'];
	$forum_auth_post = $data1['forum_auth_post'];
	$forum_auth_topic = $data1['forum_auth_topic'];
	$forum_auth_announce = $data1['forum_auth_announce'];
	$forum_auth_moderation = $data1['forum_auth_moderation'];
	echo $data1['rank_id'].' '.$data1['rank_libelle'];
						echo '<th class="autorisation">'.$data1['rank_libelle'].'</th>';
}
$table_auth=array('Peut lire les messages','Peut répondre aux messages','Peut poster un sujet','Peut publier une annonce','Peut modérer le forum');
?>
					</tr>
<?php
$i=1;
foreach ($table_auth as $value)
{
$nexi = $i++;
					echo '<tr class="autorisation">
						<th class="autorisation">'.$value.'</th>
						<td class="autorisation"><input type="radio" value="" name="auth_'.$nexi.'[]"/></td>
						<td class="autorisation"><input type="radio" value="" name="auth_'.$nexi.'[]"/></td>
						<td class="autorisation"><input type="radio" value="" name="auth_'.$nexi.'[]"/></td>
						<td class="autorisation"><input type="radio" value="" name="auth_'.$nexi.'[]"/></td>
						<td class="autorisation"><input type="radio" value="" name="auth_'.$nexi.'[]"/></td>
						<td class="autorisation"><input type="radio" value="" name="auth_'.$nexi.'[]"/></td>
					</tr>';
}
?>
				</table>
			</fieldset>
			</dd>
			</dl>
			<dl>
				<dd><input type="submit" name="envoie" value="Envoyer"/></dd>
			</dl>
		</form>
	</div>
<?php
		$query->CloseCursor();
}
?>
la structure des tables

La table t_ranks et ses donées.
--
-- Structure de la table `t_rank`
--

CREATE TABLE IF NOT EXISTS `t_rank` (
  `rank_id` int(10) NOT NULL AUTO_INCREMENT,
  `rank_libelle` varchar(64) NOT NULL,
  PRIMARY KEY (`rank_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Contenu de la table `t_rank`
--

INSERT INTO `t_rank` (`rank_id`, `rank_libelle`) VALUES
(1, 'Bannis'),
(2, 'Visiteur'),
(3, 'Membre'),
(4, 'Moderateur'),
(5, 'Admin'),
(6, 'Operateur');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
La table t_forum et ses données.
--
-- Structure de la table `t_forum`
--

CREATE TABLE IF NOT EXISTS `t_forum` (
  `forum_id` int(11) NOT NULL AUTO_INCREMENT,
  `cat_id` int(11) NOT NULL,
  `forum_name` varchar(45) NOT NULL,
  `forum_description` varchar(45) CHARACTER SET latin1 COLLATE latin1_german2_ci NOT NULL,
  `forum_order` int(11) NOT NULL,
  `forum_auth_view` tinyint(8) unsigned NOT NULL,
  `forum_auth_post` tinyint(8) unsigned NOT NULL,
  `forum_auth_topic` tinyint(8) unsigned NOT NULL,
  `forum_auth_announce` tinyint(8) unsigned NOT NULL,
  `forum_auth_moderation` tinyint(8) unsigned NOT NULL,
  `forum_last_post` int(11) NOT NULL,
  PRIMARY KEY (`forum_id`),
  KEY `t_forum_FKIndex1` (`cat_id`),
  KEY `fk_t_cat1` (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Contenu de la table `t_forum`
--

INSERT INTO `t_forum` (`forum_id`, `cat_id`, `forum_name`, `forum_description`, `forum_order`, `forum_auth_view`, `forum_auth_post`, `forum_auth_topic`, `forum_auth_announce`, `forum_auth_moderation`, `forum_last_post`) VALUES
(1, 1, 'Mon premier forum', 'Voici un forum de test', 1, 2, 3, 3, 4, 4, 1);

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table `t_forum`
--
ALTER TABLE `t_forum`
  ADD CONSTRAINT `fk_t_cat1` FOREIGN KEY (`cat_id`) REFERENCES `t_cat` (`cat_id`);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Un aperçu de ce que ça donne actuellement
Image

Merci de votre aide, je coince, j'avoue, j'en avais déjà fait pourtant, mais pas dynamiquement.

Cordialement

Re: Formulaire spécifique

Posté : 23 févr. 2012, 13:02
par Thibaud C
hello,
Première chose, ne serais-ce pas plus judicieux de mêttre des checkbox, au lieux des radios :) pour pouvoir cocher plusieurs choses par ligne?
Ensuite il faut que tu enregistres tout ça dans ta base de donnée, pour ensuite pouvoir les retrouver soit pour changer les valeurs existantes dans ton administration, soit pour pouvoir donner les droits sur le forum "frontend"

Re: Formulaire spécifique

Posté : 23 févr. 2012, 13:04
par moogli
salut,


il faut que tu fasse de la même manière que pour les options de la liste déroulante, mais avec l'attribut checked :mrgreen:

@+

Re: Formulaire spécifique

Posté : 23 févr. 2012, 15:10
par Fre3z69
Je peux pas mettre des checkbox, c'est à valeur unique par autorisation, et les droits sont déjà en BdD, c'est pour cela que je vous est donner les scripts sql de mes tables.

Ensuite, mon plus gros soucis est de lier le foreach au while afin de dynamiser le formulaire.

C'est de cela dont j'ai le plus de peine, et je pense qu'une fois cela fait, le reste seras aiser.

En fait, il faut que les <td> se fassent automatiquement en fonction des autorisations.

Je sais pas si c'est bien évident pour vous, je ne vois pas trop que dire de plus.

En tout cas, merci de votre aide.

Re: Formulaire spécifique

Posté : 23 févr. 2012, 17:07
par xTG
Si c'est à valeur unique tu vas avoir un problème...
Si tu sélectionnes "Peut lire" et "visiteur" cela impliquera que les bannis, les membres, les modérateurs, les admins et les opérateurs ne pourront pas lire.

Ou bien si le groupe est en colonne, un visiteur qui peut lire mais qui ne peut répondre, poster, publier une annonce et modérer.

Re: Formulaire spécifique

Posté : 23 févr. 2012, 17:24
par Fre3z69
Si c'est à valeur unique tu vas avoir un problème...
Si tu sélectionnes "Peut lire" et "visiteur" cela impliquera que les bannis, les membres, les modérateurs, les admins et les opérateurs ne pourront pas lire.

Ou bien si le groupe est en colonne, un visiteur qui peut lire mais qui ne peut répondre, poster, publier une annonce et modérer.
Si c'est hiérarchiser, en fait un forum dont les visiteurs peuvent les voir, pourront aussi être vu par les membres, modos et admins, mais pas par les bannis.

Je conditionne pour le savoir, ça fait moins de requête sql pour si peux.

par exemple:
<?php
// on compte le nombre de postes dans chaque forum
$query=$cnx->prepare('SELECT t_forum.forum_id, forum_name, forum_auth_view, forum_auth_post, forum_auth_topic, forum_auth_announce, forum_auth_moderation, 
(SELECT COUNT(topic_id) FROM t_topic WHERE topic_type <> "Annonce" AND  t_topic.forum_id = :forum )AS Nbpost
FROM t_topic 
LEFT JOIN t_forum ON t_topic.forum_id = t_forum.forum_id 
WHERE t_topic.forum_id = :forum');

if (!verif_auth($data0['forum_auth_view'])) // fonction permettant de comparer les valeurs obtenu par celle demandée.
{
    erreur(ERR_AUTH_VIEW);
}
?>
Ça reviens à faire, if $data0['forum_auth_view']<=3) { erreur(ERR_AUTH_VIEW); } // par exemple


Par contre bonne nouvelle, j'ai réussit à faire ce que je voulais.

Voici le formulaire qui me permet d'afficher les droits, et grâce à vos commentaires, j'ai pû être mis sur la bonne voie.
				<table  class="autorisation" cellpadding="3">
					<tr  class="headautorisation">
						<th class="groupes">Groupes</th>
									
<?php
$table_auth=array('Peut lire les messages','Peut répondre aux messages','Peut poster un sujet','Peut publier une annonce','Peut modérer le forum');
foreach ($table_auth as $value)
{
					echo '<th class="autorisation">'.$value.'</th>';
}
?>
					</tr>
<?php
$i=1;
while ($data1 = $rank->fetch())
{
$nexi = $i++;
	$forum_auth_view = $data1['forum_auth_view'];
	$forum_auth_post = $data1['forum_auth_post'];
	$forum_auth_topic = $data1['forum_auth_topic'];
	$forum_auth_announce = $data1['forum_auth_announce'];
	$forum_auth_moderation = $data1['forum_auth_moderation'];
	$check_auth_view=($forum_auth_view==$data1['rank_id'])?'checked="checked"':'';
	$check_auth_post=($forum_auth_post==$data1['rank_id'])?'checked="checked"':'';
	$check_auth_topic=($forum_auth_topic==$data1['rank_id'])?'checked="checked"':'';
	$check_auth_announce=($forum_auth_announce==$data1['rank_id'])?'checked="checked"':'';
	$check_auth_moderation=($forum_auth_moderation==$data1['rank_id'])?'checked="checked"':'';
	
					echo '<tr class="autorisation">
						<th class="autorisation">'.$data1['rank_libelle'].'</th>
						<td class="autorisation"><input type="radio" '.$check_auth_view.' value="'.$data1['rank_id'].'" name="forum_auth_view[]"/></td>
						<td class="autorisation"><input type="radio" '.$check_auth_post.' value="'.$data1['rank_id'].'" name="forum_auth_post[]"/></td>
						<td class="autorisation"><input type="radio" '.$check_auth_topic.' value="'.$data1['rank_id'].'" name="forum_auth_topic[]"/></td>
						<td class="autorisation"><input type="radio" '.$check_auth_announce.' value="'.$data1['rank_id'].'" name="forum_auth_announce[]"/></td>
						<td class="autorisation"><input type="radio" '.$check_auth_moderation.' value="'.$data1['rank_id'].'" name="forum_auth_moderation[]"/></td>
					</tr>';
						
						
}
?>
				</table>
C'est surement optimisable, mais bon, ça fonctionne.

Voici un screen pour vous montrer le résultat (on constateras que j'ai dû réviser le tableau
Image

Merci pour votre aide, qui malgré que les textes étaient courts, m'ont bien aider.

Cordialement