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

问题描述 投票:0回答:3

我做了一个导航栏,我将菜单存储在我的网页上。

我为它创建了一个名为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);
              }

          }  
     }
} 

?>
php mysql
3个回答
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语句后把它放好,你就可以了。


0
投票

CREATE UNIQUE INDEX cat_title_index ON类别(cat_title)

这使我的问题解决了:)


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”而不是等于包含拼写错误的插入类别来进一步细化查询,并向用户显示要插入或不插入的类别名称。一个更好的设计是使一个function1($ cat_title)检查确切的相等并返回一个布尔值和第二个function2($ cat_title)来检查'like%c%'返回一个字符串或null sinse返回的值可以是如果将statment和thired function3($ cat_title)插入然后简单地在一个(if ... else if else)方式中调用3个函数并在else块中对其进行细化以询问,则在PHP中用作布尔值用户注意,您可以将函数1和2作为if和else if条件调用并调用else块内的插入函数,并在midle中的if else块内部,提示用户插入或不插入并设置一个终点插入值。

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

© www.soinside.com 2019 - 2024. All rights reserved.