私は初心者です、商品ページを作成しました。各カテゴリの一番下には、新しい製品フォームを作成します。これを押すと、製品がデータベースに挿入され、Webページに自動的に表示されます。 (動的に作成)これは完全に機能します。PHP:商品が間違った場所に表示されています(ループが機能していない可能性があります)
私の問題は、私は、「バーガー」カテゴリに新製品を追加しようとした場合、新しく追加された製品は、Webページ上の最後のカテゴリに表示されます例えばです。カテゴリの代わりに私は新しい製品を追加しようとしています
私はなぜこれが起こっているのか混乱しています。私はDBからエコーされたループされた文字列を使用しています。ページ上のすべての情報を作成します。 以下は、製品とカテゴリを生成するために使用しているコードです。
カテゴリー
$REST_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']);
$fc_sel = $dbc->query("SELECT * FROM Food_Cat WHERE Resturant_ID ='$REST_id'");
$fc_sel->data_seek(0);
$i = 1;
while ($fc_output = $fc_sel->fetch_assoc()) {
$fc_run .= $fc_output['Food_Cat_name'] . $fc_output['Food_Cat_Desc'] . '<br>';
$_SESSION['Food_Cat_name'] = $fc_output['Food_Cat_name']; //echo out product name
$_SESSION['Food_Cat_Desc'] = $fc_output['Food_Cat_Desc']; //echo out product desc
$_SESSION['Food_Cat_ID'] = $fc_output['Food_Cat_ID']; //echo out product desc
echo("<form name='first_prod' id='first_prod$i' enctype='multipart/form-data' action='Restaurant_Menu.php' method='POST' accept-charset='utf-8'>");
echo("<div id='input'>");
echo("<input type='text' id='cat_name$i' name='cat_name' class='centre_inp' value='" . $_SESSION['Food_Cat_name'] . " ' placeholder='Category name'>");
echo("<br>");
echo("<input type='text' id='cat_desc$i' name='cat_desc' value='" . $_SESSION['Food_Cat_Desc'] . " ' class='centre_inp' placeholder='Description'>");
echo("</div>");
echo("<br>");
echo("<div id='buts'>");
echo("<input type='submit' id='submit_addon$i' name='submit_addon' value='Submit'>");
echo("<input type='button' id='delete_addon$i' name='delete_addon' value='delete'>");
echo("</div>");
echo("<br>");
echo("<hr id='dotted'>");
echo("<br>");
// ADD NEW ITEM TOGGLE
echo("<p >Menu Item</p>");
製品
mysqli_report(MYSQLI_REPORT_INDEX);
$rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']);
$fc_id = mysqli_real_escape_string($dbc, $_SESSION['Food_Cat_ID']);
$fc_p_id = mysqli_real_escape_string($dbc,$_SESSION['Product_Id']);
$prod_sel = $dbc->query("SELECT * FROM Product WHERE Food_Cat_ID ='$fc_id' AND Resturant_ID ='$rest_id'");
$prod_sel->data_seek(0);
$ii = 1;
while ($output = $prod_sel->fetch_assoc()) {
$prod_run .= $output['Product_Name'] . $output['Product_Desc'] . $output['Product_Price'] . '<br>';
$_SESSION['Product_Name'] = $output['Product_Name']; //echo out product name
$_SESSION['Product_Desc'] = $output['Product_Desc']; //echo out product desc
$_SESSION['Product_Price'] = $output['Product_Price']; //echo out price
echo("<div id='nu_it'>");
echo("<div id='nu_head_name' onclick='toggle_visibility(\"nu_show$ii\")'>");
echo("<p id='products_name'>" . $_SESSION['Product_Name'] . "</p>");
echo("</div>");
echo("<div id='nu_show$ii' class ='hidden'>");
echo("<br>");
echo("<input type='text' id='item_name$ii' name='item_name' value='" . $_SESSION['Product_Name'] . "'>");
echo("<br>");
echo("<textarea id='desc$ii' name='desc' placeholder='Item description' rows='4' maxlength='200'required >" . $_SESSION['Product_Desc'] . " </textarea>");
echo("<br>");
echo("<input type='text' id='price' name='price' value='" . $_SESSION['Product_Price'] . "'>");
echo("<input type='submit' id='add_item' name='add_item' value=''>");
$ii++;
echo("</div>");
echo("</div>");
}
(要求されたとして)新しいアイテムを追加します。
if (isset($_POST['add_item'])) {
$item_name = mysqli_real_escape_string($dbc, $_POST['item_name']);
$desc = mysqli_real_escape_string($dbc, $_POST['desc']);
$price = mysqli_real_escape_string($dbc, $_POST['price']);
$rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']);
$fc_id = mysqli_real_escape_string($dbc, $_SESSION['Food_Cat_ID']);
if ($rest_id < 1) {
$rest_id = 456;
}
// price validate - must be decimal(float)
if (empty($_POST['price']) || !filter_var($_POST['price'], FILTER_VALIDATE_FLOAT) || ($_POST['price'] <= 0)) {
$add_product_errors['price'] = "Please enter a product price";
}
// item name validate
if (empty($_POST['item_name'])) {
$add_product_errors['item_name'] = "Please enter a name";
}
// item name description
if (empty($_POST['desc'])) {
$add_product_errors['desc'] = "Please enter a product description";
}
$query = "INSERT INTO Product(Resturant_ID, Product_Name,Product_Desc,Product_Price,Food_Cat_ID) VALUES (?,?,?,?,?)
ON DUPLICATE KEY
UPDATE
Resturant_ID = ?
,Product_Name = ?
,Product_Desc = ?
,Product_Price = ?
,Food_Cat_ID = ?"; //on duplicate input update row
//var_dump($databaseObject);
$run_query = $databaseObject->prepare($query);
$run_query->bind_param('issdiissdi', $rest_id, $item_name, $desc, $price, $fc_id, $rest_id, $item_name, $desc, $price, $fc_id);
// THIS now executes the above transaction, returns TRUE if successful - issdissd duplicate update
if (!$run_query->execute()) {
$insertError = "There was an error inserting data: " . $run_query->error;
}
print "affected rows:" . $run_query->affected_rows; //how many records affected?
$run_query->free_result(); // Frees memory on completion
$run_query->close(); //closes this action
}
は私がやっていること
- は、私は、エラーハンドラを持つセッション
- を始め、私はテキストのみの正しいと最小量を供給しようとしてい
セッションを印刷
私はあなたのコード内で「新しいアイテムを追加」ボタンが表示されていません。 – Barmar
私たちは、あなたがコードの中でうなずいているのを見ることができます。このルールに従ってください。決して数百万のエコーとHTMLとPHPを混ぜ合わせてはいけません...あなたのHTMLをdivとidで作成してください。 javascriptとjqueryを使ってそれを操作します。 ajaxを使用してPHPに問い合わせ、1つのエコー、返されたPHPの値を使ってHTMLを操作する...今すぐあなたのコードは混乱しています。 – cpugourou
基本的な問題は、ループのたびにセッション変数を上書きすることです。 INSERTクエリを実行するときにセッション変数を使用すると、最後の項目が常に使用されます。カテゴリIDをフォームの非表示フィールドに送信し、データベースを更新するときにカテゴリIDを使用する必要があります。 – Barmar