2016-04-18 8 views
2

私は初心者です、商品ページを作成しました。各カテゴリの一番下には、新しい製品フォームを作成します。これを押すと、製品がデータベースに挿入され、Webページに自動的に表示されます。 (動的に作成)これは完全に機能します。PHP:商品が間違った場所に表示されています(ループが機能していない可能性があります)

enter image description here

私の問題は、私は、「バーガー」カテゴリに新製品を追加しようとした場合、新しく追加された製品は、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 
    } 

は私がやっていること

  • は、私は、エラーハンドラを持つセッション
  • を始め、私はテキストのみの正しいと最小量を供給しようとしてい

セッションを印刷

  • 選択クエリ。

  • +0

    私はあなたのコード内で「新しいアイテムを追加」ボタンが表示されていません。 – Barmar

    +0

    私たちは、あなたがコードの中でうなずいているのを見ることができます。このルールに従ってください。決して数百万のエコーとHTMLとPHPを混ぜ合わせてはいけません...あなたのHTMLをdivとidで作成してください。 javascriptとjqueryを使ってそれを操作します。 ajaxを使用してPHPに問い合わせ、1つのエコー、返されたPHPの値を使ってHTMLを操作する...今すぐあなたのコードは混乱しています。 – cpugourou

    +1

    基本的な問題は、ループのたびにセッション変数を上書きすることです。 INSERTクエリを実行するときにセッション変数を使用すると、最後の項目が常に使用されます。カテゴリIDをフォームの非表示フィールドに送信し、データベースを更新するときにカテゴリIDを使用する必要があります。 – Barmar

    答えて

    1

    ドロップダウンを使用して、入力の代わりに選択するカテゴリを表示し、選択オプションの値をカテゴリIDおよびテキストをカテゴリ名に設定します。例えば

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

    という商品名の下で、コードが提供されました(申し訳ありませんが間違った用語を使用した可能性があります)。だからあなたはフォームを削除し、代わりにドロップダウを追加することを提案している – Monroe

    関連する問題