0

我是 PHP 新手,对数据库非常陌生,如果这是一个愚蠢的问题,请原谅我:

我在 PHP/MySQL 中构建了一个库存系统,允许某人(除其他外)将原材料添加到具有“Price_Per_Pound_In_Dollars”和“Pounds_In_Stock”列的表中。就目前而言,更新原材料的“Pounds-In-Stock”列必须手动完成,通过表格一次一个。

我现在想为包含制作产品所需步骤的食谱添加另一个数据库,以便可以一次更新多个原料的“Pounds_In_Stock”列。请看下图。

在此处输入图像描述

基本上有人会去一个表格,从下拉菜单中选择一个产品(通过执行 a 填充配方名称mysqli_query),输入他们想要制作的加仑数,然后按提交。

配方表中的行包含生产一加仑该产品所需的数字,因此表中的所有数字都将乘以输入表格中的数字。

因此,如果有人选择“配方名称 1”并在加仑输入框中输入“2”。它将“Pounds_Needed_Per_Gallon”乘以 2 并将该信息放入 amysqli_query中以将其从“Raws”表中正确的原始“Pounds_In_Stock”列中删除。(如果这是有道理的)。

现在我的问题:

是否可以动态执行此操作?我是以错误的方式接近这个吗?我知道我可以通过硬编码 PHP 文档中每个配方的值并通过表单页面上的“action =”链接到它来获得我想要的结果,但这似乎是一种非常不雅的做事方式。我似乎无法理解如何使用 MySQL 来做到这一点。

表格问题:

我创建了一个简单的表单,它应该在下拉菜单中包含表名(以便可以选择配方表)。但我似乎无法让表名在下拉列表中回显。我知道while循环工作正常,因为下拉菜单中有三个选项,对应于数据库中的表数,唯一的问题是它们是空白的。请参阅下面的图像和代码。我查看了我的代码几次,但看不到我在哪里犯了错误。有任何想法吗?

<?php

//Prepare MySQL Query.
$Product_Menu_Query ="SHOW TABLES"; 
$Run_Product_Menu_Query = mysqli_query($Connect, $Product_Menu_Query);
?>


<form action="submit.php" method="POST">
    <span>Recipe Name:</span><br>
    <select name="recipe">

        <?php  //Populates dropdown with Product_Name from database. 
        while ($row = mysqli_fetch_array($Run_Product_Menu_Query)) {
        echo '<option value="' . $row[0] . '">' . '</option>';
        }

    ?>
     </select><br><br>
    <span>Gallons:</span><br>
    <input type="number" name="gallons"><br><br>
    <input type="submit" value="Submit">
</form>

表格截图:

在此处输入图像描述

4

1 回答 1

1

看起来你会有这样的东西(根据你的数据库实际字段和表名更改你的表名和字段):

$recipeName = $_POST['recipe'];
$gallons = $_POST['gallons'];

$stmt = $mysqli->prepare("SELECT raws.id as rawId, (recipe.pounds_needed_per_gallon * ?) as gallons
  FROM RecipeName recipe
  JOIN Raws raws on recipe.raw_id=raws.raw_id
  WHERE raws.raw_name = ?");

$stmt->bind_param("ds", $gallons, $recipeName);
$stmt->execute();
$stmt->bind_result($rawId, $gallonsNeeded);
$stmt->close();

mysqli_query("UPDATE Raws set pounds_in_stock = (pounds_in_stock - $gallonsNeeded) where id = $rawId");

编辑:我看到你需要更多的调试帮助。您应该检查通过查询获得的值(即 rawId 和 gallonsNeeded)并回显错误,但由于我没有您的整个代码库,因此我无法准确判断您的代码出了什么问题。

于 2013-08-07T19:01:33.913 回答