php中的嵌套循环与预期的不同


Nested loop in php works differently than expectd

我试图在循环上检索MySQL数据。但只有第一个显示了数据。其他的则是空的。这是它现在的工作方式-

链接

下面是我的代码:

<?php
for ($i = 1; $i <= $quantity; $i++) {
    echo'
        <tr>
            <!-- <td><input class="case" type="checkbox"/></td> -->                         
            <td><input type="text" data-type="productCode" name="itemNo[]" id="itemNo_1" class="form-control autocomplete_txt" autocomplete="off" placeholder="Enter IMEI number"></td>
            <td><select name="brand[]"  class="form-control autocomplete_txt">';
    while ($row = mysqli_fetch_array($result_brand)) {
        echo '<option value="' . $row['brand'] . '">' . $row['brand'] . '</option>';
    }
    echo'  </select> </td> <td><select name="model[]"  class="form-control autocomplete_txt" >';
    if (mysqli_num_rows($result_model) > 0) {
        // output data of each row
        while ($row_model = mysqli_fetch_assoc($result_model)) {
            echo ' <option value="' . $row_model['model'] . '">' . $row_model['model'] . '</option>';
        }
    }
    echo'   
        </select>                       
        </td>
        <td><input type="text" data-type="productName" name="brand[]" id="itemName_1" class="form-control autocomplete_txt" autocomplete="off" placeholder="Brand"></td> 
        <td><input type="text" data-type="productName" name="model[]" id="itemName_2" class="form-control autocomplete_txt" autocomplete="off" placeholder="Model"></td> 
        <td><input type="number" name="price[]" id="price_1" class="form-control changesNo" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;"></td>
        <td><input type="number" value="1" name="quantity[]" id="quantity_1" class="form-control changesNo" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;" disabled></td>
        <!-- <td><input type="number" name="total[]" id="total_1" class="form-control totalLinePrice" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;" disabled></td> -->                             
    </tr>
    ';
}
?>
我不确定到底是什么问题。

问题是您的mysqli结果的游标在while循环运行一次后指向结果的末尾。

你必须调用mysqli_data_seek在你的for循环开始重置游标到第一个数据集:

for($i=1; $i<=$quantity; $i++) {
    mysqli_data_seek($result_brand, 0);
    mysqli_data_seek($result_model, 0);
...

另一个解决方案是在for循环之前运行while循环一次,并将结果存储在数组中,以便您在for循环中使用您的数组而不是使用mysqli_fetch_array