-2

在此处输入图像描述

`SI_ID is` the Auto Increment Field
`SI_Reg_No` i the student registration number 
`SI_Ins_NO` is the installment number 
`SI_Due_Date` is the due date of that installment 
`SI_Paid_Amount` is the paid amount of each installment

当我的付款表单按钮单击时,我想更新 SI_Paid_Amount 字段。当我单击下面的付款字段时,表数据已经加载而没有 SI_Paid_Amount。

$amount = 5000.00 // this is what i send to the db for update `SI_Paid_Amount`

如果SI_paid_Amount应该像下面这样更新

从一开始SI_Ins_No,如果 SI_Ins_amount 大于$amount它应该更新 Si_Paid_Amount 字段并且它应该停止循环。像下面这样

在此处输入图像描述

如果 SI_Ins_Amount 小于发送金额,则应更新第二个 SI_Ins_No 相关SI_Paid_Amount列。并且在将数据发送给我们时,SI_Paid_Amount我们希望SI_Paid_Amounts根据之前检查金额SI_Ins_No。所以我的问题是我如何用 php 来做到这一点?

4

1 回答 1

6

我在聊天中与这个人交谈过,并了解了他的目标。基本上这是一张供学生分期付款的桌子,但他们可以批量付款或其他任何方式。

示例:所以我欠 15000、10000 和 5000 的 3 期分期付款。我支付了 17000 英镑,它会根据 ASC 订单中的 SI_Ins_No 从我的 3 期分期付款中扣除 15000。所以它将在 SI_ID #1 中支付的金额增加 5000,然后在 SI_ID #2 中增加 2000

我写了一个小解决方案来帮助

// $rows = "SELECT *, (`SI_Ins_Amount` - `SI_Paid_Amount`) as owed FROM `student_installments` WHERE (`SI_Ins_Amount` + `SI_Paid_Amount`) != 0 AND `SI_Reg_No` = 'COL/A-000041' ORDER BY `SI_Ins_NO` ASC";

$rows = array();
$rows[0]['SI_ID'] = 1;
$rows[0]['SI_Reg_no'] = 'COL/A-000041';
$rows[0]['SI_Ins_Amount'] = '15000';
$rows[0]['SI_Paid_Amount'] = '0';
$rows[0]['owed'] = '15000';
$rows[1]['SI_Ins_NO'] = '1';

$rows[1]['SI_ID'] = 2;
$rows[1]['SI_Reg_no'] = 'COL/A-000041';
$rows[1]['SI_Ins_Amount'] = '10000';
$rows[1]['SI_Paid_Amount'] = '0';
$rows[1]['owed'] = '10000';
$rows[1]['SI_Ins_NO'] = '2';

$rows[2]['SI_ID'] = 2;
$rows[2]['SI_Reg_no'] = 'COL/A-000041';
$rows[2]['SI_Ins_Amount'] = '5000';
$rows[2]['SI_Paid_Amount'] = '0';
$rows[2]['owed'] = '5000';
$rows[1]['SI_Ins_NO'] = '3';

$amount = 27000;
foreach($rows as $r) {
    // There's money left
    if($r['owed'] - $amount < 0) {
        $paying = $r['owed'];
        $amount -= $r['owed'];
    } else {
        // No money left
        $paying = ($r['SI_Paid_Amount' + $amount);
        $amount -= $paying;
    }

    // If there's money left
    if($paying > 0) { 
       echo "UPDATE `student_installments` SET `SI_Paid_Amount` = '".$paying."' WHERE `SI_ID` = '".$r['SI_ID']."' \n";
   }
}

请随时对此进行改进,因为这只是一种快速粗略的方法。

你可以在这里测试

您需要添加自己的东西,例如检查金额是否为正,确保他们不会支付太多等...

于 2013-09-13T10:15:29.157 回答