Modifier les champs de plusieurs entrées simultanément

Petit nouveau ! | 2 Messages

13 nov. 2011, 12:10

Bonjour à tous,
Le problème semble simple à résoudre pourtant je n'y arrive pas.

Tout d'abord, parlons du SQL :
Dans ma base de données, j'ai une table qui se nomme forum_forum.
Cette table contient 13 champs et 7 entrées.
Voici le nom des champs : forum_id forum_cat_id forum_name forum_desc forum_ordre forum_last_post_id forum_topic forum_post auth_view auth_post auth_topic auth_annonce auth_modo

Ensuite, venons au PHP :
J'ai une page d'administration depuis laquelle je peux effectuer des opérations sans être obligé de passer par la BDD.
Enfin, je devrais effectuer…
Oui, car par exemple, si je veux modifier les droits de deux forums sur les sept, ce sont les droits du dernier forum qui seront pris en compte.
Alors, j'ai essayé l'incrémentation sur le champ forum_id pour que chaque droit soit attribué à son forum, cependant, ça ne me renvoie plus de résultat !

Voilà comment je m'y suis pris :
<?php case "droits":
        //Gestion des droits
        echo'<h1>Edition des droits</h1>';     
       

	    $query = $db->prepare('SELECT forum_id, forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
	    FROM forum_forum WHERE forum_id = :forum_plus');
		$query->bindValue(':forum_plus', $forum_plus, PDO::PARAM_INT);
	    $query->execute();
		
		$forum_plus = 1;
		
            echo '<form method="post" action="adminok.php?cat=forum&action=droits"><p><table><tr>
		<th>Forum</th>
	    <th>Lire</th>
	    <th>Répondre</th>
	    <th>Poster</th>
	    <th>Annonce</th>
	    <th>Modérer</th>';
		
		while($data = $query->fetch())
 {
 $forum_plus++;
		
	   echo' </tr><td>'.$data['forum_name'].'</td>';
		   
	    //Ces deux tableaux vont permettre d'afficher les résultats
	    $rang = array(
            VISITEUR=>"Visiteur",
            INSCRIT=>"Membre", 
            MODO=>"Modérateur",
            ADMIN=>"Administrateur");
	    $list_champ = array("auth_view", "auth_post", "auth_topic", "auth_annonce", "auth_modo");
	 
	    //On boucle
	    foreach($list_champ as $champ)
	    {
	        echo'<td><select name="'.$champ.'">';
		for($i=1;$i<5;$i++)
		{
		    if ($i == $data[$champ])
		    {
		        echo'<option value="'.$i.'" selected="selected">'.$rang[$i].'</option>';
		    }	
		    else
		    {
		        echo'<option value="'.$i.'">'.$rang[$i].'</option>';
		    }
		}
		echo'</td></select><br /><input type="hidden" name="forum_plus" value="'.$forum_plus.'" />';
	    }	

}		

echo'<input type="submit" value="Envoyer"></p></form>';	

            $query->CloseCursor();				  					
		
        echo '</table>';
    break; ?>

Vous pouvez observer que ce formulaire renvoie à une page appelée adminok.php, voici ce qu'elle contient concernant les droits :

<?php case "droits":    
        //Récupération d'informations
        $auth_view = (int) $_POST['auth_view'];
        $auth_post = (int) $_POST['auth_post'];
        $auth_topic = (int) $_POST['auth_topic'];
        $auth_annonce = (int) $_POST['auth_annonce'];
        $auth_modo = (int) $_POST['auth_modo'];
		$forum_plus = (int) $_POST['forum_plus'];
        
        //Mise à jour
        $query=$db->prepare('UPDATE forum_forum
        SET auth_view = :view, auth_post = :post, auth_topic = :topic,
        auth_annonce = :annonce, auth_modo = :modo');
        $query->bindValue(':view',$auth_view,PDO::PARAM_INT);
        $query->bindValue(':post',$auth_post,PDO::PARAM_INT);
        $query->bindValue(':topic',$auth_topic,PDO::PARAM_INT);
        $query->bindValue(':annonce',$auth_annonce,PDO::PARAM_INT);
        $query->bindValue(':modo',$auth_modo,PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor();
      
        //Message
        echo'<p>Les droits ont été modifiés !<br />
        Cliquez <a href="./admin.php">ici</a> pour revenir à l administration</p>';
    break; ?>
La réponse est insoutenable, suis-je bel et bien un gros naze ou c'est plus compliqué que ça n'y paraît ?! Merci de ne pas me décevoir sur le jugement que vous vous ferez de moi ! (;

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 nov. 2011, 16:58

salut,

perso je ne comprend pas ce que tu donne et à qui :)

déja la table forum
Cette table contient 13 champs
Voici le nom des champs : forum_id forum_cat_id forum_name forum_desc forum_ordre forum_last_post_id forum_topic forum_post auth_view auth_post auth_topic auth_annonce auth_modo
cela fait beaucoup et je ne comprend pas trop tous ces champs
forum_id => clef primaire avec auto_increment ?
forum_cat_id => sous entend une table catégorie ? c'est une clef étrangère
forum_name => nom du forum
forum_desc => description ?
forum_ordre => heu ben je la sais pas
forum_last_post_id => ça c'est récupérable avec une requête sql
forum_topic => ?
forum_post => ?
auth_view => ?
auth_post => ?
auth_topic => ?
auth_annonce => ?
auth_modo => ?

je pense qu'il y a un problème de modélisation des données au départ ;)

la table forums
id
nom
description

table utilisateurs
id
pseudo
mot de passe

table droits
id
titre
descriptions

table droitsForums
id
idforum
idutilisateur
idDroit

bon les dexu premières tables sont minimaliste c'est pour l'exemple

les droit sur les forum sont accordés à un ou plusieurs utilisateurs sur un ou plusieurs forum (relation 0,n- 0,n entre forum et utilisateurs)

avec ça tu gère comme tu le souhaite les droits des gens sur les forums (visible ou pas, modération administration, différents droits de modération etc etc).
Tu peux ainsi dire que par défaut les gens peuvent voir les forums, et s'il s ont un droits particulier tu le met dans la tables droitsforums etc etc

tu peux aller plus loin, par exemple avec une table droitforums (forum privé ou pas associée à des groupes etc) et une table de droit sur les utilisateurs
donc une table droitutilisateurs etc etc

c'est effectivement assez complexe a mettre en œuvre suivant ce que tu souhaite au final :)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 2 Messages

13 nov. 2011, 19:48

Quoi ? Qu'est-ce que tu me racontes ? J'ai déjà créé toutes mes tables, pas la peine de me donner un exemple pour procéder !
Moi, c'est un exemple que j'ai donné. Je me suis peut-être mal exprimé, je recommence.

J'ai 7 forums et je veux modifier les droits de tous ces forums simultanément, ce que je n'arrive pas à faire.
Cependant, j'arrive à modifier les droits forum par forum mais c'est assez long !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 nov. 2011, 22:52

Passe les dans un champ hidden avec la notation tableau pour le nom ( name="truc[]" par exemple)

Idem pour les checkbox / radio
Sur la page cible tu récupère les deux infos pour les update (boucle ou autre).

après mon exemple c'est juste pour te simplifier la vie si ton modèle te satisfait tant mieux ^^


@+
Il en faut peu pour être heureux ......