v2.5.2
Giriş yap

PHP ile işlem önceliği hesaplaması

edward
782 defa görüntülendi

PHP ile işlem önceliği

Merhaba arkadaşlar,

Oluşturmuş olduğum formda bir adet tutar giriş kısmı bulunmaktadır. Veritabanımda da borçlar adı altında tablom bulunmaktadır ve bu tablonun sütunları ise; borc, odenenTutar ve toplamBorc adı altında bulunmaktadır.

Borçlar tablosunda 3 adet veri girişi bulunmaktadır ve bunların borçları 250, 120 ve 450 tutarındadır.

Ben bu formdaki tutar girişine 260 lira yazdığım zaman borçlar tablosundaki ilk verideki 250TL tutarındaki borcu ödeyecek arta kalan tutar ile de ikinci verideki tutara aktaracak yani kalan 10TL ödeyecek ikinci veriye.
Sadece 250 veya 150 lira yaparsamda ilk veriye ödeme yapacak

Bu işlemi nasıl yapabilirim arkadaşlar, uygulamalı olarak yardımcı olursanı sevinirim.

iyi günler

Cevap yaz
Cevaplar (9)
edward
1345 gün önce

@makifgokce üstat ellerine sağlık, ödenen tutar ve ödeme durumu değşiyor burası sorunsuzca çalışıyor fakat
toplamBorc sütunundan ödenen tutarın düşümü gerçekleşmiyor.

makifgokce
1346 gün önce
$userId = 1;
$ode = 0;
$a = $db->prepare("SELECT SUM(`borc` - `odenenTutar`) as odenecekTutar FROM `borclar` WHERE `odemeDurumu` != 2 AND `uyeId` = ?");
$a->execute([$userId]);
$userDept = $a->fetch(PDO::FETCH_ASSOC);
$b = $db->prepare("SELECT * FROM `borclar` WHERE `odemeDurumu` != 2 AND `uyeId` = ?");
$b->execute([$userId]);
$depts= $b->fetchAll(PDO::FETCH_ASSOC);
if(isset($userDept["odenecekTutar"])){
	echo "Ödenecek tutar: ".$userDept["odenecekTutar"]."₺<br>";
	if(isset($_POST["tutar"]) && intval($_POST["tutar"]) > 0){
		$ode = intval($_POST["tutar"]);
	}
	if($ode <= $userDept["odenecekTutar"] && $ode > 0){
		echo "<pre>";
		foreach($depts as $dept){
			$odenecek = $dept["borc"] - $dept["odenenTutar"];
			if($ode > 0){
				if($ode >= $odenecek){
					$durum = 2;
					$odenen = $dept["odenenTutar"] + $odenecek;
				}else if($ode < $odenecek){
					$durum = 1;
					$odenen = $dept["odenenTutar"] + $ode;
				}else{
					$durum = 0;
					$odenen = 0;
				}
				$borc_ode = $db->prepare("REPLACE INTO `borclar` SET `id` = :id, `uyeId` = :uyeId, `borc` = :borc, `odenenTutar` = :odenenTutar, `toplamBorc` = :toplamBorc, `odemeDurumu` = :odemeDurumu, `tarih` = :tarih");
				$borc_ode->execute([
					":id" 			=> $dept["id"],
					":uyeId" 		=> $dept["uyeId"],
					":borc" 		=> $dept["borc"],
					":odenenTutar" 	=> $odenen,
					":toplamBorc" 	=> $dept["toplamBorc"],
					":odemeDurumu" 	=> $durum,
					":tarih" 		=> $dept["tarih"]
				]);
				echo "Ödenen: $odenen, ödenecek: $odenecek, durum: $durum, $ode <br>";
				print_r($dept);
				echo "<br>";
				$ode -= $odenecek;
			}
		}
		echo "</pre>";
	}
}else {
	echo "Kullanıcıya ait borc bulunamadı.<br>";
}
edward
1347 gün önce

Soruya cevap aranıyor :)

edward
1348 gün önce

@kargasa1982 Üstat ellerine sağlık fakat yazım hatalarını düzelttim fakat işlem doğru çalışmıyor.

kargasa1982
1351 gün önce
$odenentutar = $_POST["odenentutar"];
$musteriID = $_POST["musteriID"];
$kalan = $odenentutar;
$borclar = $db->query(SELECT ID,borc,odenen FROM borclar WHERE musteriID='{$musteriID}' ORDER BY ID ASC)->fetchAll();
foreach($borclar as $item){
    if($kalan>0){
        $borcid = $item->ID
        $borc = $item->borc;
        if($borc<=$kalan){
            $odenen = $borc;
            $kalan = $kalan - $odenen;
        else{
            $odenen = $kalan;
            $kalan = 0;
        }
        
        $update = $db->query("UPDATE borclar SET odenen='{$odenen}' WHERE ID='{$borcid}');
        
    }else{
        break;
    }
}
edward
1351 gün önce

@jct toplamBorc kısmı dediğiniz gibi birbirinden çıkarırakta yapılabilir, veritabanında kayıt edeyim demiştim.

Size şöyle anlatayım 3 kalem borcunuz (250-120-450) toplamda 820TL'dir. ödeme yapmaya gidiyorsunuz fakat sizin 820TL'ni yok sadece 300TL'niz var ve 300TL ödeme yapıyorsunuz.
Böylelikle 3 kalem borcunuzdan 1. 250 siliniyor 2.den ise 50TL siliniyor.
Formdaki tutar girişine 300 TL girince bu şekilde düşüşleri php de nasıl yapacağız.
Umarım anlatabilmişimdir.

@konya hocam geri kalan 10TL, 2. kısmındaki 120 TLden düşüş yapacak.

@makifgokce hocam dediğiniz siteye veritabanını yükledim.

makifgokce
1352 gün önce

veritabanını buraya yükleyerek bizle paylaşsan daha anlaşılır olurdu.

konya
1352 gün önce

fazla ödenen yani kalan 10 tl nere ekleteceksin anlayamadım. her üyenin birde bakiyesi olacak ki bu 10 tl bakiyeseni eklensin yada ben yanlış anladım

jct
1352 gün önce

@edward hocam 2-3 defa okudum inan anlayamadım. Belkide benim anlayışsızlığım :)

Ancak tablonda: toplamBorc sütununa ihtiyaç olmadığını düşünüyorum. Sayfaya çağırırken, birbirinden çıkarırsın. (BENCE)