Прекратить добавление повторяющихся записей в базу данных PHP SQLITE - PullRequest
0 голосов
/ 02 декабря 2018

Я создал форму PHP, которая добавляет базу данных, которую я создал на PHP, однако я пытаюсь добавить функцию, которая не дает пользователю добавлять те же фрукты в базу данных, как бы я попытался это сделатькак я пытался сделать это некоторое время, спасибо.

Как вы можете видеть ниже, PHP-скрипт отлично работает, добавляя переменные в базу данных, однако, когда дело доходит до реализации проверки, чтобы убедиться, что имя фруктане соответствует ни одному из базы данных, я уже борюсь.

 <?php
    //SQLite Database test query
    $db=sqlite_open("fruitshop.db"); 

    if(isset( $_POST['fruit']) && strcmp($_POST['fruit'],"") != 0 ){ //Adds to Database

        $item = sqlite_escape_string($_POST["fruit"]);

        $number=$_POST['number'];


        sqlite_query($db,"INSERT INTO fruit (fruit) VALUES ('$item')");
        sqlite_query($db,"INSERT INTO stock (Number) VALUES ($number)");

        $query = "SELECT * from stock, fruit WHERE stock.Item = fruit.id AND fruit.fruit = '$item', 'fruit' = '{$item}'";
        $result=sqlite_query($db, $query);





        echo "<table border=1>";
        echo "<tr><th>Fruit</th><th>Qty</th>";
        echo "<h2>". "Newly added Fruit"."</h2>";
        while($row=sqlite_fetch_array($result,SQLITE_ASSOC ))
        {
            echo "<tr>";
             echo "<td>" . $row['fruit.fruit'] . "</td><td>" . $row['stock.Number'] . "</td>"; 
           echo "</tr>";
        }
        echo "</table>";
    echo "<h2>". "Show All Fruits"."</h2>";

    echo "<table border=1>\n";



    //NOte the use of SQLITE_ASSOC
    echo "</br>\n";


    $result=sqlite_query($db,"SELECT * from stock, fruit WHERE stock.Item = fruit.ID"); //Shows Databse

    echo "<th>Fruit</th><th>Qty</th>\n";

    while($row=sqlite_fetch_array($result,SQLITE_ASSOC))
    {
        echo "<tr>\n";
        echo "<td>" . $row['fruit.fruit'] . "</td>\n"; 
        echo "<td>" . $row['stock.Number'] . "</td>\n"; 
       echo "</tr>\n";
    }
    echo "</table>\n";




    }
    sqlite_close($db);


    ?>

    <html>
    <h2> Add Fruits to Database </h2>
    <form name="CheckFruit" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
    Fruit
    <input type="text" name="fruit" />
    <br>
    Stock
    <input type="number" name="number" />
    <br>

    <input type="submit" value="Submit" />
    </form> 



    </html>

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вы можете использовать мой обновленный код.Не удалось попробовать код, но он должен работать.Также обратите внимание, как я использовал empty вместо strcmp.Это более элегантный код PHP.

<?php
    //SQLite Database test query
    $db=sqlite_open("fruitshop.db"); 

    if(isset( $_POST['fruit']) && !empty($_POST['fruit']) ){ //Adds to Database

        $item = sqlite_escape_string($_POST["fruit"]);

        $number = $_POST['number'];


        $test = sqlite_query($db, "SELECT * FROM fruit WHERE (fruit = '$item')");

        if(sqlite_num_rows($test) == 0){

            sqlite_query($db,"INSERT INTO fruit (fruit) VALUES ('$item')");
            sqlite_query($db,"INSERT INTO stock (Number) VALUES ($number)");

        } else {
            // Just in case you want this too.
            // echo "This database already contains a fruit called {$_POST['fruit]'}";
        }

        $query = "SELECT * from stock, fruit WHERE stock.Item = fruit.id AND fruit.fruit = '$item', 'fruit' = '{$item}'";
        $result=sqlite_query($db, $query);





        echo "<table border=1>";
        echo "<tr><th>Fruit</th><th>Qty</th>";
        echo "<h2>". "Newly added Fruit"."</h2>";
        while($row=sqlite_fetch_array($result,SQLITE_ASSOC ))
        {
            echo "<tr>";
             echo "<td>" . $row['fruit.fruit'] . "</td><td>" . $row['stock.Number'] . "</td>"; 
           echo "</tr>";
        }
        echo "</table>";
    echo "<h2>". "Show All Fruits"."</h2>";

    echo "<table border=1>\n";



    //NOte the use of SQLITE_ASSOC
    echo "</br>\n";


    $result=sqlite_query($db,"SELECT * from stock, fruit WHERE stock.Item = fruit.ID"); //Shows Databse

    echo "<th>Fruit</th><th>Qty</th>\n";

    while($row=sqlite_fetch_array($result,SQLITE_ASSOC))
    {
        echo "<tr>\n";
        echo "<td>" . $row['fruit.fruit'] . "</td>\n"; 
        echo "<td>" . $row['stock.Number'] . "</td>\n"; 
       echo "</tr>\n";
    }
    echo "</table>\n";




    }
    sqlite_close($db);


    ?>

    <html>
    <h2> Add Fruits to Database </h2>
    <form name="CheckFruit" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
    Fruit
    <input type="text" name="fruit" />
    <br>
    Stock
    <input type="number" name="number" />
    <br>

    <input type="submit" value="Submit" />
    </form> 



    </html>
0 голосов
/ 02 декабря 2018

Вы можете объявить столбец фруктов как UNIQUE в своей схеме столбцов, поэтому база данных отклонит дублирующее значение без дополнительных элементов управления на вашей стороне.

Если вместо этого вы хотите проверить, присутствует ли значение уже вВаш PHP-код, вы можете сделать запрос для этого значения и проверить, возвращаются ли строки.Если строки возвращены, значение уже присутствует, и вы можете справиться с этой ситуацией перед выполнением вставок

$query = "SELECT * from fruit WHERE fruit.fruit = '$item', 'fruit' = '{$item}'";
$result=sqlite_query($db, $query);
if (sqlite_num_rows($result) === 0) {
    sqlite_query($db,"INSERT INTO fruit (fruit) VALUES ('$item')");
    sqlite_query($db,"INSERT INTO stock (Number) VALUES ($number)");
} else {
    // Value is already present
}

Примечание: я никогда не использовал SQLITE, поэтому я надеюсь, что синтаксис правильный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...