2017-02-10 20 views
0

私は2つのwhileループを自分のPHPコードで持っています。最初のものは、食事の成分を表示するためのボタン/テーブル形式で印刷します。 2番目のwhileループは、要素を選択リストに入れます。しかし、コードを実行すると、最初のwhileループのみが正常に実行され、2番目のループは正常に実行されません。PHP:2回目のループは実行されませんか?

最初のwhileループがリストを入力し、2番目がリストを画面に出力する順序を逆にしてみました。テーブルが印刷されないうちに、オプションメニューが表示されたので、オプションコードを書いてもうまくいきませんでした。

何がありますか?なぜこのコードで2 whileループを作れないのですか?私は他の人がループ内でループを行うのを見たので、なぜこのコードが実行に失敗しているのかわかりません。

<?php 
    if (isset($_POST['view_meal'])){ 
     $meal = (string)$_POST['meal_names']; 
     $meal_fk_q = "SELECT item 
         FROM meal_ingredients 
         WHERE meal_name='$meal' 
         ORDER BY item"; 
     $meal_fk_c = $conn->query($meal_fk_q); 
     echo "<div class='view_meal_table_wrapper'>"; 
     while ($row = $meal_fk_c->fetch_assoc()){ 
      $view_ingredient = $row['item']; 
      echo "<table class='view_meal_table'> 
         <tr> 
         <td class='view_meal cell'>$view_ingredient</td> 
         </tr> 
        </table>"; 
     } 
     echo "</div>"; 
     echo "<form action='createmeal.php' method='post'> 
       <select name='remove_ingredients' placeholder='meals'> 
       <option disabled selected value> -- Remove Ingredient -- </option>"; 

       while ($row = $meal_fk_c->fetch_assoc()){ 
       $view_ingredient = $row['item']; 
       echo "<option>" . $view_ingredient . "</option>"; 
       } 

     echo "</select> 
       <input type='submit' name='remove_ingredient' value='Remove Ingredient'>"; 
    } 
?> 
+4

あなたのループが、彼らは順番に実行し、ネストされていません。最初のループは結果を使い果たし、2番目のループには何も残らないようにします。 – fafl

答えて

2

としては、すでに最初のwhileループがあなたのデシベルからすべてレコードを受け取り、コメントで述べています。だからこそ2番目のwhileループは何もないが取り出されます。

echo "<div class='view_meal_table_wrapper'>"; 
$option_string = ''; // string with `options` 
while ($row = $meal_fk_c->fetch_assoc()){ 
    $view_ingredient = $row['item']; 
    echo "<table class='view_meal_table'> 
       <tr> 
       <td class='view_meal cell'>$view_ingredient</td> 
       </tr> 
      </table>"; 
    // add `option` markup to string 
    $option_string .= "<option>" . $view_ingredient . "</option>"; 
} 
echo "</div>"; 
echo "<form action='createmeal.php' method='post'> 
     <select name='remove_ingredients' placeholder='meals'> 
     <option disabled selected value> -- Remove Ingredient -- </option>"; 
echo $option_string; // echo options here 
echo "</select> 
     <input type='submit' name='remove_ingredient' value='Remove Ingredient'>"; 
+0

ここにあるすべてのコメントの中で、あなたの答えは実装するのが最も簡潔で簡単でした。私もあなたのコード/バージョンを試して、それは働いた。助けや他のみんなに感謝します。 – Shawn

0

最初に結果セットがトラバースを完了し、データが二whileループで横断する残っていないが存在している間に:私はあなたが一つに両方のループに参加することをお勧めします。

解決策は、結果セットを格納し、後でforeachループに使用することです。

<?php 
    if (isset($_POST['view_meal'])){ 
    $meal = (string)$_POST['meal_names']; 
    $meal_fk_q = "SELECT item 
      FROM meal_ingredients 
      WHERE meal_name='$meal' 
      ORDER BY item"; 
    $meal_fk_c = $conn->query($meal_fk_q); 
    echo "<div class='view_meal_table_wrapper'>"; 

    $data = array(); 
    while ($row = $meal_fk_c->fetch_assoc()){ 
     $data = $row; 
     $view_ingredient = $row['item']; 
     echo "<table class='view_meal_table'> 
      <tr> 
      <td class='view_meal cell'>$view_ingredient</td> 
      </tr> 
     </table>"; 
    } 
    echo "</div>"; 
    echo "<form action='createmeal.php' method='post'> 
     <select name='remove_ingredients' placeholder='meals'> 
     <option disabled selected value> -- Remove Ingredient -- </option>"; 

     foreach($data as $row) 
     { 
      $view_ingredient = $row['item']; 
      echo "<option>" . $view_ingredient . "</option>"; 
     } 

    echo "</select> 
     <input type='submit' name='remove_ingredient' value='Remove Ingredient'>"; 
    } 
?> 
0

$meal_fk_c->fetch_assoc()に渡すリソースの結果は、参照によって行われます。 $meal_fk_c->fetch_assoc()をもう一度使用する前に、ポインタの位置をリセットする必要があります。ポジションの使用をリセットするには

mysql_data_seek()

または代替

$arrayVals = array(); 
$result = mysql_query(/* Your query */); 
while($row = mysql_fetch_assoc($result)){ 
    $arrayVals[] = $row; 
} 

// Now loop over the array twice instead 

$len = count($arrayVals); 
for($x = 0; $x < $len; $x++) { 
    $row = $arrayVals[$x]; 

    // Do something here  
} 

$len = count($arrayVals); 
for($x = 0; $x < $len; $x++) { 
    $row = $arrayVals[$x]; 

    // Do something else here 
} 
関連する問題