8791 sujets

Développement web côté serveur, CMS

Bonjour, l’équipe d’Alsacréation.

Je vous expose mon problème en quelques mots.
Voila : J’ai une table nommé user avec les champs suivant :

id_membre, pseudo, mdp, mail, url_site, description, valide,

Je voudrais valider les membres avec le champ valide incrémenté par défaut avec la valeur 1 avec un formulaire et des check box pour valider ou mettre en pause soit : Pause ou Non=1, validation OUI=0.

Comment puis-je effectuer la requête UPDATe à savoir que ma partie admis fonctionne avec session et des Bracke de page exemple : url/admin/valide.php = admin/index.php?page=8

Merci de votre conseil, si joint voila mon code.


<?php
echo '<form action="index.php?page=8" method="post" name="sub">';

connecter();
//Requete pour la lecture des données
$r1 = "SELECT * FROM user WHERE valide='1'";
$res = @mysql_query($r1) or die('Erreur SQL !<br>'.$res.'<br>'.mysql_error());

//Boucle while pour afficher les checkbox à valider
while($data = mysql_fetch_array($res)) {
echo '<input type="radio" name="valide[]" value="'.$data['valide'].'">ID = '.$data['id_membre'].' Pseudo = '.$data['pseudo'].' statuts = '.$data['valide'].'<br />';



//Si le boutton sub à été cliqué
$statuts = $data['valide'];
if(!isset($_POST['sub'])){

//variable post pour verification de contenuez 
$post = (isset($_POST['valide'])) ? $_POST['valide']:null; 

// bouclons sur le tableau qui a été transmis et validons les valeurs sélectionnées 
if (!empty($post)) { 
   foreach($post as $statuts) { 
        mysql_query('UPDATE user SET valide="0" WHERE valide="'.$statuts.'"') or die (mysql_error());
                    
          }
		}
      }
}

//On ferme la Boucle while pour afficher les checkbox à valider
echo '<input type="submit" name="sub" value="Valider toutes la selection">';
echo '</form>';
?>


merci
Modifié par stephane47 (24 Nov 2009 - 01:04)
Hello stephane47 et bienvenue Smiley smile ,

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace après le crochet ouvrant).

upload/1-code.gif

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je te rappelle que l'Aide (dont le lien est fourni lors de l'inscription) contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.


Sinon :

* ce n'est pas Alsace création mais Alsacréations. Smiley cligne

* sans lire en détail ce n'est pas "Update from user..." mais "Update user..." -> revoir les bases de mysql : http://sqlpro.developpez.com/
Modérateur
Bonjour Stephane47 et bienvenue,


stephane47 a écrit :
[...]Pause ou Non=1, validation OUI=0.[...]


Je n'ai pas vraiment lu ton code. Mais dès le départ, tu solutionnes mal ta problématique en utilisant des checkbox. Il serait plus judicieux d'utiliser soit
* des boutons radio
* une balise select (sélection unique)

Un utilisateur ne peut pas être
* en pause et valide
ou
* valide et pas valide
ou
* etc. Smiley cligne
bonsoir,

merci de vos reponses, j'ai modifié le code avec des radio et la suppression de from dans update, mais toujours rien ne marche pour modifier la table. merci
Modérateur
Hello,

stephane47 a écrit :
bonsoir,

merci de vos reponses, j'ai modifié le code avec des radio et la suppression de from dans update, mais toujours rien ne marche pour modifier la table. merci


En relisant, je vois ça :

//etc.
if(!isset($_POST['sub'])){
//etc.


Ce ne serait pas plutôt un truc comme ceci ?

if(isset($_POST['sub'])){ 
J’ai donc fais la correction comme indiqué, parfais j’arrive à modifier dans la table déjà un bon point ! Mais voila c’est tous les membres user qui sont validés avec la valeur 0 après avoir coché le bouton radio d’un membre.
Je voudrais pourvoir sélectionner un ou plusieurs membres de mon chois.
Merci beaucoup de ton aide.


if(isset($_POST['sub'])){


Smiley biggrin
Modérateur
Hello,

Peux tu mettre sur le forum, ton code afin que je puisse corriger ce qui ne va pas ou de t'expliquer la marche à suivre. Pense à bien indenter ton code afin de le rendre plus lisible. Smiley cligne

Au passage, bien que ça ne me dérange pas du tout d'aider une personne un peu novice (je dis bien un peu) en php/sql, sache que la thématique de ce forum n'est pas axé sur l'apprentissage d'un langage serveur.

Bonne journée à toi
Merci encore ! voila si joint mon code php et les requêtes sql.

<?php
echo '<form action="index.php?page=8" method="post" name="sub">';

connecter();
//Requete pour la lecture des données
$r1 = "SELECT * FROM user WHERE valide='1'";
$res = @mysql_query($r1) or die('Erreur SQL !<br>'.$res.'<br>'.mysql_error());

//Boucle while pour afficher les checkbox à valider
while($data = mysql_fetch_array($res)) {
echo '<input type="radio" name="valide[]" value="'.$data['valide'].'">ID = '.$data['id_membre'].' Pseudo = '.$data['pseudo'].' statuts = '.$data['valide'].'<br />';



//Si le boutton sub à été cliqué
$statuts = $data['valide'];
if(isset($_POST['sub'])){

//variable post pour verification de contenuez 
$post = (isset($_POST['valide'])) ? $_POST['valide']:null; 

// bouclons sur le tableau qui a été transmis et validons les valeurs sélectionnées 
if (!empty($post)) { 
   foreach($post as $statuts) { 
        mysql_query('UPDATE user SET valide="0" WHERE valide="'.$statuts.'"') or die (mysql_error());
                    
          }
		}
      }
}

//On ferme la Boucle while pour afficher les checkbox à valider
echo '<input type="submit" name="sub" value="Valider toutes la selection">';
echo '</form>';
echo 'Retrour à l\'administartion <a target="_self" href="index.php?page=3"> .... Retour ....</a>';
?>
Modérateur
Hello Stephane47,

Là, je t'ai corrigé pas mal de points. Je me suis aperçu à plusieurs reprises que tu as des lacunes en HTML. Je t'invite à les combler en parcourant la section apprendre d'Alsacréations et poser diverses questions dans les forum CSS et HTML. Je te conseille également de te perfectionner en HTML et CSS avant de t'attaquer à un langage plus rigoureux. Là, encore j'ai vu de grossières erreurs sur ton script.

Pour finir, à toi de mettre la « fonction » qui permet de faire une mise à jour de tous les membres en une seule manip (bouton sub) et de sécuriser un peu plus ce formulaire. Là, je t'ai fait une MAJ pour chaque membre.

connecter();
if(!empty($_GET["valide"]) && !empty($_GET["id_membre"])){
    $status = "";
    switch($_GET["valide"]){
        case "oui":
            $status = "oui";
            break;
        case "non" :
            $status = "non";
            break;        
        case "pause" :
            $status = "pause";
            break;        
        default:
            die("ne doit pas arriver !");
    }
    $sql = "UPDATE user SET valide='".$status."' WHERE id_membre=".$_GET["id_membre"];
    mysql_query($sql) or die(mysql_error());
    header("location:index.php");
}


echo "\n<form action=\"".htmlspecialchars("index.php")."\" method=\"post\">";
//Requete pour la lecture des données
$r1 = "SELECT id_membre,pseudo,valide FROM user";
$res = @mysql_query($r1) or die('Erreur SQL !<br>'.$res.'<br>'.mysql_error());

//liste de champs : id_membre - pseudo - status
echo "\n<table>\n\t<tr>\n\t\t<th>id_membre</th>\n\t\t<th>pseudo</th>\n\t\t<th>oui</th>\n\t\t<th>non</th>\n\t\t<th>pause</th>\n\t\t<th>modifier</th>\n\t</tr>";

//Boucle while pour afficher les checkbox à valider et la liste de membres
while($data = mysql_fetch_array($res)) {
    echo "\n\t<tr>";
    echo "\n\t\t<td>".$data["id_membre"]."</td>";
    echo "\n\t\t<td>".$data["pseudo"]."</td>";
    $checked = "checked=\"checked\"";
    $valide_oui = ($data["valide"] == "oui")? $checked : "";
    $valide_non = ($data["valide"] == "non")? $checked : "";
    $valide_pause = ($data["valide"] == "pause")? $checked : "";
    echo "\n\t\t<td><input type=\"radio\" name=\"valide\" value=\"oui\" ".$valide_oui." /></td>";
    echo "\n\t\t<td><input type=\"radio\" name=\"valide\" value=\"non\" ".$valide_non." /></td>";
    echo "\n\t\t<td><input type=\"radio\" name=\"valide\" value=\"pause\" ".$valide_pause." /></td>";
    $url = htmlspecialchars("index.php?valide=".$data["valide"]."&id_membre=".$data["id_membre"]);
    echo "\n\t\t<td><a href=\"".$url."\">modifier</a></td>";
    echo "\n\t</tr>";
}

echo "\n</table>";
echo "\n<input type=\"submit\" name=\"sub\" value=\"Mis à jour tous les membres\" />";
echo "\n</form>";

* Code fait de tête. Je peux m'être trompé.

À noter que l'on pourrait utiliser un élément select. J'ai préféré utiliser les boutons radio pour aller au plus simple.

Bon code et bon apprentissage.
Modifié par Nolem (28 Nov 2009 - 16:51)
Salut,

@Nolem > en parlant de lacunes à combler tu pourrais te l'appliquer également... Smiley rolleyes

C'est un peu n'importe quoi ce code :

* je te l'avais déjà dis pour urlencode il me semble mais c'est valable pour htmlspecialchars : cette fonction ne sert à rien quand tu sais déjà ce que contient la chaîne de caractères... et qu'elle ne contient aucun caractère à remplacer comme par exemple dans htmlspecialchars('index.php').

* il me semble bien que ton header("location:index.php"); est inutile mais de toutes façons il ne fonctionnera pas sans espace après les 2 points :

* plutôt que de s'embêter à tout écrire avec des echo php pourquoi ne pas écrire directement le code html ?

* c'est quand même plus lisible d'écrire
$checked = 'checked="checked"';
que ça
$checked = "checked=\"checked\"";
non ?

* je ne reviens pas sur l'inutilité de htmlspecialchars dans $url mais comme tu l'alimentes avec la valeur déjà en base et que cette valeur ne changera plus ton lien modifier ne modifiera jamais rien.

* comme tous tes input radio s'appellent valide ça ne risque pas non plus de marcher en cliquant sur Mise à jour tous les membres.
Modifié par Heyoan (28 Nov 2009 - 19:59)
En très simplifié ça pourrait donner quelque chose comme ça :
connecter();

$id_membre = !empty($_GET['id_membre']) ? intval($_GET['id_membre']) : 0;

if($id_membre > 0) {
    $sql = 'UPDATE user SET valide=1 WHERE id_membre='.$id_membre; 
    mysql_query($sql) or die(mysql_error()); 
}

// Récupération des membres non validés
$sql = "SELECT id_membre, pseudo FROM user where valide=0 ORDER BY pseudo "; 
$result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

if(mysql_num_rows($result) > 0) {
	while($row = mysql_fetch_assoc($result)) { 
		echo '<p><strong>'.$row['pseudo'].'</strong> <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'?id_membre='.$row['id_membre'].'">valider ce membre</a></p>';
	} 
} else {
	echo '<p>Tous les membres sont validés.</p>';
}
A noter qu'en informatique 0 = false (faux/non) et 1 = true (vrai/oui). J'ai donc inversé la valeur de valide.
Modifié par Heyoan (28 Nov 2009 - 20:02)
Modérateur
Hello,

Heyoan a écrit :

...
@Nolem > en parlant de lacunes à combler tu pourrais te l'appliquer également... Smiley rolleyes


Comme je l'ai dit, je l'ai fait de tête et d'un trait. Il se peut qu'il y ait des coquilles (l'emploi du header). Cependant, j'ai la forte impression qu'il doit fonctionner.


Heyoan a écrit :

C'est un peu n'importe quoi ce code :

* je te l'avais déjà dis pour urlencode il me semble mais c'est valable pour htmlspecialchars : cette fonction ne sert à rien quand tu sais déjà ce que contient la chaîne de caractères... et qu'elle ne contient aucun caractère à remplacer comme par exemple dans htmlspecialchars('index.php').


echo '<p><strong>'.$row['pseudo'].'</strong> <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'?id_membre='.$row['id_membre'].'">valider ce membre</a></p>';



oui, oui Smiley ravi

Heyoan a écrit :

mais de toutes façons il ne fonctionnera pas sans espace après les 2 points :


oui, oui Smiley ravi

Heyoan a écrit :

* comme tous tes input radio s'appellent valide ça ne risque pas non plus de marcher en cliquant sur Mise à jour tous les membres.

* je ne reviens pas sur l'inutilité de htmlspecialchars dans $url mais comme tu l'alimentes avec la valeur déjà en base et que cette valeur ne changera plus ton lien modifier ne modifiera jamais rien.



oui, oui Smiley ravi
Je t'invite à relire et à faire des tests notamment les boutons radio. Smiley cligne
Tu t'es transformé en vendredÿ ? Je t'ai connu plus en forme. Smiley smile

Tu as donné une solution qui doit fonctionner (je l'ai lu vite fait). La mienne ouvre vers d'autres perspectives. Smiley cligne La tienne est restreinte puisqu'elle ne peut que valider des membres suivant un état (valide=0).

Dans ma méthode, le $_get et le switch n'ont rien à faire là, je l'admets (ça doit fonctionner) puisque logiquement ce serait une superglobale post venant d'un autre formulaire (mode mise à jour ou mode insertion). modifier aura alors une autre fonction. bouton radio mise à jour via le JS. Smiley cligne .


Tu pointes sur le même fichier $_SERVER['PHP_SELF']. Rien ne nous dit que c'est le même. Moi même, j'ai hésité puisque c'est logique. L'url de départ étant :

stephane47 a écrit :

index.php?page=8
index.php?page=3


Smiley biggol



sans rancune et bonne soirée à toi. Smiley smile
Modifié par Nolem (28 Nov 2009 - 23:05)
Nolem a écrit :
Cependant, j'ai la forte impression qu'il doit fonctionner.
Non il ne peut pas fonctionner. Je me répète mais :
* les liens modifier ont comme valeur de valide celle qui était déjà en base donc il n'y aura aucune modification possible.
* tous les input checkbox ont le même nom valide pour tous les membres et il n'y a aucun moyen en utilisant le formulaire de savoir à quel membre est rattaché une valeur... donc ça ne peut pas fonctionner non plus.

En résumé il n'est pas question de se garder rancune de quoi que ce soit. Simplement je te reprends souvent sur les solutions que tu préconises... et tu continues d'intervenir comme si tu maîtrisais le php (je précise que je ne le maîtrise pas moi-même). Il ne s'agit pas ici de "coquilles" mais d'une méconnaissance de certaines règles de base. C'est comme si moi j'intervenais en tant qu'expert sur des questions de graphisme ! Au bout d'un moment toi ou un autre me dirait de faire preuve d'un peu de modestie non ? Smiley biggol

Et bien sûr cela ne change rien au fait qu'on soit copaings ! Smiley smile Ou alors si ? Smiley confus
Modifié par Heyoan (29 Nov 2009 - 00:58)
Modérateur
Je t'accorde que j'aurai dû peut être exécuter le script avant d'éditer sur le forum. Comme j'aime bien persister dans mes bêtises (quand il y a de l'idée), voilà ceci :

if(!empty($_POST["envoi"]) && $_POST["envoi"] == "__envoi"){
    foreach($_POST as $k => $v){
        if($v == "simple"){
            $id_membre = substr($k,strrpos($k,"_")+1);
            $pseudo = $_POST["pseudo".$id_membre];
            $status = $_POST["valide".$id_membre];
            
            $sql = "UPDATE eleve SET valide='".$status."', pseudo='".$pseudo."' WHERE id_membre=".$id_membre;
            mysql_query($sql) or die(mysql_error());
        }
    }
}


//Requete pour la lecture des données
$r1 = "SELECT id_membre,pseudo,valide FROM user";
$res = @mysql_query($r1) or die('Erreur SQL !<br>'.$res.'<br>'.mysql_error());

//liste de champs : id_membre - pseudo - status
echo "\n<form action=\"".htmlspecialchars($_SERVER["PHP_SELF"])."\" method=\"post\">";
echo "\n<table>\n\t<tr>\n\t\t<th>pseudo</th>\n\t\t<th>oui</th>\n\t\t<th>non</th>\n\t\t<th>attente</th>\n\t\t<th colspan=\"2\">modifier</th>\n\t</tr>";

//Boucle while pour afficher les checkbox à valider
while($data = mysql_fetch_array($res)) {
    echo "\n\t<tr>";
    echo "\n\t\t<td><input type=\"text\" name=\"pseudo".$data["id_membre"]."\" value=\"".$data["pseudo"]."\" /></td>";
    
    $checked = "checked=\"checked\"";    
    $valide_oui = ($data["valide"] == "oui")? $checked : "";
    $valide_non = ($data["valide"] == "non")? $checked : "";
    $valide_attente = ($data["valide"] == "attente")? $checked : "";
    
    
    echo "\n\t\t<td><input type=\"radio\" name=\"valide".$data["id_membre"]."\" value=\"oui\" ".$valide_oui." /></td>";
    echo "\n\t\t<td><input type=\"radio\" name=\"valide".$data["id_membre"]."\" value=\"non\" ".$valide_non." /></td>";
    echo "\n\t\t<td><input type=\"radio\" name=\"valide".$data["id_membre"]."\" value=\"attente\" ".$valide_attente." /></td>";
    echo "\n\t\t<td><input type=\"submit\" name=\"modifier_membre_".$data["id_membre"]."\" value=\"simple\" /> <a href=\"".htmlspecialchars("un_fichier.php")."?mode=MAJ&membre=".$data["id_membre"]."\">complète</td>";
    echo "\n\t</tr>";
    
}

echo "\n<table>";
echo "\n<input type=\"hidden\" name=\"envoi\" value=\"__envoi\" />";
echo "\n</form>";


À cela on peut maintenant ajouter des checkbox identifiées donnant plus d'interactivité au formulaire dynamique. Je dis bien dynamique puisque l'idée générale n'est pas de se baser sur les données, mais plutôt sur les requêtes SELECT, UPDATE, DELETE et mettre des options supplémentaires. Ce qui donnent avec ce bout de piste :
* affichage de N enregistrement(s) par « page »,
* suppression des fiches suivant la/les sélection(s),
* modification(simple et complètes) suivant la/les sélection(s),
* affichage des données suivant tels ou tels critères,
* etc.

Après, je suis d'accord avec toi que l'affichage de tous les éléments HTML, c'est pas très beau Smiley eek . Logiquement, il devrait même pas y avoir :

echo"\n<table>...";

mais plutôt un truc comme ça :

$html->ajouterElement("table");


Automatiquement, le code sera plus propre des deux côtés (php/html).

Également, le boucle while devrait être revue complètement. Parce que pareil Smiley eek
$valide_oui, $valide_non, les boutons radios. C'est répétitif. Néanmoins, c'est juste une question d'aller au plus simple et d'être « lisible ».


Heyoan a écrit :

[...]comme si tu maîtrisais le php (je précise que je ne le maîtrise pas moi-même).[...]


Je te rassure, je ne prétends pas maîtriser PHP. Loin de là. Ce serait prétentieux de ma part. Il y a tellement de choses à voir dessus. Smiley luvlove

Après mon idée peut être fausse ou que ce code est faut pour une raison que j'ignore. (Je l'ai testé et il fonctionne). Cependant, mon idée est je crois pas bête.

Heyoan a écrit :

Et bien sûr cela ne change rien au fait qu'on soit copaings ! smile


Pas de soucis. Pour preuve bon anniversaire à toi. Smiley smile
Modifié par Nolem (29 Nov 2009 - 09:21)
Nolem a écrit :
bon anniversaire à toi.
Merci ! Smiley smile


Quelques remarques sur ton nouveau code :

* ce n'est à priori pas une bonne idée de rendre le pseudo modifiable à ce niveau car il va falloir vérifier que les pseudos modifiés ne sont pas vides et très certainement qu'ils ne sont pas déjà utilisés : du coup c'est la galère (lourdeur du code et ergonomie) pour réafficher une ou des erreurs (surtout si le nombre de membres par page est important). Du coup il vaut mieux ne le rendre modifiable que via ton lien mode=MAJ.

* ce n'est définitivement pas une bonne idée de mettre un input submit pour chaque ligne de membre car cela donne l'impression que seul le membre en question va être modifié alors qu'ils vont tous l'être. Soit tu mets un formulaire par ligne et à ce moment-là la modification ne touchera effectivement que le membre en question (et accessoirement il suffira de mettre la variable id_membre en hidden pour éviter la gymnastique de récupération substr / strpos), soit tu mets un INPUT submit global en fin de formulaire du style "Enregistrer les modifications".

* les variables $valide_oui, $valide_non et $valide_attente sont un peu redondantes et il y a moyen de factoriser tout ça (ce qui laisse également le choix de privilégier un SELECT au lieu des INPUT radio).

* il existe quelques règles simples pour rendre un tableau accessible qui sont visibles sur Au tableau ! (pompage) ou sur le site dont tu nous parlais récemment. Smiley cligne


Pour finir un petit essai :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<title>Statut des membres</title>
</head>
<body>
<?php
require_once('connexion.php');

if($_SERVER['REQUEST_METHOD']=='POST'){ 
    foreach($_POST['valide'] as $id_membre => $statut){ 
		$sql = "UPDATE user SET valide='".mysql_real_escape_string($statut)."' WHERE id_membre=".intval($id_membre); 
		mysql_query($sql) or die(mysql_error()); 
    } 
} 

// Récupération du nombre total de membres
$total_membres = 0;
$sql = 'Select count(*) as total_membres from user';
$result = mysql_query($sql);
if($result) $total_membres = mysql_result($result, 0);

if($total_membres > 0) {
	// Défilement des pages
	$page = !empty($_GET['page']) ? intval($_GET['page']) : 0;
	if($page == 0) $page = 1; // première page par défaut
	$nb_membres_par_page = 10;
	$page_max = ceil($total_membres / $nb_membres_par_page);
	if($page > $page_max) $page = $page_max;
	
	$string_defilement_pages = '';
	$string_defilement_pages .= $page > 1 ? '<a href="'.$_SERVER['PHP_SELF'].'?page=1">première</a> <a href="'.$_SERVER['PHP_SELF'].'?page='.($page-1).'">précédente</a>' : '';
	$string_defilement_pages .= ' page <strong>'.$page.'</strong> ';
	$string_defilement_pages .= ($page * $nb_membres_par_page) < $total_membres ? '<a href="'.$_SERVER['PHP_SELF'].'?page='.($page+1).'">suivante</a> <a href="'.$_SERVER['PHP_SELF'].'?page='.$page_max.'">dernière</a>' : '';
	
	echo '<p>'.$string_defilement_pages.'</p>';
	 
	// Récupération des membres
	$sql = 'SELECT id_membre, pseudo, valide FROM user LIMIT '.(($page-1)*$nb_membres_par_page).', '.$nb_membres_par_page;
	$result = mysql_query($sql);
?>	 
	 
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]).'?page='.$page; ?>" method="post">
<table>
	<tr>
		<th scope="col" >Pseudo</th>
		<th scope="col" >Statut</th>
		<th scope="col" >Action</th>
	</tr>
<?php	 
	$statuts = array('oui', 'non', 'attente');  

	//Boucle while pour afficher les checkbox à valider 
	while($row = mysql_fetch_assoc($result)) { 
		echo "\t<tr>\n"; 
		echo "\t\t<td><strong>".$row['pseudo']."</strong></td>\n";
		
		// Version avec SELECT
		echo "\t\t<td>".'<select name="valide['.$row['id_membre'].']"'.">\n";
		foreach($statuts as $statut) {
			$selected = $statut == $row['valide'] ? ' selected="selected"' : '';
			echo "\t\t\t".'<option value="'.$statut.'"'.$selected.'>'.$statut."</option>\n";
		}
		echo "\t\t</select></td>\n";
		
//		// version avec INPUT radio
//		echo "\t\t<td>";
//		foreach($statuts as $statut) {
//			$checked = $statut == $row['valide'] ? ' checked="checked"' : '';
//			$id = 'statut'.$statut.$row['id_membre'];
//			echo '<input type="radio" name="valide['.$row['id_membre'].']" value="'.$statut.'" id="'.$id.'"'.$checked.' /><label for="'.$id.'">'.$statut.'</label> ';
//		}
//		echo "\t\t</td>";
		
		$suffixe_url = '&id_membre='.$row['id_membre'].'&page='.$page;
		echo "\t\t<td>".'<a href="maj_membre.php?mode=update'.$suffixe_url.'" title="Voir ou modifier la fiche de ce membre">Consulter</a> <a href="maj_membre.php?mode=delete'.$suffixe_url.'" title="Supprimer ce membre">Supprimer</a>'."</td>\n";
		echo "\t</tr>\n"; 
	} 
?>
</table>
<p><input type="submit" value="Enregistrer les modifications" /></p>
</form>

<?php
} else {
	echo '<p>Aucun membre.</p>';
}
?>

</body>
</html>

Modifié par Heyoan (29 Nov 2009 - 19:57)
Modérateur
Hello,

Heyoan a écrit :

[...]
* ce n'est à priori pas une bonne idée de rendre le pseudo modifiable à ce niveau car il va falloir vérifier que les pseudos modifiés ne sont pas vides et très certainement qu'ils ne sont pas déjà utilisés : du coup c'est la galère (lourdeur du code et ergonomie) pour réafficher une ou des erreurs (surtout si le nombre de membres par page est important). Du coup il vaut mieux ne le rendre modifiable que via ton lien mode=MAJ.
[...]


La vérification se fera de toute manière puisque l'utilisateur devra avoir un pseudo unique. À ce titre, je me pose la question suivante : Comme le pseudo est unique, est ce qu'il pourrait être une clef primaire dans une base ?

Après, pour l'ergonomie, il y a des solutions annexes (bordures rouges, point d'exclamation, message dans un div, alert(), etc.)

Heyoan a écrit :

[...]
* ce n'est définitivement pas une bonne idée de mettre un input submit pour chaque ligne de membre car cela donne l'impression que seul le membre en question va être modifié alors qu'ils vont tous l'être. Soit tu mets un formulaire par ligne et à ce moment-là la modification ne touchera effectivement que le membre en question (et accessoirement il suffira de mettre la variable id_membre en hidden pour éviter la gymnastique de récupération substr / strpos), soit tu mets un INPUT submit global en fin de formulaire du style "Enregistrer les modifications".
[...]


Si tu rajoutes des checkbox avec la possibilité de modifier/supprimer suivant la sélection. Je pense que c'est faisable et pas si lourd que ça à vue de nez (je peux me tromper (erf, un lièvre peut être)). J'ai également pensé qu'un formulaire par membre annulerait automatiquement les checkbox.

Heyoan a écrit :

[...]
* les variables $valide_oui, $valide_non et $valide_attente sont un peu redondantes et il y a moyen de factoriser tout ça (ce qui laisse également le choix de privilégier un SELECT au lieu des INPUT radio).
[...]

C'est ce que j'ai dit plus haut. Cependant, il y a une petit lourdeur afin de déterminer la valeur par défaut de chaque membre. Ce qui rend le code un tout petit peu plus fastidieux à créer, je crois.

Heyoan a écrit :

[...]
* il existe quelques règles simples pour rendre un tableau accessible qui sont visibles sur Au tableau ! (pompage) ou sur le site dont tu nous parlais récemment. Smiley cligne
[...]


Je ne me souvenais plus de l'attribut scope Smiley confused . J'ai eu une discussion très intéressante avec notre ami Patidou à propos de summary sur le forum Accessibilité. Ce qui m'a également permit de relire l'article de pompage.

Bonne journée à toi. Smiley smile
Modifié par Nolem (03 Dec 2009 - 05:48)
Nolem a écrit :
La vérification se fera de toute manière puisque l'utilisateur devra avoir un pseudo unique. À ce titre, je me pose la question suivante : Comme le pseudo est unique, est ce qu'il pourrait être une clef primaire dans une base ?
Oui.

Nolem a écrit :
Après, pour l'ergonomie, il y a des solutions annexes (bordures rouges, point d'exclamation, message dans un div, alert(), etc.)
Ce que j'appelle alourdir inutilement le code et l'ergonomie.

Nolem a écrit :
Si tu rajoutes des checkbox avec la possibilité de modifier/supprimer suivant la sélection. Je pense que c'est faisable et pas si lourd que ça à vue de nez (je peux me tromper (erf, un lièvre peut être)).
Euh... je ne comprends pas le lien avec ce que je disais sur un formulaire unique et plusieurs INPUT submit qui laissent à penser qu'une seule ligne sera modifiée. Smiley murf

Nolem a écrit :
J'ai également pensé qu'un formulaire par membre annulerait automatiquement les checkbox.
Pas compris...

Nolem a écrit :
Bonne journée à toi.
Idem. Smiley smile