Nie masz tutaj niczego, co ustawia wartości na zero. Pola, które nie są zaznaczone, będą po prostu nieobecne w tablicy $_POST.
Musisz sporządzić oddzielną listę nazw wszystkich pól wyboru i przeglądać je, porównując je z tablicą $_POST.
Edytuj: Nie zamierzałem pisać żadnego kodu, 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));
}
Zauważ, że tak naprawdę nie potrzebujemy tutaj mysql_real_escape_string, ponieważ wiemy, że wszystkie wartości id są bezpieczne, ale jest to dobra praktyka na wypadek, gdyby ktoś pojawił się później i nieostrożnie zmienił tablicę $allids.
Edytuj ponownie: Załóżmy, że nie wiemy, jakich identyfikatorów szukać.
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));
}