bon en fait les tableaux c'est pas sorcier
tu te souvient des tableaux a deux entrées que tu fesais en math en primaire ? ben c'est pareil.
un tableau, c'est une variable dans laquelle on peux en stocker plusieurs "dans des cases" différentes, c'est un peu une étagère à une seul colonne. et tu fait référence à chaque "case" de l'étagère par un chiffre (le premier étant zéro parce qu'en info on commence à compter à zéro et pas à un

).
donc graphiquement tu a
_____________
| case zéro | => index zéro
_____________
| case un | => index un
_____________
| case deux | => index deux
_____________
| case trois | => index trois
etc
En php tu peux déclarer un tableau avec $tableau = array(), ou simplement en affectant dirrectement quelque chose avec les [] $tableau[] = 'le contenu de la nouvelle case'; cette syntaxe a l'avantage de créer le tableau et en même temps d'ajouter une nouvelle case (en bas de l'étagère

).
la taille n'est, théoriquement, pas limités. Les index peuvent être numérique, au aussi alphabétique (donc mon tableau pourrait être
$tableau['ma premiere case'] = 'la valeur de la première case';
$tableau['ma deuxième case'] = 'la valeur de la deuxième case';
$tableau['ma troisème case'] = 'la valeur de la troisème case';
________________________________
| la valeur de la première case | => index : 'ma premiere case'
________________________________
| la valeur de la deuxième case | => index : 'ma deuxième case'
________________________________
| la valeur de la troisème case | => index : 'ma troisème case'
pour avoir une valeur tu utilise l'index (le numéro ou la chaine de caractère qui représente la ligne)
donc : echo $tableau['ma deuxième case']; va afficher " la valeur de la deuxième case "
ce principe est extrémement pratique en programmation.
Dans le cas qui nous interresse, j'ai pas compris qu'il y avait plusieurs lignes (d'après la capture d'écran).
Puisse que tu en a plusieurs le tableau devient indispensable, car avec la notation name="lenom[]" dans le champs hml, php va récupérer un tableau dans $_POST['lenom'] avec toute les cas qui ont étaient cochées (enfin la valeur de la case cochées).
si tu fait name="lenom[index]" tu va pouvoir passer deux infos. Par exemple si tu souhaite passer et la clef et une valeur (qui peux prendre plusieurs etat) tu met la valeur dans le value et tu obtient et la clef et la valeur à la validation du formulaire
avec mon exemple tu utilise plein de tableau :
- le tableau session dans lequel tu met un tableau (etat) qui va contenir l'état de la case avant modif
$_SESSION['etat'][ 'la clef primaire dans la table'] = 'valeur correspondante';
et ceci pour toutes les lignes de la table mysql (qui au final est un tableau aussi, la clef primaire sert d'index

). ce qui fait que tu pourrais valider tous les champs d'un coup.
Il faut que tu ajoute un session_start(); à la première ligne du fichier (enfin la 1ère de la page appelé par le navigateur

).
Lorsque tu affiche le formulaire html tu commence le formulaire avant la table qui affiche les message (tu va faire qu'un seul formulaire

)
ensuite dans la case ou tu affiche la checkbox
<input type="checkbox" name="affichage[]" value="<?php $Enregistrement->id; ?>"
<?php if ($Enregistrement->afficher == '1'){ echo 'Checked';}
$_SESSION['etat'][ $Enregistrement->id] = $Enregistrement->afficher;
?>/>
Avec ça tu a un tableau dans la variable de session etat qui va contenir l'état de tous ce que tu affiche, la clef du tableau correspond à l'id dans la table.
ensuite vient le traitement du formulaire :
<?php
// on vérifie que le formulaire à été posté correctement
if (isset($_POST['affichage']) && is_array($_POST['affichage']) {
//initialisation des tableaux
$azero=array(); // ce tableau va contenir l'id des messages que dont l'état va passer a zéro
$aun = array(); // ce tableau va contenir l'id des messages que dont l'état va passer a un
// on parcourt le tableau de session qui contient l'état précédent
foreach ($_SESSION['etat'] as $id => $etat) {
// on regarde si on a l'id dans le tableau du formulaire
if (isset ($_POST['afficher'][$id])) {
// oui ça veux dire qu'il est coché dans le formulaire
// on regarde si la valeur a changée si c'est le cas c'est qu'elle est passée de 0 à 1
if ($_POST['afficher'][$id] != $etat)
$aun[] = $id; // valeur changée on l'ajoute dans le tableau des champs a mettre a un
}
else {
// pas présent dans le tableau du forulaire donc non coché donc à mettre a zéro
if ($etat == 1)
// si l'ancien état était 1 alors on le met à zéro (sinon c'est qu'il était déja a zéro ;)
$azero[] = $id;
}
}
// les requetes SQL
$miseAzero = 'update tablemessage SET afficher=0 where id in ('.implode(',',$azero).');';
$miseAun = 'update tablemessage SET afficher=1 where id in ('.implode(',',$aun) .');';
mysql_query($miseAzero);
mysql_query($miseAun);
//et voila le tour est jouer ;)
?>
Le désavantage de cette solution :
- si tu affiche tout les messages a la 1 étape (le formulaire) ben tu va mettre beaucoup de chose en session et donc ralentir la chose et le traitement du formulaire. mais ça va fonctionner
Avantage :
- si tu met en place une pagination ou même un filtrage (c'est mieux de ne pouvoir afficher qu'une vingtaine de ligne que 400000

, voir même de n'afficher que les messages non valider

) Et bien dans ces deux cas la validation fonctionne et est indépendante de l'affichage, filtre ou pas, pagination ou pas le code fonctionne
pour ce qui est du foreach c'est relativement en fait il prmet de parcourir un tableau (il géère tous seul l'index, ce que toi tu fait avec la boucle for) et il te fournit la clef du tableau (optionel) et la valeur
donc foreach( $tableau as $valeur) ou foreach($tableau as $key => $value). dans les {} tu peux directement utiliser $key ou $value pour traitement, tu peut même faire un $tableau[$key] = 'autre valeur';
c'est donc extremement pratique pour éviter de devoir calculer le nombre d'élément du tableau (pour pas dépasser) et de ne pas gérer l'index. bref autant en abuser
autre chose, en php les objets peuvent aussi être parcouru comme un tableau (ce qui fait qu'en remplaçant le tableau par un objet tu pourra obtenir toute les propiétés publique

).
voila j'espère ne pas être trop incompréhensible
@+
Il en faut peu pour être heureux ......