За последние 24 часа нас посетили 35158 программистов и 1749 роботов. Сейчас ищут 902 программиста ...

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

Тема в разделе "PHP для новичков", создана пользователем viktor72, 8 авг 2017.

Метки:
  1. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Ситуация - в базу вносятся названия фирм. Как исключить возможность повторного внесения в базу?
    PHP:
    1. if(!empty($firm)){
    2.     if(('$row_firm[firm]') !== ($_POST['firm'])){  .....
    Такая конструкция сравнения не работатет. Есть средство?
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а апострофы прям так и расставлены?
     
  3. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    а я и с апострофами и без апострофов и вокруг компьютера станцевал... не помогло...
    Вопрос - можно ли достать из базы слово на русском и сравнить его слова из формы на русском и если они одинаковые то не вносить?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    а с бубном шаманил?
    вдох выдох, и вопрос - что делает ЭТО ('$row_firm[firm]') !==
    --- Добавлено ---
    можно и не доставать, но это другая тема, пока вопрос выше.
     
    viktor72 нравится это.
  5. KasperZzz

    KasperZzz Активный пользователь

    С нами с:
    3 янв 2010
    Сообщения:
    46
    Симпатии:
    4
    Чему равна переменная ?
    Код (Text):
    1. $row_firm
    Если она равна запросу из базы "Той самой фирме которую надо проверить"
    то тогда зачем [firm]?
    И ковычки надо ставить тут ($row_firm['firm'])
     
    viktor72 нравится это.
  6. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    И даже стойку "ласточка" делал...
    --- Добавлено ---
    - это достает из базы данных название фирмы
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    это не достает ничего так как там ничего не вижу кроме строки в скобках, я не вижу там переменной - сказал интерпретатор пхп
     
  8. KasperZzz

    KasperZzz Активный пользователь

    С нами с:
    3 янв 2010
    Сообщения:
    46
    Симпатии:
    4
    Выведи значения переменных. Тоже склоняюсь к тому, что у тебя с ними проблема.
    Так как выражение должно работать.
     
    viktor72 нравится это.
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    просто надо подсветку синтаксиса врубить (с) где будет четко отображаться где
    '$как строка'
    $как переменная
    "$как переменная внутри строки"
    "{$моя быть круче} Алеша"
     
    viktor72 и KasperZzz нравится это.
  10. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    PHP:
    1. while($row_firm = mysqli_fetch_array($query)){
    2. if(!empty($firm)){
    3.     if(($row_firm['firm']) !== ($_POST['firm'])){
    4. $in_firm = "INSERT INTO firm (firm) VALUES ('$firm')";
    более полная версия...
    Проверил print_r - выводит . значит проьлема в сравнении... ранее было сказано что не обязательно делать селект... возможно проверку можно делать на уровне инсерта? как правильно?
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
  12. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Спасибо. жаль стиль мне не понятный... не понимаю что там происходит
    --- Добавлено ---
    возможно с хедером проблема
    PHP:
    1. while($row_firm = mysqli_fetch_array($query)){
    2. if(!empty($firm)){
    3.     if(($row_firm['firm']) !== ($_POST['firm'])){
    4. $in_firm = "INSERT INTO firm (firm) VALUES ('$firm')";
    5. mysqli_query($dsd, $in_firm);
    6. header('Location: '.$_SERVER['REQUEST_URI']);
    7.     }
    8.    
    9. }
    10. }
     
  13. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    А почему нельзя все узнать через один запрос?
    Код (Text):
    1. SELECT COUNT(`id`) FROM `table_name` WHERE `firm`=$_POST['firm'];
    Если вернет 0, значит совпадений нет. Если >0, значит такая фирма уже есть.
     
    viktor72 нравится это.
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    концепция немножко другая, вернет затронутых строк
    rowCount
     
  15. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    А что значит затронутых?
     
  16. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    а можно сделать так? - SELECT firm FROM `table_name` WHERE `firm`=$_POST['firm'];
    то есть напрямую спросить есть ли такое слово в соответствующем поле базы?
     
  17. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    viktor72 и Сереганек нравится это.
  18. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    А, я понял. Странно, я проверял на своей таблице селектом, каунтер сработал верно. Позже посмотрю еще раз. Спасибо.
     
  19. sk-_-

    sk-_- Новичок

    С нами с:
    9 авг 2017
    Сообщения:
    7
    Симпатии:
    2
    Можно вроде как через unique key в таблице это контролировать
    --- Добавлено ---
    Код (Text):
    1. SELECT 1 from table_name WHERE firm_name = $_POST["firmName"]
     
    viktor72 нравится это.
  20. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Дубликаты определяет
    Почему делает INSERT даже если такая фирма уже существует в базе? где я ошибся?
    Замысел такой - если фирмы нет в базе, то фирма вносится, если есть в базе, то не вносится .
    PHP:
    1. $firm5 = $_POST['firm5'];
    2. $sql_proverka = "SELECT count(*) FROM firm WHERE firm = '$firm5'";
    3. $query_proverka = mysqli_query($db, $sql_proverka);
    4. $result_proverka = mysqli_fetch_array($query_proverka);
    5. if($result_proverka[0] == 0){
    6.     $in = "INSERT INTO firm (firm, polzovatel_iddostup) VALUES ('$firm5', '".$_SESSION['admin']."')";
    7.     mysqli_query($db, $in);
    8. echo "такой фирмы нету";
    9. }
    10. else{
    11.     echo 'такая фирма есть';
    12. }
    --- Добавлено ---
    Прошу прощения, на полигоне (тренировочной странице) был ещё один INSERT , который и вносил в базу дублирующийся имена.
    Впрочем если кто то скажет как сделать лучше, скажу спасибо.
     
  21. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Сделай этот столбец уникальным.
     
    acso нравится это.