2013-09-11 1 views
0

После отправки mysqli_query для выбора открытых/невыполненных заказов из базы данных корзины результаты выводятся на экран со стандартным WHILE LOOP.Установить правильный условный оператор в WHILE LOOP

while($row = mysqli_fetch_array($oresult)) { include('orders-open.php');} 

заказы-open.php просто внутренняя часть таблицы:

<tr style="color:#FFF;"> 
    <td><?php echo $row['Buyer']; ?></td> 
    <td><?php echo $row['Cart_Date']; ?></td> 
    <td><?php echo $row['Item_Number']; ?></td> 
    <td><?php echo $row['Item_Title']; ?></td> 
    <td><?php echo $row['Item_FPrice']; ?></td> 
    <td><?php echo $row['Item_Qty']; ?></td> 
    </tr> 

Так вот мой вопрос, я хочу, чтобы применить простой HTML "<HR>" тег между записи в точке, где значение в $ строке [ «»] Покупатель изменяется, так что, например:

John Doe 9/11/13  123456  Item 1  $5.99  5 
John Doe 9/11/13  123654  Item 2  $8.99  3 
John Doe 9/9/13  321456  Item 3  $4.99  2 

(HR - Horizontal Rule Tag here) 

Mike Doe 9/7/13  123555  Item 1  $9.99  2 
Mike Doe 9/7/13  123777  Item 2  $2.99  6

Что было бы лучшим способом написать условный оператор внутри WHILE LOOP, чтобы сравнить результат $ row [Buyer] с предыдущим результатом $ row ['Buyer']?

+0

Просто сохраните '$ строки [«Покупатель»]' значение в первом контуре и сравнить его со следующими значениями (освежающие при изменении значения). –

ответ

1
$first_run = TRUE; 
$previous_buyer = NULL; 
while($row = mysqli_fetch_array($oresult)) { 
     if($first_run) { 
     $first_run = FALSE; 
     $previous_buyer = $row['Buyer']; 
     } 
    include('orders-open.php'); 
} 

И тогда в вашем включаемый файл:

<?php if($previous_buyer != $row['Buyer']) { 
    echo '<HR width="100%">'; 
    $previous_buyer = $row['Buyer']; 
} ?> 
<tr style="color:#FFF;"> 
    <td><?php echo $row['Buyer']; ?></td> 
    <td><?php echo $row['Cart_Date']; ?></td> 
    <td><?php echo $row['Item_Number']; ?></td> 
    <td><?php echo $row['Item_Title']; ?></td> 
    <td><?php echo $row['Item_FPrice']; ?></td> 
    <td><?php echo $row['Item_Qty']; ?></td> 
</tr> 
+0

Это происходит со мной после того, что вы находитесь внутри стола. Я не уверен, насколько хорошо


будет отображаться между строками таблицы. Возможно, вы захотите заменить echo '
'; с
Lumberjack

+1

Спасибо, это действительно сработало, но тэг HR не отображался, как вы упомянули (на самом деле это было ... но оно отображалось поверх таблицы а не между записями). - После изменения, упомянутого в вашем комментарии, все получилось правильно, спасибо. – DMSJax

0

Вы можете сделать это следующим образом:

$buyer = null ; //Cache buyer in a variable, because $row is reset in the loop. 

while($row = mysqli_fetch_array($oresult)) { 
    include('orders-open.php'); 
    if ($buyer !== $row["Buyer"]){ 
    echo ($buyer !== null) ? "<hr/>" : "" ; 
    $buyer = $row["Buyer"] ; 
    } 
} 
+0

-1 Этот код добавит горизонтальное правило в первую строку. – Lumberjack

0
$prev_buyer = ''; 
while($row = mysqli_fetch_array($oresult)) 
{ 
    if($prev_buyer !== $row['Buyer']) 
    { 
    //Do Something 
    } 

    include('orders-open.php'); 

    $prev_buyer = $row['Buyer'] 
} 
+0

-1 Этот код добавит горизонтальное правило в первую строку. – Lumberjack

0

Так же, как сказал Элон выше - это изменить:

while($row = mysqli_fetch_array($oresult)) { include('orders-open.php');}

в

$old_buyer = null; 
while($row = mysqli_fetch_array($oresult)) { 
    if ($row['Buyer'] != $old_buyer) { 
     echo '<hr>'; 
    } 
    $old_buyer = $row['Buyer']; 
    include('orders-open.php'); 
} 
+0

Объявление переменной '$ old_buyer' должно выполняться внутри блока' if', чтобы оно работало. –

+0

$ old_buyer будет назначаться на каждой итерации, а не на всякий случай, но он все равно будет работать таким образом. –

+0

Хм, хорошо, все будет работать. Но нет необходимости обновлять переменную, если она не отличается. –

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