使用对话框确认后插入重复数据

时间:2016-12-07 16:30:46

标签: javascript php

当Duplicate被检查数据并且确认框apears我想按下ok按钮时插入数据。

当我按下取消按钮时,数据不应插入数据库。

我该怎么做?这是我到目前为止所做的:

<?php
            //insert data to database

            $category=Null;
            $model=Null;
            $part=Null;
            $remarks=Null;
            $partcode=Null;
            $partnumber=Null;
            $user=$_SESSION['login_user'];

            //Recive data from form
            if(isset($_POST['category'])){$category = $_POST['category'];}
            if(isset($_POST['model'])){$model = $_POST['model'];}
            if(isset($_POST['part'])){$part= $_POST['part'];}
            if(isset($_POST['remarks'])){$remarks = $_POST['remarks'];}
        //Check Duplicate Data From DB  
        $check="Select * From part Where Category='$category' and Model='$model' and PartName='$part'";
        $checkrun=mysqli_query($conn,$check);
        $checkrow=mysqli_num_rows($checkrun);
        if($checkrow>0){
            echo "<script>confirm('Duplicate Data! Click OK to Add & Cancel to Edit')</script>";
        }

        //Make Part Number  
        $maxPartQry="Select max(PartCode) FROM part";
        $maxPartRun=mysqli_query($conn,$maxPartQry);
        $maxpart=mysqli_fetch_array($maxPartRun);
        $partcode=$maxpart[0]+1;
        $invID = str_pad($partcode,6,'0', STR_PAD_LEFT);
        $partnumber=$model."-".$part."-".$invID;
        $product;


        //Insert Query For inserting data in DB
        $sql = "INSERT INTO `part` (`ID`, `PartCode`, `PartNumber`, `Category`, `Model`, `PartName`, `Remarks`, `Date`, `Name`) 
        VALUES (NULL, '$partcode', '$partnumber', '$category', '$model', '$part','$remarks', NOW(), '$user');";
        if(($category != Null) ){
        $insert=mysqli_query($conn,$sql);

        if($insert){
            echo "<script>window.alert('New Part No. ".$partnumber." is Genrated Successfully!!')</script>";

        }
        }

    ?>

1 个答案:

答案 0 :(得分:0)

您需要了解不同的代码在不同的位置执行。例如:

  • SQL查询在服务器端执行
  • 警报/确认框在客户端(网络浏览器)执行
  • 在服务器端生成客户端执行内容的代码

因此,如果您希望实现以下场景,则需要向服务器发出多个请求:

  1. 用户将数据发布到服务器
  2. 服务器响应数据是重复的(并返回脚本代码以供用户确认)
  3. 执行确认码,用户接受插入重复的
  4. 向服务器发送确认或再次发布数据,并添加&#34;接受重复&#34; flag(通常,如果服务器是无状态的)。
  5. 服务器收到确认/第二个帖子请求,标识它应该接受重复项,并执行相应的SQL查询以进行插入。
  6. 步骤1,3,4发生在客户端。步骤2,5发生在服务器端

    在用户取消的情况下,服务器端代码只是跳过第二个帖子请求。

    因此,您需要在服务器端使用额外的代码来区分这两个请求(这是一个确认请求吗?还是应该允许重复?),并相应地调整其行为。如果用户确认应插入副本,则客户端需要额外的代码才能生成第二个请求。

    当然,如果客户端代码是静态的而不是在服务器端生成(例如谷歌REST HTTP接口),所有这些都会更加清晰但我担心解释这一点只会让你感到困惑。