DMSJax
DMSJax

Reputation: 1717

Set proper conditional statement in WHILE LOOP

After submitting a mysqli_query to select open/unfulfilled orders from a cart database the results is output to the screen with a standard WHILE LOOP.

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

orders-open.php is simply the internal part of a TABLE:

 <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>

So here is my question, I want to apply a simple HTML "<HR>" tag between the records at the point where the value in $row['Buyer'] changes, so by example:

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

What would be the best way to write the conditional statement inside the WHILE LOOP to compare the $row[Buyer'] result to the previous $row['Buyer'] result?

Upvotes: 0

Views: 130

Answers (4)

Lumberjack
Lumberjack

Reputation: 488

$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');
}

And then in your include file:

<?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>

Upvotes: 1

sybear
sybear

Reputation: 7784

You could do it like this:

$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"] ;
   }
}

Upvotes: 0

Vigintas Labakojis
Vigintas Labakojis

Reputation: 1069

Just as Elon said above - change this:

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

to

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

Upvotes: 0

Buchow_PHP
Buchow_PHP

Reputation: 410

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

  include('orders-open.php');

  $prev_buyer = $row['Buyer']
}

Upvotes: 0

Related Questions