2

3種類のフィールドを持つフォームがあります:

  1. (2) 「tblCocktail」に送信するテキスト フィールド
  2. (4) 「tblIngredient」からの値が取り込まれたフィールドを選択し、「tblR​​ecipe」に送信します
  3. (4) 「tblR​​ecipe」に送信する、事前設定されたオプションを持つフィールドを選択します

フォーム コード (「selectingred」と「quantity」の各ドロップダウンが 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」の値を「tblR​​ecipe」に追加するだけです。テキスト ボックスの 2 つの挿入と、最初の 3 つの選択ボックス エントリは無視されます。

私のもう1つの問題は、フォームのphpから「ingredientID」と「name」を取得していることですが、フォームを送信すると、「ingredientID」が「tblR​​ecipe」にも送信されません。

-何か助けていただければ幸いです-マット

4

4 に答える 4

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

?>

さらに、最後の 4 つのクエリを 1 つのクエリに結合できます。

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

?>
于 2012-05-02T20:05:26.207 に答える
0

$sql スニペットごとに mysql_query を実行する必要があります。これは、何かに等しく設定するたびに $sql 変数を再宣言しているためです。「$sql.=」を実行することで、それらをすべて連結して一度に実行し、1 つの php 関数で複数のクエリを実行できます。

于 2012-05-02T20:06:38.183 に答える
0

に異なる値を順番に再割り当てし続けるだけな$sqlので、最後の値だけが残ります。他のすべては、コードを通過するたびに上書きされます。

データをループして、各パスで新しいデータを使用してクエリを実行するか、適切な構文でクエリを作成する必要があります。

また、さまざまな回答を可能にするために、フォームの構造を再編成します。また、テーブルがどのように設定されているかかもしれません。成分には、ID、説明、値、コスト、おそらくそれらが見つかる場所、およびいくつかのメモがあります。レシピには、評価、ID、説明、および指示があります。Recipe_xref には、recipe_id フィールド、material_id フィールド、および数量フィールドがあります。

これにより、必要に応じて拡張できる非常にリッチで動的なデータ構造が得られます。そこから、必要に応じてデータをプルするためのクエリを作成するだけです。

于 2012-05-02T20:08:49.840 に答える
0

INSERTステートメントを割り当て$sqlてから破棄し、別のステートメントを割り当て、さらに別のステートメントを割り当て、実際には最後のステートメントのみを実行します。

于 2012-05-02T20:06:20.883 に答える