Home > Software engineering >  PHP-Mysql : Php echo values from sql out put from 1st and second row
PHP-Mysql : Php echo values from sql out put from 1st and second row

Time:10-18

I am trying to build a web page (using css) that shows me values for today and tomorrow. I can successfully get the values for today but cannot see / get the values for tomorrow which are on the next row. I require the next row column Fajr Begins on my webpage (php code).

Mysql query:

select *  from prayers where Date IN (CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 DAY)) LIMIT 2;

output:

| Date       | Day  | Fajr Begins | Fajr Jamaat | Sunrise | Zohr Begins | Zohr Jamaat | Asr Begins | Asr Jamaat | Magrib Begins | Magrib Jamaat | Isha Begins | Isha Jamaat | Jumah 1 | Jumah 2 | Day of week |
 ------------ ------ ------------- ------------- --------- ------------- ------------- ------------ ------------ --------------- --------------- ------------- ------------- --------- --------- ------------- 
| 2021-10-15 | Fri  | 05:33       | 06:00       | 07:23   | 12:50       | *           | 15:33      | 16:15      | 18:11         | 18:16         | 19:59                 |   | 13:20   | 14:15   |
| 2021-10-16 | Sat  | 05:34       | 06:15       | 07:24   | 12:50       | 13:30       | 15:32      | 16:00      | 18:09         | 18:14         | 19:57                 |   | 13:20   | 14:15   |
 ------------ ------ ------------- ------------- --------- ------------- ------------- ------------ ------------ --------------- --------------- ------------ 

All the column names are the same so I cannot alias them (which wouldve been easy)..

Here is my PHP Script (I've only taken a small snippet from the first entry of the html table):

 <?php
 include "dbConn.php"; // Using database connection file here
 $records = mysqli_query($db,"select *  from prayers where Date IN (CURDATE(), 
  DATE_ADD(CURDATE(), INTERVAL 1 DAY)) LIMIT 2;" ); // fetch data from database

  while($data = mysqli_fetch_array($records))
 {
 ?>

    <div class="u-table u-table-responsive u-table-1">
      <table class="u-table-entity">
        <colgroup>
          <col width="100%">
        </colgroup>
        <tbody class="u-table-body">
          <tr style="height: 118px;">
            <td class="u-align-center u-table-cell u-table-cell-1"><?php echo $data['Fajr 
   Begins']; ?></td>
          </tr>
        </tbody>
      </table>
    </div>
    <div class="u-table u-table-responsive u-table-2">
      <table class="u-table-entity">
        <colgroup>
          <col width="100%">
        </colgroup>
        <tbody class="u-table-body">
          <tr style="height: 118px;">
            <td class="u-align-center u-table-cell u-text-palette-3-base u-table-cell-2"><?php 
   echo $data['Fajr Jamaat']; ?></td>
          </tr>
        </tbody>
      </table>
    </div>
    <div class="u-table u-table-responsive u-table-3">
      <table class="u-table-entity">
        <colgroup>
          <col width="100%">
        </colgroup>
        <tbody class="u-table-body">
          <tr style="height: 72px;">
            **<td class="u-align-center u-table-cell u-text-palette-2-base u-table-cell-3">Tommorrow Data</td>**
          </tr>
        </tbody>
      </table>
    </div>

  <?php 
  }
  ?>

   <?php mysqli_close($db); // Close connection ?>

Webpage attached.

I've exhausted all my options searching but cannot find what the solution. Please help pro's!

CodePudding user response:

Your query is returning the correct data and is limited to two rows. When you come to create the HTML tables your while loop is only reading one row at a time, so you never see tomorrow's data.

However, there's no guarantee which order the data is returned in, so you need to add an ORDER BY Date ASC clause.

Since you're only returning two rows you don't need a while statement. You just need two successive fetches, something like this:

<?php
 include "dbConn.php"; // Using database connection file here

// Query updated to include an ORDER BY clause

 $records = mysqli_query($db,"select *  from prayers where Date IN (CURDATE(), 
  DATE_ADD(CURDATE(), INTERVAL 1 DAY)) ORDER BY Date ASC LIMIT 2;" ); // fetch data from database

// read first row with today's data
$todaysData = mysqli_fetch_array($records);

// Create table for today here

// Now read second row, with tomorrow's data.
$tomorrowData = mysqli_fetch_array($records);

// Create table for tomorrow here.

mysqli_close($db);  // not strictly required since PHP will do this anyway


  • Related