2016-12-21 96 views
0

现在,我点击一个添加按钮时会弹出一个对话框。内部有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; 
     } 
} 

Insert.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); 


?> 
+1

化妆** Supp_ID列**在数据库中是唯一和使用** UPSERT查询到**避免重复的值。 –

回答

0

使用IGNORE关键字在你的SQL语句。

$sql = "INSERT IGNORE INTO Stage_Rebate_Index (MR_ID, Supp_ID) VALUES (?, '$Supp_ID')";

您将需要修改你的回应检查的影响,而不是查询是否失败的行数。

参见:http://php.net/manual/en/pdostatement.rowcount.php

1

我总是用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

+0

我不想更新,但如果它是重复的,我只想让它返回一个错误 – Rataiczak24

+1

然后,您需要添加一个唯一的索引到您尝试独特的列。如果唯一值已经存在,将会导致错误。 – john