我是新手,我创建了一个产品页面,产品细分并显示在他们的类别中。在每个类别的底部,他们是一个创建新的产品表单,在按下添加产品插入数据库并自动显示在网页上。 (动态创建)这非常有效。
我的问题是,例如,如果我尝试将新产品添加到“Burgers”类别中,则新添加的产品将显示在网页的最后一个类别中。而不是我试图添加新产品的类别
我很困惑为什么会这样。我正在使用一个循环字符串,它是从数据库中回显来创建页面上的所有信息。 以下是我用于生成产品和类别的代码。
分类
$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
}
我做了什么
我试图只提供正确和最小量的文字。
答案 0 :(得分:1)
使用下拉列表显示要从中选择的类别而不是输入,并将选择选项值设置为类别ID,将文本设置为类别名称。
例如:
<select name="Food_Cat_ID">
<option value="category id goes here">Category name goes here</option>
</select>