如何使用php和mysql计算基于客户付款的定期贷款还款的运行余额

如何使用php和mysql计算基于客户付款的定期贷款还款的运行余额,php,mysql,Php,Mysql,我正在尝试使用客户贷款付款更新预定贷款还款MySql表 下面的逻辑代码是我尝试过的,但我似乎没有正确地理解它。 我将感谢任何帮助。 提前谢谢 $sql11 = "SELECT * FROM loan_paymentss WHERE borrower_loan_id = '$loan_id' "; $result11 = mysqli_query($link,$sql11); $count = mysqli_num_rows($result11); while ($row2 = mysqli_f

我正在尝试使用客户贷款付款更新预定贷款还款MySql表

下面的逻辑代码是我尝试过的,但我似乎没有正确地理解它。 我将感谢任何帮助。 提前谢谢

$sql11 = "SELECT * FROM loan_paymentss WHERE borrower_loan_id = '$loan_id' ";

$result11 = mysqli_query($link,$sql11);
$count = mysqli_num_rows($result11);
while ($row2 = mysqli_fetch_array($result11)) {

    $id = $row2['id'];
    $sql = "SELECT * FROM loan_paymentss WHERE borrower_loan_id = '$loan_id' LIMIT 1";
    $result = mysqli_query($link,$sql);
    while ($row1 = mysqli_fetch_array($result)) {

        $amt = $row1['amount'];
        $pmnt = $row1['pmnt_made'];
        $r = $amt-$amt_paid;
        for ($i=0; $i <= $count ; $i++) {

            if ($r == 0) {

                $pmnt = $amt_paid;
                $sql1 = "UPDATE loan_paymentss SET pmnt_made = '".$pmnt."', status='PAID' WHERE id = '$id' ";
                mysqli_query($link,$sql1);

            }elseif ($r > 0 ) {
                $pmnt = $amt_paid;
                $sql1 = "UPDATE loan_paymentss SET pmnt_made = '".$pmnt."', status='UNPAID' WHERE id = '$id' ";
                mysqli_query($link,$sql1);

            }else{
                if ( stristr($r,'-') ) {
                    $sql2 = "UPDATE loan_paymentss SET pmnt_made = '$r'  WHERE id = (select max(id) from loan_paymentss where id < '$x')";
                    mysqli_query($link,$sql2);
                    $x++;
                }
            }
        }
    }
}
我试图做到的是,每当客户支付贷款时

定期付款(每月分期付款,例如每月分期付款) 400美元(两个条款),客户可以在两个条款之前或之后决定付款

计划日期(如2019年10月10日和2019年10月11日),因此我想用客户支付的金额更新pmnt_列(支付预扣0.00),并根据ff条件将状态更改为“已支付”

实例 如果首次付款(已付款)等于金额(计划付款金额),则将状态更新为“已付款” 或 如果第一次付款(支付的金额)大于金额(计划支付的金额),则将状态更新为“已支付”,并减去(金额-支付的金额=-r),如果r匹配,则将值r放入下一次计划付款,即第二次计划支付的金额 第一个条件,将状态更新为“已付款”,如果不等待下一次付款

如果付款金额小于金额(计划付款金额),则不更新状态,但在下次付款时(付款金额+新付款(付款金额)),如果仍小于金额,则不更新状态,但如果等于(金额),则继续并更新状态

你能解释一下实际的问题是什么吗?我们可以看到一些代码和一些数据示例,但你没有清楚地解释问题或代码做得不好。尽管在SQL语句中使用了嵌入变量,但你的代码似乎容易受到
SQL注入的影响。当你使用
mysqli
时,你真的,真的应该修改你的代码来使用
准备好的报表
——特别是如果这是一个处理人们财务的实时系统——否则可能会被视为疏忽!我已经更新了我想要实现的目标…请在这个问题上我需要帮助…你能解释一下:为什么在初始查询中使用
限制1
?为什么有两份记录?这是否表明已同意或预期进行两次(再)付款?
金额
列中的每个金额均为约定金额(re)付款金额?您能解释一下实际问题是什么吗?我们可以看到一些代码和一些数据样本,但您没有清楚地解释问题或代码没有正确执行。您的代码看起来容易受到
SQL注入的影响,尽管在SQL语句中使用了嵌入变量。当你使用
mysqli
时,你真的,真的应该修改你的代码来使用
准备好的报表
——特别是如果这是一个处理人们财务的实时系统——否则可能会被视为疏忽!我已经更新了我想要实现的目标…请在这个问题上我需要帮助…你能解释一下:为什么在初始查询中使用
限制1
?为什么有两份记录?这是否表明已同意或预期进行两次(再)付款?
金额
列中的每个金额是否为约定(重新)付款金额?
id|borrower_id|borrower_loan_id|payment_sched|  payment_number|amount| pmnt_made|status
---------------------------------------------------------------------------------------
1 | 34        |l_5261          |10/10/2019   |  1             |400   |          |UNPAID
2 | 34        |l_5261          |10/11/2019   |  2             |400   |          |UNPAID


When a customer pays $500 
Expected Output

1 | 34        |l_5261          |10/10/2019   |  1             |400   |   400     |PAID
2 | 34        |l_5261          |10/11/2019   |  2             |400   |   100     |UNPAID

When a customer pays $300

1 | 34        |l_5261          |10/10/2019   |  1             |400   |    300    |UNPAID
2 | 34        |l_5261          |10/11/2019   |  2             |400   |    0.00   |UNPAID

when a customer pays all installment @ a go
1 | 34        |l_5261          |10/10/2019   |  1             |400   |    400    |PAID
2 | 34        |l_5261          |10/11/2019   |  2             |400   |    400    |PAID