库存系统多个表和配方

时间:2013-08-07 17:31:59

标签: php mysql

我是PHP的新手,也是数据库的新手,所以请原谅我这是一个愚蠢的问题:

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

我现在想要为包含制作产品所需步骤的配方添加另一个数据库,以便可以同时为多个原始数据更新“Pounds_In_Stock”列。请看下面的图片。

enter image description here

基本上有人会去表格,从下拉菜单中选择产品(通过做mysqli_query填充食谱名称),输入他们想要的加仑数并按提交。

配方表中的行包含加制该产品所需的数字,因此表中的所有数字都将乘以输入到表单中的数字。

因此,如果有人选择“配方名称1”并在加仑输入框中输入“2”。它会将“Pounds_Needed_Per_Gallon”乘以2并将该信息放入mysqli_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>

表单截图:

enter image description here

1 个答案:

答案 0 :(得分: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)并回显错误,但由于我没有完整的代码库,我无法确切地知道您的代码出了什么问题。