PHP'yi seçmemenin yada uzak durmamın nedenlerinden biris sanırım spagetti hep yazılması :)
Bence kodları sınıflara ayırmalısın ve sınıfları sayfaya import etmelisin. Yoksa problem böyle html ile iç içe girmiş kodu okumak. Okumayacağımda basit ne yapmak istediğini ve nasıl yapman gerektiğini yazacağım.
Soru :
Veri tabanında alacaklar diye bir sütun var ve fatura kesildikçe bu sütuna yeni yeni alacak satırı ekleniyor.
Mesela bu ay 500 tl fatura kesilmiş alacak hanesine 500 tl yansıdı
Öbür ayda 550 kesildi yeni satıra 550 daha eklendi.Bu böyle gidecek.
Firma da ancak 750 tl ödeme yaptı.
Bu ödeme girildiğinde 750 nin 500 ünün otomatik olarak ilk faturadan düşük geri kalanınıda ikiniciden düşecek ve ikinici alacak bakiyesindede 300 tl yi yazacak.
Array fonksiyonunu tam anlamıyla çözemedim. Dögüylede yapamadım
Benim çözümüm;
tüm işleri class'lara ayırıp öyle yapmaktan yanadır ama gel gelelim php syntax'ını pek bilmediğimden ona girmiyorum.
Anladığım sozlesmeno 'su ile bir sirketin borçlarını ve ödemelerini sorguluyoruz. Altta iki sorgu atmak yerine tek bir sorgu ile bu iş halledilir kanımca ;
Sorgu şunu diyor ;
SELECT i.id,SUM(i.yapilanodeme) as toplam_yapilan_odeme FROM islem i where sozlesmeno='$sozlesmeno' and tahsildurumu='Tahsil Edilmedi' group by i.id,SUM(i.yapilanodeme) order by id desc
sozlesmeno'su "123123" olan şirketin işlemlerini bana toplan yapılan odeme miktarı ile birlikte getir..
$sozlesmeno = $_GET['sozlesmeno'];
$yapilanodemem = $_GET['yapilanodemem'];
$query = mysql_query("SELECT i.id,i.yapilanodeme as odeme, SUM(i.yapilanodeme) as toplam_odenecek FROM islem i where sozlesmeno='$sozlesmeno' and tahsildurumu='Tahsil Edilmedi' group by i.id,i.yapilanodeme,SUM(i.yapilanodeme) order by id desc");
while ($row = mysql_fetch_array($query, MYSQL_BOTH)) {
$id = $row["id"];
$odeme = $row["odeme"];
$toplamOdeme = $row["toplam_odenecek"];
if($toplamOdeme < $yapilanodemem){
printf ("Odemede sıkıntı plus plus.. Yardım isteyin bi yerden.");
break;
}
if($yapilanodemem == 0) {
printf ("Odemede sıkıntı plus plus.. Para bitti :(");
break;
}
updateIslem($yapilanodemem, $odeme, $tahsildurumu, $id);
}
function odemeManager($yapilanodemem , $odeme, $tahsildurumu, $id){
if($yapilanodemem > $odeme){
odeme($yapilanodemem , $odeme, $tahsildurumu, $id);
}else{
odemeKalan($yapilanodemem , $tahsildurumu, $id);
}
}
function odeme($yapilanodemem , $odeme, $tahsildurumu, $id){
if(mysql_query("UPDATE islem SET yapilanodeme = '$odeme' , tahsildurumu = '$tahsildurumu' WHERE id = '$id'")){
printf ("ID : %s, nolu kayıt güncellendi.. ", $id);
return $yapilanodemem - $odeme;
}else{
printf ("ID : %s, nolu kayıt güncellenmedi.. ", $id);
break;
}
}
function odemeKalan($yapilanodemem , $tahsildurumu, $id){
if(mysql_query("UPDATE islem SET yapilanodeme = '$yapilanodemem' , tahsildurumu = '$tahsildurumu' WHERE id = '$id'")){
printf ("ID : %s, nolu kayıt güncellendi.. ", $id);
return 0;
}else{
printf ("ID : %s, nolu kayıt güncellenmedi.. ", $id);
break;
}
}
Tablodaki sutun adları berbat ötesi.. dostum isimleri aliasları düzgün vermelisin, hiç birşey anlaşılır değil kodu böyle çorba gibi koymuşsun ne nerde, ne yapıyor ne işe yarıyor anlamaya çalışma kodu yazmaktan daha fazla zaman kaybettiriyor.. rica ediyorum bu tür sorular sormadan önce koda bir refactoring yap, kod anlaşılır vaziyette olsun.
Php syntaxında hata olabilir yada logic'te test etme imkanım yok.
Kaynak