Nemáte zde nic, co by nastavilo hodnoty na nulu. Pole, která nejsou zaškrtnuta, budou v poli $_POST jednoduše chybět.
Budete muset vytvořit samostatný seznam názvů všech zaškrtávacích políček a procházet je a porovnávat je s polem $_POST.
Upravit: Nechtěl jsem napsat žádný kód, ale:
$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));
}
Všimněte si, že mysql_real_escape_string zde ve skutečnosti nepotřebujeme, protože víme, že všechny hodnoty id jsou bezpečné, ale je to dobrá praxe pro případ, že by se někdo později objevil a neopatrně změnil pole $allids.
Upravit znovu: Předpokládejme, že nevíme, jaká ID hledat.
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));
}