user4945412
user4945412

Reputation: 35

Showing fields from a query in php

I'm new in PHP and i'm having a trouble in showing the retrived data from a query. There area four area_name and many type_name, type_desc and type_price under that area_name

I wanted to display those data in a format like this:

area_name1
    type_name1_1
    type_desc1_1
    type_price1_1

    type_name1_2
    type_desc1_2
    type_price1_2

then

area_name2
    type_name2_1
    type_desc2_1
    type_price2_1

    type_name2_2
    type_desc2_2
    type_price2_2

But in my code, it is displayed like this:

area_name1
    type_name1_1
    type_desc1_1
    type_price1_1

    area_name1
    type_name1_2
    type_desc1_2
    type_price1_2

then

area_name2
    type_name2_1
    type_desc2_1
    type_price2_1

    area_name2
    type_name2_2
    type_desc2_2
    type_price2_2

Can anyone help me on how to show the area_name once then show the type_names under that specific area_name? any help/assistance will be greatly appreciated.

<?php
include 'config.php';
$query = "select a.area_name,t.type_no,t.type_name,t.type_desc,t.type_price,t.area_no, a.area_no from area as a INNER JOIN type as t where a.area_no=t.area_no";
$stmt= dbConnect()->prepare($query);
$stmt -> execute();
$text_num = $stmt -> rowCount();
?>
  <div id="prices_content"> 
    <div>
      <?php if ($text_num>0) {?>
        <?php while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {?>
          <div id="content">
          <br><br><br><center>
            <b><h1><?php echo $row['area_name']; ?></h1></b><br>
            <p><?php echo $row['type_name']; ?></p><br>
            <p><?php echo $row['type_desc']; ?></p><br>
            <p><?php echo $row['type_price']; ?></p></center><br>
          </div>
        <?php }?>
        <?php }?>
    </div>
  </div> 

Upvotes: 0

Views: 24

Answers (3)

Ethan22
Ethan22

Reputation: 757

In your while loop you're echoing $row['area_name'] every time. You need to declare a variable outside the loop to hold the area name and check it in each loop to see if it changed.

Like this:

$area_name = '';
<?php while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {?>
    <div id="content">
      <br><br><br><center>
        <?php if($area_name != $row['area_name']){ ?>
            <?php $area_name = $row['area_name']; ?>
            <b><h1><?php echo $row['area_name']; ?></h1></b><br>
        <?php } ?>
        <p><?php echo $row['type_name']; ?></p><br>
        <p><?php echo $row['type_desc']; ?></p><br>
        <p><?php echo $row['type_price']; ?></p></center><br>
    </div>
<?php } ?>

Upvotes: 1

Jayo2k
Jayo2k

Reputation: 249

You are adding the area_name into the loop so it will be displayed you should try this

<div id="prices_content"> 
<div>
  <?php if ($text_num>0) {?>
    <b><h1><?php echo $row['area_name']; ?></h1></b><br><!-- this outside of the loop-->
    <?php while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {?>
      <div id="content">
      <br><br><br><center>
        <p><?php echo $row['type_name']; ?></p><br>
        <p><?php echo $row['type_desc']; ?></p><br>
        <p><?php echo $row['type_price']; ?></p></center><br>
      </div>
    <?php }?>
    <?php }?>
</div>

Upvotes: 0

Priyank
Priyank

Reputation: 1009

Try this Code,

<?php
include 'config.php';
$query = "select a.area_name,t.type_no,t.type_name,t.type_desc,t.type_price,t.area_no, a.area_no from area as a INNER JOIN type as t where a.area_no=t.area_no";
$stmt= dbConnect()->prepare($query);
$stmt -> execute();
$text_num = $stmt -> rowCount();
?>
  <div id="prices_content"> 
    <div>
      <?php if ($text_num>0) {?>
        <?php while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {?>
          <div id="content">
          <br><br><br><center>
            <?if($area_name !== $row['area_name']){?>
                <b><h1><?php echo $row['area_name']; ?></h1></b><br>
            <?php }?>
            <p><?php echo $row['type_name']; ?></p><br>
            <p><?php echo $row['type_desc']; ?></p><br>
            <p><?php echo $row['type_price']; ?></p></center><br>
          </div>
        <?php $area_name = $row['area_name'];}?>
        <?php }?>
    </div>
  </div> 

Upvotes: 1

Related Questions