如何通过在Yii2中存在记录大于安全月份的特定月份输入数据来限制用户

时间:2019-11-28 12:09:19

标签: php mysql phpmyadmin yii2 yii2-basic-app

我正在使用Yii2 basic。我有一个名为groupsavingdetails的表,该表存储每个组的每月节省量。

假设我有一个小组的成立日期是2017-08-08。现在,在为该组创建月度保存记录时,我将选择该组,输入年为2017,月为8月,然后输入所有值,这些值将使我获得8月的期末余额并保存在数据库中。

现在,当用户想要输入10月而不是9月的月份时,他可以执行此操作,因为系统会将8月的期末余额显示为期初余额,并且他将在10月的月份中进行与8月相同的操作。

现在,在10月进行输入后,用户将不能再输入9月的记录。

我有该群体在2017年以及从8月,9月,10月,11月和12月开始的记录。

会发生什么情况,当我输入年份(2018年)和月份(1月)时,将显示警报消息,该消息不应显示。

在保存记录时条件失败。

$group = Yii::$app->db->createCommand('SELECT *
    FROM groupsavingdetails
    where groupsavingdetails.GroupId=:id
    ORDER BY groupsavingdetails.GroupSavingDetailsId DESC LIMIT 1')
->bindValues([
    ':id' => $model->GroupId,
])->queryAll();


$year2=0;
$month3=0;
foreach($group as $groups) {
    $model->OpeningBalance=$groups['ClosingBalance'];
    $model->TotalValueofLoanGiven=$groups['TotalValueofLoanGiven'];
    $model->LoanRepaidUptilNow=$groups['LoanRepaidUptilNow'];
    $model->TotalValueOfLoanOutstanding=$groups['TotalValueOfLoanOutstanding'];
    $year2=$groups['Year'];
    $month3=$groups['Month'];
}

$identity = \Yii::$app->user->identity;
$eid = $identity->id;
$model->EmpId = $eid;

if($model->LoanGiven!=0) {
    $model->TotalValueofLoanGiven+=$model->LoanGiven;
}

if($model->LoanRecovery!=0) {
    $model->LoanRepaidUptilNow+=$model->LoanRecovery;
}

$model->TotalValueOfLoanOutstanding = $model->TotalValueofLoanGiven-$model->LoanRepaidUptilNow;

$previousMonth = $model->Month - 1;
if ($previousMonth == 0) {
    $previousMonth = 12;
    $year2--;
}

// Here the condition is getting failed.
if ($model->Year >= $year2 && $model->Month > $previousMonth) {
    $model->ClosingBalance=($model->OpeningBalance+$model->TotalSaving+$model->LoanRecovery+$model->LoanInterest+$model->Fine+$model->BankInterest+$model->BankLoan-$model->Expenses-$model->LoanGiven);
    $model->save(); 
} else {
    echo "<script language='javascript'>";
    echo "alert('Records greater than selected year and month exists.')";
    echo "</script>";

    return $this->render('create', [
        'model' => $model,
    ]);
}

我应该改变什么?

1 个答案:

答案 0 :(得分:0)

让我们看看你的状况

$model->Year >= $year2 && $model->Month > $previousMonth

在您的情况下,有两个表达式与&&)结合在一起。这意味着两个表达式都必须为真,整个条件才能为真。

我们有$year2 = 2017$previousMonth = 10(十月)。

现在将$ model-> Year设置为2018,将$ model-> Month设置为1(一月)。 条件中的第一个表达式是2018 >= 2017。这部分是true。但是第二个表达式是1 > 10。然后false将产生true && false

您真正需要做的是仅在年份相同时检查月份。因此,您要寻找的条件是:

false

这种情况将像这样工作:

$model->Year > $year2 || ($model->Year == $year2 && $model->Month > $previousMonth)
Year = 2018
Month = 1

2018 > 2017 || (2018 == 2017 && 1 > 10)
true || (false && false)
true || false
true
Year = 2017
Month = 11

2017 > 2017 || (2017 == 2017 && 11 > 10)
false || (true && true)
false || true
true