2016-12-21 3 views
0

Прямо сейчас у меня есть диалоговое окно, которое появляется при нажатии кнопки «Добавить». Есть два входа внутри, которые будут вставлены в базу данных после отправки. Существует раскрывающийся список и поле ввода. Я не хочу, чтобы представление в диалоговом окне могло работать, если значение, которое уже существует в базе данных, вводится в поле ввода. Поэтому в основном я не хочу, чтобы в столбцах Supp_ID были дубликаты записей. Как я могу это сделать? Вот что я до сих пор.Не вставлять в базу данных при вводе Duplicate Record

Диалог Форма:

<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

Смежные вопросы