如何检查数据库中的项目并添加新项目?

时间:2017-02-02 12:54:42

标签: javascript php sql ajax pdo

我有一个页面,用户想要在数据库中添加新类别, 我想检查之前是否已经在数据库中添加了类别,如果它是新的,将它添加到数据库,它工作正常,但它添加了很多次(等于表中的数据)我知道它是因为foreach,它是如何完成的?还有如何警告用户它已经存在?

Php代码:

  <?php
    include_once "connect.php";

    $stmt ="SELECT distinct Category_Name FROM Categories";

    foreach ($conn->query($stmt) as $row) 
    {
        if ($row['Category_Name'] != $_POST["CatName"])
        {
            $sql ="INSERT INTO Categories (Category_Name) VALUES (:CatName)";

            $result=$conn->prepare($sql);
            $result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_INT);
            $result->execute();
        }
        else
        {
            return false;
        }
    }

?>

Javascript代码:

function AddNewCategory()
{
  var CatName=document.getElementById("CatNametxt").value;
  $.ajax({
            type:"POST",
            url:"add_category.php",
            data:'CatName=' + CatName,
            success: function(data)
            {
                alert("Category Added Successfully!");
            }
        })
}

EDIT1 我将其更改为以下内容并且工作正常,但是如何提醒用户之前已插入此类别?

$stmt ="SELECT * FROM Categories WHERE Category_Name='".$_POST["CatName"]."'";
$queryresult = $conn->query($stmt)->fetchAll(PDO::FETCH_ASSOC);
if (count($queryresult) == 0)
        {
            $sql ="INSERT INTO Categories (Category_Name) VALUES (:CatName)";
            $result=$conn->prepare($sql);
            $result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_INT);
            $result->execute();
        }

3 个答案:

答案 0 :(得分:4)

试试这个:

<?php
    include_once "connect.php";

    $stmt ="SELECT distinct Category_Name FROM Categories";
    $exists = false;
    foreach ($conn->query($stmt) as $row) {
        if ($row['Category_Name'] == $_POST["CatName"]) {
            $exists = true;
        }
    }
    if(!$exists) { // The category doesn't exist.
        $sql ="INSERT INTO Categories (Category_Name) VALUES (:CatName)";

        $result=$conn->prepare($sql);
        $result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_INT);
        $result->execute();
    }
    return $exists;
?>

我们的想法是浏览所有类别,以确定用户定义的类别是否存在。

现在就是这样。每次数据库中的类别都没有相同名称时,您的代码就会插入新类别。

您也可以这样做:

$result=$conn->prepare("SELECT COUNT(Category_Name) as total FROM Categories WHERE Category_Name = (:CatName)");
$result->bindparam(':CatName', $_POST["CatName"], PDO::PARAM_STR);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
    $exists = $row["total"] > 0;
}

我不太了解PHP,我的代码中存在一些语法错误。

答案 1 :(得分:1)

逻辑错误。您正在查找所有现有类别,然后为每个与您提供的类别不匹配的类插入一行。您需要向SQL添加where子句以仅选择与您的类别匹配的行,然后在类别存在时返回一行,否则返回none。剩下的代码应该只插入行数为零。

答案 2 :(得分:0)

您可以在数据库中创建Category_Name作为索引唯一因此数据库无法插入重复的鬃毛。并在您的惯性SQl添加ON DUPLICATE KEY

Exemple