2013-09-05 1 views
1

подготовленный оператор: я использую два цикла while, но мой внутренний цикл while не работает. когда я использую внутренний цикл while, он показывает мне только одну запись, но когда я удаляю внутренний цикл while, я могу видеть все записи. Как я могу это решить?два цикла while, используя подготовленный оператор, но мой внутренний цикл while не работает

вот мой код

<table width="100%" style="background-color:#F2F2F2;border:1px solid #F2F2F2;border-radius:15px;"> 
<form name="form1" id="form1" method="post" action=""> 
<tr> 
<td align=""> 
<table width="100%" style="background-color:#F2F2F2;border:1px solid #F2F2F2;border-radius:15px;"> 
<tr class="table-heading"> 
<td >&nbsp;Qty.</td> 
<td >&nbsp;Writer</td> 
<td >&nbsp;Status</td> 
<td >&nbsp;</td> 
</tr><?php 
if($stmt->prepare("select id,qty,action_flag,status,writer from tbl_order where status=? and action_flag=? and order_id=?")) 
{ 
$action='confirm'; 
$status='orderprocessing'; 
$ordid=$_GET["ordid"]; 
$stmt->bind_param('sss',$status,$action,$ordid); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($id,$qty,$action_flag,$status,$writer); 
} 
while($stmt->fetch())  // outer while loop 
{ 
?> 
<tr align="left" style="line-height:30px;font-size:12px;"> 
<td >&nbsp;<?php echo $qty; ?></td> 
<td align="center" width="160" > 
<select name="selwrt" id="selwrt" class="reginput" style="text-transform:capitalize;width:150px;height:25px;" > 
<option value="">Select Writer</option> 
<?php 
if($stmt->prepare("select id,writer_name from tbl_writer order by writer_name")) 
{ 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($wid,$writer_name); 
} 
while($stmt->fetch())   // inner while loop 
{ 
?> 
<option value="<?php echo $wid; ?>"<?php if($writer==$wid) echo 'selected="selected"'; ?>><?php echo $writer_name; ?></option><?php } ?> 
</select> 
</td> 
<td align="center" width="160" ><select name="selst" id="selst" class="reginput" style="text-transform:capitalize;width:150px;height:25px;"> 
<option value="">Select Status</option> 
<option value="inprogress"<?php if($status=='inprogress') echo 'selected="selected"'; ?>>In Progress</option> 
<option value="jobdone"<?php if($status=='jobdone') echo 'selected="selected"'; ?>>Job Done</option> 
</select> 
</td> 
<td style="vertical-align:top;" ><input type="submit" name="btnsave" id="btnsave" value="SAVE" class="btnstyle" style="padding:3px;"/> 
<input type="hidden" name="pid" id="pid" value="<?php echo $id; ?>" ></td>      
</tr><?php } ?> 
<tr><td>&nbsp;</td></tr> 
</table> 

ответ

0

Это потому, что вы заменяете первоначальный результат со второй на первый раз через петлю. Поскольку вы хотите одновременно использовать оба набора результатов, используйте отдельные переменные для двух запросов - то есть замените $stmt внутри цикла с другим экземпляром.

+0

извините, но я не получаю вас .... можете ли вы рассказать, как я могу это сделать? – tech02

0

Как указано в объявлении, вы используете то же значение для обоих. Я действительно не знаю, какие данные вы вызываете, так как они то же самое происходит.

While (outer loop) { 
    Starts with first record 
While (Inner Loop) { 
    Goes through all the data 
} 
    Goes back to the top and than realizes that all the data is completed (which was done in the inner loop) 
} 

2 Способы решения проблемы. Используйте разные объекты для каждого, что может быть довольно невыполнимым. (два отдельных метода делают то же самое) Возможно, вы также можете использовать цикл foreach. Это также решит проблему более чистым способом, если она будет работать.

+0

извините, но я немного путаюсь ... не могли бы вы рассказать мне, как использовать другой объект? – tech02

+0

Учитывая ваш вопрос, я предполагаю, что вы где-то используете библиотеку, и это код. Я не могу видеть из вашего кода, что такое объект $ stmt-> fetch() 'или откуда он. Предположим, что на новой строке вы выводите 'print_r ($ stmt-> fetch()); - посмотри, что из этого получилось и чем оттуда – user1641165

+0

И, к сожалению, я имел в виду использование другого объекта, было бы практически невыполнимым. Вы бы удвоили код. Использование foreach - лучший вариант. (Я отредактировал мой ответ) – user1641165

Смежные вопросы