【问题标题】:On submit of form, insert different fields to different MYSQL tables在提交表单时,将不同的字段插入到不同的 MYSQL 表中
【发布时间】:2012-05-12 08:14:38
【问题描述】:

我有一个包含 3 种类型字段的表单:

  1. (2) 提交给“tblCocktail”的文本字段
  2. (4) 选择使用“tblIngredient”中的值填充的字段 并提交给“tblRecipe”
  3. (4) 选择具有提交到“tblRecipe”的预设选项的字段

表单代码(每个“选择红色”和“数量”下拉菜单有 4 个):

<form method="POST" action="addcocktail.php" >
                    Cocktail Name: <input type="text" name="cocktailname" /> 
                    How To: <input type="text" name="howto" /> 
                    <br> 
                    <select id="selectingred1" name="selectingred1">
                      <?php
                      $sql = "SELECT ingredientID, name FROM tblIngredient ".
                      "ORDER BY name";

                      $rs = mysql_query($sql);

                      while($row = mysql_fetch_array($rs))
                      {
                        echo "<option value=\"".$row['ingredientID']."\">".$row['name']."</option>\n  ";
                      }
                      ?>
                    </select>
                    <select id="quantity1" name="quantity1">
                      <option></option>
                      <option>1</option>
                      <option>2</option>
                      <option>3</option>
                      <option>4</option>
                    </select>
                    <br>
<input type="submit" value="add" />
                </form>

addcocktail.php:

 <?php include("databasecon.php"); ?>

<?php
mysql_select_db("mwheywood", $con);

//insert cocktail details
$sql="INSERT INTO tblCocktail (name, howto)
VALUES
('$_POST[cocktailname]','$_POST[howto]')";

$sql2="INSERT INTO tblRecipe (ingredientID, quantity)
VALUES
('$_POST[selectingred1]','$_POST[quantity1]'),
('$_POST[selectingred2]','$_POST[quantity2]'),
('$_POST[selectingred3]','$_POST[quantity3]'),
('$_POST[selectingred4]','$_POST[quantity4]')";



if (!mysql_query($sql,$con))
  {
  die('Error: you fail at life' . mysql_error());
  }
echo "cocktail added";

if (!mysql_query($sql2,$con))
  {
  die('Error: you fail at life' . mysql_error());
  }
echo "ingredients added";

mysql_close($con);

?>

目前这只是将“selectingred4”和“quantity4”值添加到“tblRecipe”中。它忽略了文本框的两个插入,以及前 3 个选择框条目。

我的另一个问题也是我从表单中的 php 中获取“ingredientID”和“名称”,但是当我提交表单时,它也没有将“ingredientID”提交到“tblRecipe”中。

-任何帮助将不胜感激-Matt

【问题讨论】:

    标签: php mysql database forms


    【解决方案1】:

    您不断覆盖您的 SQL 查询,只有最后一个实际存在以执行。这是您的代码的固定版本:

    <?php include("databasecon.php"); ?>
    
    <?php
    mysql_select_db("mwheywood", $con);
    
    //insert cocktail details
    $sql="INSERT INTO tblCocktail (name, howto)
    VALUES
    ('$_POST[cocktailname]','$_POST[howto]')";
    
    if (!mysql_query($sql,$con))
    {
    die('Error: you fail at life' . mysql_error());
    }
    
    //insert recipe details
    $sql="INSERT INTO tblRecipe (ingredientID, quantity)
    VALUES
    ('$_POST[selectingred1]','$_POST[quantity1]')";
    
    $sql="INSERT INTO tblRecipe (ingredientID, quantity)
    VALUES
    ('$_POST[selectingred2]','$_POST[quantity2]')";
    
    $sql="INSERT INTO tblRecipe (ingredientID, quantity)
    VALUES
    ('$_POST[selectingred3]','$_POST[quantity3]')";
    
    $sql="INSERT INTO tblRecipe (ingredientID, quantity)
    VALUES
    ('$_POST[selectingred4]','$_POST[quantity4]')";
    if (!mysql_query($sql,$con))
      {
      die('Error: you fail at life' . mysql_error());
      }
    echo "cocktail added";
    
    mysql_close($con);
    
    ?>
    

    此外,您可以将最后四个查询合并为一个查询:

    <?php include("databasecon.php"); ?>
    
    <?php
    mysql_select_db("mwheywood", $con);
    
    //insert cocktail details
    $sql="INSERT INTO tblCocktail (name, howto)
    VALUES
    ('$_POST[cocktailname]','$_POST[howto]')";
    
    if (!mysql_query($sql,$con))
    {
    die('Error: you fail at life' . mysql_error());
    }
    
    //insert recipe details
    $sql="INSERT INTO tblRecipe (ingredientID, quantity)
    VALUES
    ('$_POST[selectingred1]','$_POST[quantity1]'),
    ('$_POST[selectingred2]','$_POST[quantity2]'),
    ('$_POST[selectingred3]','$_POST[quantity3]'),
    ('$_POST[selectingred4]','$_POST[quantity4]')";
    if (!mysql_query($sql,$con))
      {
      die('Error: you fail at life' . mysql_error());
      }
    echo "cocktail added";
    
    mysql_close($con);
    
    ?>
    

    【讨论】:

    • 它现在可以工作了,我只有一个查询我仍然不确定如何做。将“name”和“howto”提交到我的“tblCocktail”,生成一个“cocktailID”;我希望这个 ID 也被放入从下拉框创建的每个“RecipeID”条目中(每个鸡尾酒最多 4 个),以便它们被链接。
    • (例如 tblRecipe 中的第一个成分条目):recipeID: 1 ,鸡尾酒ID:0,成分ID:5,数量:2 .... 需要从第一个 POST 条目中获取鸡尾酒 ID 到 tblCocktail .
    • 您可能希望将此作为一个单独的问题提出,以便向其显示特定代码并让其他人也帮助您
    【解决方案2】:

    您将INSERT 语句分配给$sql,然后将其丢弃并分配另一个语句,然后再分配另一个,实际上执行最后一个。

    【讨论】:

      【解决方案3】:

      好吧,您必须在每个 $sql sn-p 之后执行 mysql_query,因为每次将 $sql 变量设置为等于某个值时,您都在重新声明它。您可以将它们连接在一起并通过执行 "$sql.=" 一次运行它们并在一个 php 函数中执行多个查询

      【讨论】:

        【解决方案4】:

        您只需继续按顺序将不同的值重新分配给$sql,因此只有最后一个值。每次您通过代码时,所有其他内容都会被覆盖。

        您需要循环数据,在每次传递时使用新数据执行查询,或者使用正确的语法构建查询。

        我还将重新组织表单的结构以允许可变答案。也可能是表格是如何设置的。成分有 ID、描述、价值、成本,可能在哪里可以找到它们和一些注释。食谱有等级、ID、描述和说明。 Recipe_xref 有一个 recipe_id 字段、一个 ingredients_id 字段和一个数量字段。

        这提供了一个非常丰富和动态的数据结构,可以根据需要进行扩展。从那里开始,构建查询以根据需要提取数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 2011-10-06
          • 2017-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多