在更新数据库之前检查两次输入

时间:2019-07-25 22:25:18

标签: php jquery mysql sql

这是我的问题...

我有一个SQL表,显示航班详细信息,例如到达日期,到达时间,出发日期,出发时间等... 现在,如果要更新航班,请确保航班日期与其他日期不匹配,例如:

如果我有一个名为IFLY的航班,其航班是8月10日起飞,而8月14日是同一航班,其起飞时间是8月18日起飞,那么想象一下我想更新第二个航班,即8月13日,我应该收到以下答复:“您的航班无法到达在前一个没有离开之前”。为此,我做了...

if (isset($_POST['update'])) {
    $regist = $_POST['reg'];
    $arrivalDate = $_POST['adof'];
    $departureDate = $_POST['ddof'];

    $sql = "SELECT reg, adof, ddof FROM flights WHERE reg = '$regist' AND  adof < $arrivalDate' order by ddof desc";//

    $data = mysqli_query($conn, $sql);

    if (mysqli_num_rows($data) > 0) {
        foreach ($data as $key => $v) {
            if ($v['ddof'] <= $arrivalDate) {
                echo 'exists';
            }
        }
    }
}

但无法正常工作,因为当我进行更新时,它也在寻找我想更新的航班。 如何解决这个问题,如何避免当前条目的SQL查询?

2 个答案:

答案 0 :(得分:-1)

您描述的是业务逻辑前提条件要求。在执行任何更新之前,您需要获取记录,并评估更改是否会导致荒谬的情况。如果是这样,您可以错误地拒绝更改,而不会发出更新。

答案 1 :(得分:-2)

要确定航班上是否有重叠,我相信您只需查看新的出发日期是否在旧的出发日期与到达日期之间,或者 OR ,如果新的出发日期为在两个旧日期之间, OR (如果新出发日期在旧出发日期之前),并且新到达日期在旧出发日期之后。我认为这涵盖了您的所有情况。该查询将类似于:

    SELECT TOP 1 reg, adof, ddof FROM flights 
       WHERE reg = '$regist' AND (
       (adof > $departureDate AND adof < $arrivalDate) 
       OR (ddof > $departureDate AND ddof < $arrivalDate) 
       OR (ddof < $departureDate AND adof > $arrivalDate)
       ) 

我没有尝试过,但是我认为这是您想要的。 SELECT TOP 1应该加快查询速度,因为您关心的只是是否有一条记录引起冲突。那时,没有理由寻找更多记录。