javascript - 输入重复记录时不插入数据库

标签 javascript php ajax validation

现在,单击“添加”按钮时会弹出一个对话框。里面有 2 个输入,提交后将被插入到数据库中。有一个下拉列表和一个输入框。如果在输入框中输入数据库中已存在的值,我不希望对话框上的提交能够正常工作。所以基本上,我不希望 Supp_ID 列中有任何重复记录。我怎样才能做到这一点?这是我到目前为止所拥有的。

对话框形式:

<div id="dialog-form" title="Add Supplier ID">
  <p class="validateTips">All form fields are required.</p>

<!-- Dialog box displayed after add row button is clicked -->
  <form >
    <fieldset>
      <label for="mr_id">MR_ID</label>
      <select name="mr_id" id="mr_id_dialog" class="text ui-widget-content ui-corner-all" value="300">
          <?php foreach($user1->fetchAll() as $user2) { ?>
            <option>
                <?php echo $user2['MR_ID'];?>
            </option>
        <?php } ?>
      </select><br><br>
      <label for="supplier_id">Supplier ID</label>
      <input type="text" name="supp_id" id="supplier_id" class="text ui-widget-content ui-corner-all" value="99">

      <!-- Allow form submission with keyboard without duplicating the dialog button -->
      <input type="submit" id="submit" tabindex="-1" style="position:absolute; top:-1000px">
    </fieldset>
  </form>
</div>

JavaScript:

$("document").ready(function() {
        $('#submit').submit(function() {
                processDetails();
                return false;
        });
});

function processDetails() {
        var errors = '';

        // Validate Supp ID
        var supplier = $("#supplier_id [name='supp_id']").val();
        if (supplier == "null" || supplier == "") { // check for empty value
                errors += ' - Please enter a different Supplier ID\n';
        }
        // MORE FORM VALIDATIONS
        if (errors) {
                errors = 'The following errors occurred:\n' + errors;
                alert(errors);
                return false;
        } else {
                // Submit form via Ajax and then reset the form
                $("#submit").ajaxSubmit({success:showResult}).resetForm();
                return false;
        }
}

function showResult(data) {
        if (data == 'save_failed') {
                alert('ERROR. Your input was not saved.');
                return false;
        } else if (data == 'save_failed_duplicate') {
                alert('ERROR. Input data already exists.');
                return false;
        } else {
                alert('SUCCESS. Your input data has been saved.');
                return false;
        }
}

插入.php

<?php
$MR_ID = $_POST['MR_ID'];
$Supp_ID = $_POST['Supp_ID'];

  $host="xxxxxxxx"; 
  $dbName="xxxx"; 
  $dbUser="xxxxxxxxxxx"; 
  $dbPass="xxxxxxxxx";

  $pdo = new PDO("sqlsrv:server=".$host.";Database=".$dbName, $dbUser, $dbPass);
  $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );


$check_sql = "SELECT Supp_ID FROM Stage_Rebate_Index WHERE Supp_ID = '$Supp_ID'";
$check_sql_query = sqlsrv_query($check_sql, $dbh);
if (sqlsrv_num_rows($check_sql_query) > 0) {
        echo "save_failed_duplicate";
        @sqlsrv_close($dbh);
        return;
} else {
    if (sqlsrv_num_rows($check_sql_query) == 0) {
        $sql = "INSERT INTO Stage_Rebate_Index (MR_ID, Supp_ID) VALUES (?, '$Supp_ID')";
        if (@sqlsrv_query($sql, $dbh)) {
                echo "success";
                @sqlsrv_close($dbh);
                return;
        } else {
                echo "save_failed";
                @sqlsrv_close($dbh);
                return;
        }
    }
}

  $stmt = $pdo->prepare($sql);
  $result = $stmt->execute(array($MR_ID, $Supp_ID));
  echo json_encode($result);


?>

最佳答案

如果我想更新时间戳或其他内容,我总是使用ON DUPLICATE KEY UPDATE

$sql = "INSERT INTO Stage_Rebate_Index (MR_ID, Supp_ID) VALUES (?, '$Supp_ID') ON DUPLICATE KEY UPDATE `MR_ID` = `MR_ID`";

基本上,它会尝试插入记录,但如果键存在,它会更新您需要的任何数据。在上面的示例中,它只是将 MR_ID 更新为原始 MR_ID

这是与此类似的上一个问题:Link

这里是Mysql手册的链接:Link

关于javascript - 输入重复记录时不插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41269909/

相关文章:

javascript - 在 Rails 和 Javascript 之间格式化时间——避免跨语言重复代码

javascript - 生成列表中的 $_GET 在显示页面上未定义

php - 使用 ajax 或普通表单操作进行有/无 Javascript 表单提交

javascript - 如何通过javascript跨域?

PHP 数组到 javascript 的转换改变了索引值

php - 如何在 php 中循环更新查询并显示它,使其像日志历史记录一样

javascript - jQuery Ajax 如何告诉 jquery 在哪里附加从 Ajax 调用返回的 html 数据

javascript - 字符串在附加时被解释为 HTML 标记

javascript - 在内部点击时隐藏弹出窗口

javascript - 如何重置函数范围外的数组