获取本月和本年度尚未提交付款的用户数据 - PHP代码

Fetch user data who haven't submitted yet payment this month and year - PHP code

提问人:Shamim Hossain 提问时间:12/1/2022 最后编辑:aynberShamim Hossain 更新时间:12/1/2022 访问量:36

问:

我是PHP的新手。我正在创建一个项目。在这个项目中,我想获取本月和今年尚未存款/付款的用户的信息。我的代码无法正常工作。我只想显示本月和本年未存钱/付款的人的用户名。 也许需要一个 IF/else 公式,但我不知道。请帮忙。

usename 唯一 见表格

table_name=信用 插入的行,如

usename
一个 十一月 2022
B 十一月 2022
B 十二月 2022

用户 A 和 B 都是上月和上年提交付款,本月和当年用户 B 提交付款,但用户 A 不提交付款。我想向用户 A 展示我的接受输出,如下所示

usename
一个 十一月 2022
<form method="post" accept="" class="row g-3">

                <div class="col-lg-4">
                  <label  for="val-select2">Month <span class="text-danger">*</span></label>
                  <select  class="js-select2 form-select form-control" id="val-select2" name="pay_month" style="width: 100%;" required>
                    <option value="<?php echo date("F")?>" hidden><?php echo date("F")?></option>
                    <option value="January">January</option>
                    <option value="February">February </option>
                    <option value="March">March</option>
                    <option value="April">April</option>
                    <option value="May">May</option>
                    <option value="June">June</option>
                    <option value="July">July</option>
                    <option value="August">August</option>
                    <option value="September">September</option>
                    <option value="October">October</option>
                    <option value="November">November</option>
                    <option value="December">December</option>
                  </select>
                </div>
                <div class="col-lg-4">
                  <label >Year<span class="text-danger">*</span></label>
                  <input type="text" class="form-control"  name="pay_year" placeholder="year" required value="<?php echo date("Y");?>
                  ">
                </div>
                <div class="col-lg-2">
                  <label></label>
                  <button class="form-control btn btn-primary" name="save" type="submit"><i class="fa fa-eye" aria-hidden="true"></i>
                  View</button>
                </div>
              </form>
<?php
              if (isset($_POST['save'])) {
               $sql = "SELECT * FROM credit WHERE  NOT (pay_month='" . $_POST['pay_month'] . "' AND  pay_year='" . $_POST['pay_year'] . "') ORDER BY username";
               if($result = mysqli_query($db, $sql)){
                if(mysqli_num_rows($result) > 0){
                  $count = 0;
                  while($row = mysqli_fetch_array($result)){
                    if(mysqli_num_rows($result) > 0)
                    $count ++;
                    echo '<tr id="'.$row["id"].'">';
                    echo '<td class="fw-semibold">'.$count.'
                    </td>';
                    echo '<td class="fw-semibold fs-sm text-success"> <a href="single_info.php?name='.$row["usename"].'">'.$row["username"].'</a>
                    </td>';
                    echo "</tr>";
                  }
                  mysqli_free_result($result);
                } else{
                  echo "No data found.";
                }
              } else{
                echo "ERROR: Could not able to execute $sql. " . mysqli_error($db);
              }} ?>
php if语句 while-loop mysqli

评论

0赞 Dharman 12/1/2022
警告:您对 SQL 注入持开放态度,并且应该使用参数化的预准备语句,而不是手动构建查询。它们由 PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,您仍然面临数据损坏的风险逃跑是不够的!
0赞 Ken Lee 12/1/2022
您的 SQL 语句出现逻辑错误。(它仍将包括 B)。因此,将其更改为 并使用参数化的预准备语句。select * from credit where username not in (select username from credit where month=? and year=?)
0赞 Shamim Hossain 12/1/2022
谢谢,老板Ken Lee先生,它正在工作。:)

答:

0赞 Brahim Hamdouni 12/1/2022 #1

我认为您必须更改 SQL 以查找所需时间段内的付款数量,并按付款次数为 0 的次数进行过滤。

像这样:

SELECT username, COUNT(*) AS n FROM credit 
WHERE month = ? AND year = ? HAVING n=0;

(我在示例中使用了准备好的语句)