ここには、値をゼロに設定するものはありません。チェックされていないボックスは、$_POST配列に含まれていません。
すべてのチェックボックスの名前の個別のリストを作成し、それらを循環して、$_POST配列と比較する必要があります。
編集: コードを書くつもりはありませんでしたが:
$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));
}
すべてのid値が安全であることがわかっているので、ここではmysql_real_escape_stringは実際には必要ないことに注意してください。ただし、誰かが後でやって来て、$allids配列を不注意に変更した場合に備えてください。
再編集: 探すIDがわからないとします。
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));
}