MYSQL导航栏将类别添加到类别表但检查类别是否已存在

时间:2017-12-18 23:09:44

标签: php mysql

我制作了一个导航栏,用于将菜单存储在我的网页上。

我为它创建了一个名为categories的表,我设法通过一个按钮为它添加一个类别。我可以添加所有内容,但如果我添加一些东西,我想检查它是否已存在于categories表中。如果是,那么echo'已经存在'。如果没有,请插入数据。

我无法解决这个问题。谢谢你的帮助。

<?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 :(得分:1)

最好的方法有两个步骤。一个人更改了数据库本身,以强制执行cat_title表中的categories列永远不会重复的规则。

第一步的文档是here,但阅读这些内容需要大量练习。但是,如果您计划在任何时间内使用MySQL,那么值得习惯它。

对你来说,陈述可能很简单:

CREATE UNIQUE INDEX cat_title_index ON categories (cat_title)

您运行该命令ONCE,它会永久修改您的数据库。您可能拥有可用于完成相同操作的可视化数据库管理工具。

一旦完成,你将永远不会有两个具有相同标题的类别(按标题搜索会更快)。

然后,当您执行上面的代码时,您如何知道插入是否已完成?

事实证明,这也非常简单。 php有a way to check what was inserted - 如果答案为零,则没有任何内容:

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

在运行insert语句后放置它,你就可以了。

答案 1 :(得分:0)

创建UNIQUE INDEX cat_title_index ON类别(cat_title)

这使我的问题得以解决:)

答案 2 :(得分: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 ";
}

您可以使用&#39; like&#39;进一步细化查询。而不是等于包含拼写错误的插入类别,并向用户显示要插入或不插入的类别名称。 更好的设计是使一个函数1($ cat_title)检查确切的相等性并返回一个布尔值和第二个函数2($ cat_title)来检查&#39;如%c%&#39;返回一个字符串或null sinse返回的值可以在PHP中用作boolean如果statment和thired function3($ cat_title)要插入然后简单地分别调用3个函数(if ... else if ... else )时尚并在else块中细化它以询问用户 请注意,您可以将函数1和2作为if和else if条件调用并调用else块内的插入函数,并在midle中的if else块内部,提示用户插入或不插入并插入一个终点价值。

由无英语母语人士从移动设备发送...请重新格式化