在提交表单时,将不同的字段插入到不同的MYSQL表中

时间:2012-05-02 20:01:20

标签: php mysql database forms

我的表单有3种类型的字段:

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

    表格代码(每个“choosered”和“数量”下拉列表中有4x):

    <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);
    
    ?>
    

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

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

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

4 个答案:

答案 0 :(得分: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);

?>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

好吧,你必须在每个$ sql片段之后做一个mysql_query,因为每次你设置它等于某个东西时你重新声明$ sql变量。您可以将它们连接在一起并通过执行“$ sql。=”一次运行它们并在一个php函数中执行多个查询

答案 3 :(得分:0)

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

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

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

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