首页 > 解决方案 > 如何将 $typ = $POST['type'] 与选择的休假类型进行比较?

问题描述

请假输入表我无法找到将所选休假类型 $typ === 2 与病假 ID 进行比较的方法。

$typ = $_POST['typ'] 存储从数据库中获取的休假类型,例如年假和病假。如果我从表格中选择休假类型并且它是病假,那么我只需要在休假表中插入 leave_date 和 resume_date 否则如果选择的休假类型是年度,那么我需要在休假表中插入 leave_date、resume_date 作为很好地更新 leave_entitlement 表只是为了减少 leave_entitlement 余额

这是我的表格的摘录

 <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
 <div class="row form-group">     
  <div class="col-lg-12">
  <label>Leave Type</label>
  <select size="1" name="typ">
  <?php 

        $typs = mysqli_query($dbconn,"select * from type") or die('Query 
        failed: ' . mysqli_error());

        while ($line = mysqli_fetch_array($typs)) 
        { 
            echo "<option value='" . $line['typ_id'] . "'>"; 
            echo $line['typ_name'] . "</option>"; 
        } 
    ?> 
    </select>
  </div>
 </div>  
    </form>

这是我的提交

  if(isset($_POST['submit']))
 {
        $empnum = $_POST['empnum'];

    //     echo $empnum;
        $leave_date = $_POST['leave_date'];
        $resume_date = $_POST['resume_date'];

       $typ = $_POST['typ'];//leave type e.g Annual Leave, Sick Leave

    // this is a function to get the number of leave days from a form 
       Function GetNoOfDays($leave_date,$resume_date){
            $leave_dater = $leave_date;
            $resume_dater = $resume_date;
            $datediff = $resume_date - $leave_date;
            return round($datediff / (60 * 60 * 24));               
       }
          echo $leavetaken =  GetNoOfDays(strtotime($leave_date),strtotime($resume_date));

        //if a leave type is annual leave, $qry1 is excuted in the if body otherwise
        //if a leave type is sick leave $qry1 and qry2 in the else are excuted

        if($typ === 2) // 2 is a sick leave id if leave type is equal to 2 (sick leave) 
        {
            $qry1 = "INSERT INTO eleave VALUES(''," .
            "'$empnum','$leave_date','$resume_date'," .
            "'$typ')";

        }else{
            $qry1 = "INSERT INTO eleave VALUES(''," .
            "'$empnum','$leave_date','$resume_date'," .
            "'$typ')";
            $qry2 = "UPDATE eleave_entitlement SET annual_entitlement = annual_entitlement-$leavetaken WHERE emp_num = $empnum";

        }
            // execute query
            $added = mysqli_query($dbconn,$qry1).mysqli_query($dbconn,$qry2);

            // report results
            if(($added) != "")
            echo  "Record added successfully." . "<br>";
            else
            {
                echo "ERROR: Record could not be added<br>" . 
                    mysqli_error($dbconn);
            }
            // close connection
            mysqli_close($dbconn);
        }


 ?>

问题是当我从表单中选择年假或病假时,我的 if 语句的 else 部分总是执行。这意味着即使我选择病假,leave_entitlement 余额总是会减少

标签: phpmysqlsql

解决方案


您使用比较器===来比较值和数据类型。$typ 的数据类型是 String,所以"2" === 2会返回 false。如果你想使用===,你可以通过使用将 $typ 转换为整数,(int) $typ或者只是更改=====.


推荐阅读