За последние 24 часа нас посетили 18700 программистов и 1705 роботов. Сейчас ищут 946 программистов ...

Как исключить дублрование внесения данных в базу

Тема в разделе "PHP и базы данных", создана пользователем davidoff, 28 авг 2015.

  1. davidoff

    davidoff Guest

    Как исключить повторное внесение данных в базу mysql?
    Есть такой код:


    Код (PHP):
    1. <?php
    2. if ($_POST) 
    3. { 
    4.     
    5.     $kan = isset($_POST['kandidat']) ? (int)$_POST['kandidat'] : null; 
    6.     $vak = isset($_POST['firm']) ? (int)$_POST['firm'] : null; 
    7.     if ( $vak && $kan ) 
    8.     { 
    9.         mysql_query("INSERT INTO `vak_kan`(id_vak, id_candidat) VALUES ('$vak', '$kan')"); 
    10.     } 
    11. } 
    12.  
    13. ?> 
    14. <form action="<?php $_SERVER['PHP_SELF']?>" method="post">
    15. <select name="firm">
    16. <?php
    17.     $selct = mysql_query("SELECT 
    18.                 vakans.id_vak, vakans.koment, vakans.id_firm, vakans.id_dol, 
    19.                 firm.id_firm, firm.name_firm,
    20.                 dolzgnost.id_dol, dolzgnost.name_dol 
    21.                 FROM vakans, firm, dolzgnost 
    22.                 WHERE vakans.id_firm = firm.id_firm AND vakans.id_dol = dolzgnost.id_dol 
    23.                 ORDER BY name_firm");
    24.  
    25. while($res = mysql_fetch_array($selct)){
    26.  
    27.     echo "<option value='".$res['id_vak']."'>".$res['name_firm']." , ".$res['name_dol']."</option>";
    28. }
    29. ?>
    30. </select>  Фирма, вакансия<br><br> 
    31.  
    32. <select name="kandidat">
    33. <?php
    34.     $selct2 = mysql_query("SELECT id_candidat, rezum_txt FROM kandidat");
    35.                 
    36.  
    37. while($res2 = mysql_fetch_array($selct2)){
    38.  
    39.     echo "<option value='".$res2['id_candidat']."'>".$res2['rezum_txt']."</option>";
    40. }
    41. ?>
    42. </select> Кандидат<br>
    43. <p><input type="submit" name="send" value="Прикрепить кандидата к вакансии "></p>
    44. </form>
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    создать уникальные поля в БД и "+" INSERT IGNORE :)
     
  3. davidoff

    davidoff Guest

    таблица vak_can выглядит так:
    id_vak unsigned
    id_candidat unsigned

    в данную аблицу вносится запись. она связана с двумы другими таблица "vak" и "candidat" из них подтягиваются значения а вносится в таблицу vak_can .
    но все равно вносятся с одинаковыми значениями
    id_vak unsigned 1 1 1 1 1
    id_candidat unsigned 2 2 2 2 2
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Сочетания этих двух полей должны быть уникальными? Добавь уникальный индекс на два поля сразу.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    уникальный ключ не даст появиться дубликатам
    Код (Text):
    1. ALTER TABLE vak_can ADD UNIQUE KEY(id_vak, id_candidat)
    перед этим необходимо удалить уже существующие повторы.

    Добавлено спустя 3 минуты 26 секунд:
    Кстати, у таблицы есть первичный ключ? Может быть стоит удалить его, а эту парочку объявить первичным ключем.
     
  6. davidoff

    davidoff Guest

    Получилось ! Но есть проблема - когда хочу удалить на странице одну запись , скажем - id_vak 1, id_candidat 10 , удаляются в таблице все записи id_candidat 1 . хочу сделать чтоб удалялась одна запись. Как сделать?
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Покажи запрос
     
  8. davidoff

    davidoff Guest

    рассказываю всё:

    таблицы:
    vak_kan
    id_vak int(5) unsigned
    id_candidat int(10) unsigned
    оба поля сделал уникальными вместе

    таблица vak (связана с таблицей vak_kan внешним ключом)
    id_vak int(5) unsigned auto_increment
    koment varchar (250)

    таблица candidat (связана с таблицей vak_kan внешним ключом)
    id_candidat int(10) unsigned auto_increment
    rezum_txt varchar (250)

    страница с кнопкой удалить:
    Код (PHP):
    1. <?php
    2. echo 'Подобранные кандидаты:';
    3. $selct2 = mysql_query("SELECT 
    4.                         vak_kan.id_vak, vak_kan.id_candidat,  
    5.                         kandidat.id_candidat, kandidat.rezum_txt, 
    6.                         vakans.id_vak 
    7.                         FROM vak_kan, kandidat, vakans 
    8.                         WHERE vak_kan.id_vak=vakans.id_vak 
    9.                         AND vak_kan.id_candidat=kandidat.id_candidat 
    10.                         AND vakans.id_vak = '$id_firm'");
    11. echo '<table border="1" cellspacing="0" cellpadding="5">';
    12. while($res2 = mysql_fetch_assoc($selct2))
    13. {
    14.     echo '<tr>';
    15.     echo '<td>';
    16.     echo $res2['rezum_txt'];
    17.     echo '</td>';
    18.     echo "<td><a href='delit/delvk.php?del=".$res2[id_candidat].", ".$res2[id_vak]."'>удалить</a></td>";
    19.     echo '</tr>';
    20. }
    21. echo '</table>';
    22. ?>
    страница обработки удаления:
    Код (PHP):
    1. $del = $_GET['del'];
    2. if (isset($del)) {
    3.  
    4. $del2 = mysql_query('DELETE FROM vak_kan WHERE id_vak AND id_candidat = "'.$_GET['del'].'"');
    5.  
    6.     
    7.     
    8.     if ($del2) {
    9.         echo "<p>Кандидат удален</p>";
    10.         
    11.     } 
    12.     else {
    13.         echo "<p>Произошла ошибка.</p>";
    14.     }
    15.     } 
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Первый параметр в условии ничему не равен.
     
  10. davidoff

    davidoff Guest

    убрал - vak_kan.id_vak, не помогло. проблема в этой строке -
    Код (Text):
    1. echo "<td><a href='delit/delvk.php?del=".$res2[id_candidat].", ".$res2[id_vak]."'>удалить</a></td>";
    а может ещё глубже
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Надо не убирать, а задать.
     
  12. davidoff

    davidoff Guest

    да, в саму таблицу я могу добавить id и тогда будет без проблем удалятся, но как тогда сделать чтоб не вносить случайно повторяющюся информацию?
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ты в запросе должен указать второе условие, если хочешь чтобы не удалялись все строки где первое условие сработало
     
  14. davidoff

    davidoff Guest

    Спасибо! Сам дошел уже. Спасибо, так и сделал!