Je hebt hier niets dat de waarden op nul zet. Boxen die niet zijn aangevinkt, zullen gewoonweg niet aanwezig zijn in de $_POST-array.
U moet een aparte lijst maken met de namen van alle selectievakjes en deze doorlopen, en ze vergelijken met de $_POST-array.
Bewerken: Wilde geen code schrijven, maar:
$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));
}
Merk op dat we de mysql_real_escape_string hier niet echt nodig hebben, omdat we weten dat alle id-waarden veilig zijn, maar het is een goede gewoonte voor het geval iemand later langskomt en achteloos de $allids-array verandert.
Opnieuw bewerken: Stel dat we niet weten naar welke ID's we moeten zoeken.
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));
}