Sie haben hier nichts, was die Werte auf Null setzt. Kästchen, die nicht angekreuzt sind, fehlen einfach im $_POST-Array.
Sie müssen eine separate Liste mit den Namen aller Kontrollkästchen erstellen und diese durchgehen und sie mit dem $_POST-Array vergleichen.
Bearbeiten: Wollte keinen Code schreiben, aber:
$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));
}
Beachten Sie, dass wir den mysql_real_escape_string hier nicht wirklich brauchen, da wir wissen, dass alle id-Werte sicher sind, aber es ist eine gute Übung, falls später jemand vorbeikommt und das $allids-Array leichtsinnig ändert.
Erneut bearbeiten: Angenommen, wir wissen nicht, nach welchen IDs gesucht werden soll.
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));
}