bir kere bu çalışmaz ilk satırı ilk gönderdiği veriyi hiç bir zaman onaylayamaz
$a=$_POST[a];
while($i<count($a)) {
$i+=1;
if($a[$i]=="on")
$guncelle = mysql_query (" update dosya set onay='1' WHERE id='$a[$i]' ");
burada sürekli $i 1 den başlar a[0] noldu

---
$a= post[a] ne demek a input name sinin value sini a ya atıuyorsun ki sen üstte
value leri boş gönderdin name leri böyle okuyamazsın posta foreach yaparak key leri okuyabilirsin yani
foreach($a as $saho=>$anka)
if(is_integer($anka)) $guncelle = mysql_query (" update dosya set onay='1' WHERE id='$anka' ");
gibi olabilir ....