Merhaba,
foreach ($_POST as $val) { hemen bir satır üzerine print_r($_POST); yazarak gelen tüm postlara bakın fazlalıkların neden kaynaklandığını göreceksiniz.

Eğer 2 insert varsa tüm post'ları döndürmek yerine ;
insert into makinabakimdetay (bakimid,malkodu,miktar,netfy) VALUES (birinci post için dizilim),(ikinci post için dizilim);
şeklinde tek bir insert oluşturabilirsiniz.

Form yapınızı bilmiyorum 2 3 veri giriyorum demişsiniz. Boş olan form satırları varsa ve onları girmek istemiyorsanız da foreach'inizi şu şekilde düzenleyin.
foreach ($_POST as $val) {
    $mal = $_POST['m_kod'][$i];
    $miktar = $_POST['miktar'][$i];
     $netfy = $_POST['nfy'][$i];
    $id2 = $_GET['id'];
if($mal != "") {
   $guncelle=mysql_query("INSERT INTO makinabakimdetay (bakimid,malkodu,miktar,netfy) VALUES ('$id2','$mal', '$miktar','$netfy')");

$i++;
}

}
Böylelikle m_kod boşsa o satırı boşa insert etmez.
iyi çalışmalar.