PHP:项目显示在错误的位置(循环可能无法正常工作)

时间:2016-04-18 23:38:06

标签: php mysql

我是新手,我创建了一个产品页面,产品细分并显示在他们的类别中。在每个类别的底部,他们是一个创建新的产品表单,在按下添加产品插入数据库并自动显示在网页上。 (动态创建)这非常有效。

enter image description here

我的问题是,例如,如果我尝试将新产品添加到“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 
    }

我做了什么

  • 开始了一个会话
  • 我有错误处理程序
  • 选择打印会话的查询

我试图只提供正确和最小量的文字。

1 个答案:

答案 0 :(得分:1)

使用下拉列表显示要从中选择的类别而不是输入,并将选择选项值设置为类别ID,将文本设置为类别名称。

例如:

<select name="Food_Cat_ID">
  <option value="category id goes here">Category name goes here</option>
</select>