Вопрос:

Как проверить элементы в базе данных и добавить их, если они новые?

javascript php sql ajax pdo

75 просмотра

3 ответа

66 Репутация автора

У меня есть страница, на которой пользователь хочет добавить новую категорию в базу данных, я хочу проверить, добавлена ​​ли ранее категория в базу данных или нет, если она новая, добавьте ее в базу данных, она работает нормально, но добавляет его много раз (соответствует данным в таблице), я знаю, что это из-за того 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();
        }
Автор: New at Leaflet Источник Размещён: 02.02.2017 12:54

Ответы (3)


4 плюса

16591 Репутация автора

Решение

Попробуй это:

<?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хорошо знаю , в этом коде могут быть некоторые синтаксические ошибки.

Автор: Titus Размещён: 02.02.2017 12:59

0 плюса

461 Репутация автора

Вы можете сделать Category_Name в своей базе данных как индекс уникальным, чтобы база данных не могла вставить дублированную гриву. и в вашем инерте SQl добавить на ключ дубликата

Exemple

Автор: Barkati.med Размещён: 02.02.2017 01:03

1 плюс

11 Репутация автора

Логика неверна. Вы находите все существующие категории и затем вставляете одну строку для каждой, которая не соответствует категории, которую вы даете. Вам нужно добавить предложение where в SQL, чтобы выбрать только те строки, которые соответствуют вашей категории, и тогда он либо вернет одну строку, когда категория существует, либо ни одной, если ее нет. Оставшийся код должен вставлять только тогда, когда количество строк равно нулю.

Автор: Derek Macrae Размещён: 02.02.2017 01:03
Вопросы из категории :
32x32