Панель навигации MYSQL добавляет категорию в таблицу категорий, но проверяет, существует ли категория

0

Я создал навигационную панель, где храню свои меню на своей веб-странице.

Я создал таблицу для нее под названием categories, и мне удалось добавить к ней категорию с помощью кнопки. Я могу добавить к нему все, но если я что-то добавлю к нему, я хочу проверить, существует ли он в таблице categories. Если это так, то эхо "уже существует". Если нет, вставьте данные.

Я не могу это решить. Спасибо за помощь.

<?php

function addCategory(){
      if(isset($_POST['submit'])){
          global $connection;
          $cat_title = $_POST['cat_title']; 

          if($cat_title == "" || empty($cat_title)){
              echo "this cannot be blank";
          } else {                            
              $query="INSERT INTO categories(cat_title)";// ADD CATEGORIES IN CATEGORIES.PHP //
              $query .= "VALUES ('$cat_title')";
              $result = mysqli_query($connection,$query);

              if(!$result){
                 die('Query failed' . mysqli_error);
              }

          }  
     }
} 

?>
Теги:

3 ответа

0
Лучший ответ

CREATE UNIQUE INDEX cat_title_index Включить категории (cat_title)

Это решило мою проблему :)

1

Лучший способ сделать это - несколько шагов. Один из них изменяет базу данных, чтобы обеспечить соблюдение правила, cat_title столбец cat_title в таблице categories никогда не имеет дубликата.

Документация для первого шага находится здесь, но для чтения этого материала требуется много практики. Это стоит привыкнуть к этому, хотя, если вы планируете использовать MySQL на какое-то время.

Для вас утверждение, вероятно, так же просто, как:

CREATE UNIQUE INDEX cat_title_index ON categories (cat_title)

Вы запускаете эту команду ONCE, и она постоянно изменяет вашу базу данных. У вас может быть визуальный инструмент администрирования базы данных, который вы можете использовать для достижения того же самого.

Как только это будет сделано, у вас никогда не будет двух категорий с одинаковым названием (и поиск по названию будет быстрее).

Затем, когда вы выполняете свой код выше, откуда вы знаете, была ли сделана вставка?

Оказывается, это тоже довольно легко. php имеет возможность проверить, что было вставлено - если ответ равен нулю, тогда ничего не было:

$insertId = mysqli_insert_id($connection);
if ($insertId === 0) {
    // return "already have that category" message
}

Поместите это после того, как вы запустите инструкцию для вставки, и вам хорошо идти.

  • 0
    Благодарю. я попытался запустить команду в меню SQL phpmyadmin. и это говорит. В MySQL сказано: Документация № 1062 - Дублированная запись в виде ключа «cat_title_index».
  • 0
    Это может означать, что у вас уже есть дубликат cat_title. Если это так, вам придется очистить данные, прежде чем вы сможете запустить эту строку. Если вы создадите индекс с помощью графического интерфейса phpmyadmin, вы можете получить более информативное сообщение об ошибке. Я не использовал phpmyadmin в течение многих лет, поэтому я не могу сказать вам конкретно, как это сделать.
Показать ещё 4 комментария
0

вам следует подумать о том, чтобы сделать cat_title UNIQUE в базе данных, а затем уловить приведенное исключение sql

или же:

$result = $mysqli->query("SELECT cat_title FROM 
 categories WHERE category =" +$cat_title);
if($result->num_rows == 0) {
     // insert the new category
} else {
    echo "category exists ";
}

вы можете дополнительно уточнить запрос, используя "like" вместо равного, включая включенные вставляемые категории с ошибками, и покажите пользователю имя категории, которое требуется для вставки или нет. лучший дизайн - сделать функцию1 ($ cat_title), чтобы проверить точное равенство и вернуть логическую и вторую функцию2 ($ cat_title), чтобы проверить с помощью "like% c%", которая возвращает строку или null sinse, возвращаемое значение может быть используется как boolean в PHP, если statment и thired function3 ($ cat_title) для вставки, а затем просто вызывают 3 функции соответственно в модуле (if... else if... else) и уточняют его в блоке else, чтобы задать обратите внимание на то, что вы можете вызывать функции 1 и 2 как условия if и else if и вызывать функцию вставки внутри блока else и внутри блока if else в midle, который вы предложили бы пользователю вставить или нет, и сделать конечную точку вставьте значение.

отправлено с мобильного устройства ни одним носителем английского языка... пожалуйста, переформатируйте

  • 0
    Это создаст потенциальное состояние гонки - возможно, что категория может быть добавлена другим пользователем между проверкой и вставкой. Это действительно маловероятно, и для большинства сайтов, вероятно, это не проблема, но это стоит рассмотреть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню