我有一个页面,用户想要在数据库中添加新类别,
我想检查之前是否已经在数据库中添加了类别,如果它是新的,将它添加到数据库,它工作正常,但它添加了很多次(等于表中的数据)我知道它是因为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();
}
答案 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