Vous n'avez rien ici qui fixe les valeurs à zéro. Les cases non cochées seront simplement absentes du tableau $_POST.
Vous devrez créer une liste séparée des noms de toutes les cases à cocher et parcourir celles-ci, en les comparant au tableau $_POST.
Modifier : Je n'allais pas écrire de code, mais :
$allids = array('id1','id2','id3');
foreach ($allids as $oneid) {
$val = (int) isset($_POST[$oneid]); // will be 0 or 1
mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($oneid));
}
Notez que nous n'avons pas vraiment besoin de mysql_real_escape_string ici puisque nous savons que toutes les valeurs d'id sont sûres, mais c'est une bonne pratique au cas où quelqu'un viendrait plus tard et modifierait négligemment le tableau $allids.
Modifier à nouveau : Supposons que nous ne sachions pas quels identifiants rechercher.
mysql_query("UPDATE istable SET showPP = 0");
foreach ($_POST as $oneid=>$nothing) {
mysql_query("UPDATE istable SET showPP = 1 WHERE id = ".mysql_real_escape_string($oneid));
}