I am new to php and trying to fetch data from database and trying to show it in html table. My issue is total number of returned record is 13 but in table it is just showing 12 record( it is skipping first record in html table) my code snippt is as below
$num_rows = mysql_num_rows($result);
echo $num_rows;
if ($num_rows > 0) {
$i = 0;
$dyn_table = '<table class="gridData">';
$dyn_table.= '<th>Mil Purchy</th><th>Next Mil Purchy</th><th>total Missing</th><th>Missing From-To</th>';
for ($x = 0; $x <= $num_rows; $x++) {
while ($row = mysql_fetch_array($result)) {
if ($i % 1 == 0) {
// if $i is divisible by our target number (in this case "3")
echo "<script> alert('$i') </script>";
$dyn_table.= '<tr><td>' . $row[0] . '</td>';
$dyn_table.= '<td>' . $row[1] . '</td>';
$dyn_table.= '<td>' . $row[2] . '</td>';
$dyn_table.= '<td>' . $row[3] . '</td>';
} else {
echo "<script> alert ('in else statement') </script>";
}
$i++;
}
$dyn_table.= '</tr></table>';
}
echo $dyn_table;
}
and on submit button I have written following code
<fieldset>
<?php
if ($_GET) {
if (ISSET($_GET['submit'])) {
// echo "<script> alert('waiting for function') </script>";
$From_Date = $_GET['DateFrom'];
$To_Date = $_GET['DateTo'];
Sequece($From_Date, $To_Date);
}
}
?>
</fieldset>
before anything it is important that you use mysqli() functions instead of mysql() because mysql() function series are being departed from php. Also you missed some <tr> and </tr>s. so here is your fixed code:
<?php $num_rows = mysqli_num_rows($result);
echo $num_rows;
if($num_rows > 0){
$i = 0;
$dyn_table = '<table class="gridData">';
$dyn_table .= '<tr><th>Mil Purchy</th><th>Next Mil Purchy</th><th>total Missing</th><th>Missing From-To</th>';
while($row = mysqli_fetch_array($result))
{
if ($i % 1 == 0) { // if $i is divisible by our target number (in this case "3")
echo "<script> alert('$i') </script>";
$dyn_table .= '</tr><tr><td>' .$row[0] . '</td>';
$dyn_table .= '<td>' .$row[1]. '</td>';
$dyn_table .= '<td>' .$row[2]. '</td>';
$dyn_table .= '<td>' .$row[3]. '</td>';
} else {
echo "<script> alert ('in else statement') </script>";
}
$i++;
}
$dyn_table .= '</tr></table>';
echo $dyn_table;
}?>
Also you are creating many <script> inside the <table> structure code, it is not wrong and it works but it is bad HTML so I recommend that you store all <script>s in an array and after creation of table, print out the array. any by the way, why sending many alerts? why not only print the alerts only?
Database is returning correct records that is 12.
You made a mistake in the following line of code:-
for ( $x = 0; $x<= $num_rows; $x++){
Simply replace above code block with the following one:-
for ( $x = 0; $x < $num_rows; $x++){
Here you are trying to get ($num_rows + 1) = 13 records from the database that's why you are not getting data for last record that is 13.
You do not need a for loop. Your while loop will stop when there are no more records. That's why it's there.
Remove for loop and check it may be work.
$num_rows = mysql_num_rows($result);
echo $num_rows;
if ($num_rows > 0)
{
$i = 0;
$dyn_table = '<table class="gridData">';
$dyn_table.= '<th>Mil Purchy</th><th>Next Mil Purchy</th><th>total Missing</th><th>Missing From-To</th>';
while ($row = mysql_fetch_array($result)) {
if ($i % 1 == 0)
{
// if $i is divisible by our target number (in this case "3")
echo "<script> alert('$i') </script>";
$dyn_table.= '<tr><td>' . $row[0] . '</td>';
$dyn_table.= '<td>' . $row[1] . '</td>';
$dyn_table.= '<td>' . $row[2] . '</td>';
$dyn_table.= '<td>' . $row[3] . '</td>';
}
else
{
echo "<script> alert ('in else statement') </script>";
}
$i++;
}
$dyn_table.= '</tr></table>';
echo $dyn_table;
}
13 will not divisible by 3 so it only shows 12 results
<?php
$num_rows = mysql_num_rows($result);
echo $num_rows;
if ($num_rows > 0) {
$i = 0;
$dyn_table = '<table class="gridData">';
$dyn_table .= '<th>Mil Purchy</th>
<th>Next Mil Purchy</th>
<th>total Missing</th>
<th>Missing From-To</th>';
while ($row = mysql_fetch_array($result)) {
if ($i % 1 == 0) { // if $i is divisible by our target number (in this case "3")
echo "<script> alert('$i') </script>";
$dyn_table .= '<tr><td>' . $row[0] . '</td>';
$dyn_table .= '<td>' . $row[1] . '</td>';
$dyn_table .= '<td>' . $row[2] . '</td>';
$dyn_table .= '<td>' . $row[3] . '</td>';
} else {
echo "<script> alert ('in else statement') </script>";
}
$i++;
}
$dyn_table .= '</tr></table>';
echo $dyn_table;
}?>
Related
I have a MySQL table of results of collected responses on a form that I want to output in a table.
The user rates certain variables such as Sleep from good (1) to bad (7) and each users results are on each row.
I did that successfully, but to make it more readable I want to colour code the scores based on score.
E.g., if you score 2 or below the table cell should be green, and if you score 6 or above it is coloured red.
There are 5 different variables being rated so not sure if the method I am using would work or if something more suitable.
$sql = "SELECT * FROM Responses";
$result = mysqli_query($link, $sql);
while ($row = mysqli_fetch_array($result))
{
echo '<tr>';
if($row['Sleep'] <= 2)
{
echo "<td style='background-color: green;'>" . $row['Sleep'] . "</td>";
}
elseif ($row['Sleep'] >= 6)
{
echo "<td style='background-color: red;'>" . $row['Sleep'] . "</td>";
}
else
{
echo "<td>" . $row['Sleep'] . "</td>";
}
echo '</tr>';
}
No output
Maybe so
function getColor($number)
{
if ($numner <= 2)
return 'green';
else if ($numner > 2 && $var < 6)
return 'black';
else if ($number >= 6)
return 'red';
}
$sql = "SELECT * FROM Responses";
$result = mysqli_query($link, $sql);
while ($row = mysqli_fetch_array($result))
{
echo '<tr>';
echo '<td>' . $row["Name"] . '</td>';
echo '<td style="background-color: "' . $getColor($row["Sleep"]) . '">' . $row["Sleep"] . '</td>';
}
You just put your different variables in an array
function getColor($number)
{
if ($number <= 2)
return 'green';
else if ($number > 2 && $number < 6)
return 'none';
else if ($number >= 6)
return 'red';
}
echo "<table>";
while ($row = mysqli_fetch_array($result))
{
//replace var* with your variable
$variables = array("Sleep", "var2", "var3", "var4", "var5");
echo '<tr>';
echo '<td>' . $row["Name"] . '</td>';
$i=0;
while($i<5)
{
$score=$row[$variables[$i]];
echo '<td style="background-color: ' . getColor($score). ';">' . $score . '</td>';
$i++;
}
echo '</tr>';
}
echo "</table>";
I managed to get the checkboxes to POST the data and displays each on the checkout page but the problem I have is when it gets to 4th column it stops when it hits a certain char limit also how would I turn this into a table on the checkout page.
Database snippet code:
print '<td><input type="checkbox" name="check_list[]"value='. $getColumn[0]. $getColumn[1]. $getColumn[2]. $getColumn[3]. $getColumn[4]. $getColumn[5].$getColumn[6].$getColumn[7].$getColumn[8].$getColumn[9].'</td>';
for ($column = 1; $column < pg_num_fields($res); $column++)
{
print "<td>" . $getColumn[$column] . "</td>";
}
}
print '</table>'
Checkout page
<?php
echo "<hr />\n";
$res = pg_query ($con, "select count(ref) from music");
$a = pg_fetch_row($res);
echo "<p>Total " . $a[0] . " music in database.</p>";
echo "<table border='1'>\n<thead>\n<tr>\n";
echo "<th>Artist</th><th>Composer</th><th>Genre</th><th>Title</th><th>Album</th><th>Label</th> <th>Price</th><th>Description</th>\n";
echo "</tr>\n</thead>\n<tbody>\n";
$res=pg_query($con, "SELECT * from music ORDER BY ref");
while ($a = pg_fetch_array ($res))
{
echo "<tr>";
for ($j = 0; $j < pg_num_fields($res); $j++) {
// htmlspecialchars converts things like & to HTML entity codes
echo "<td>" . htmlspecialchars($a[$j], ENT_QUOTES) . "</td>";
}
echo "</tr>\n";
}
echo "</tbody>\n</table>";
?>
I am sure, you are tried to do the following:
print '<table>';
for ($column = 1; $column < pg_num_fields($res); $column++) {
echo '<tr>';
print '<td><input type="checkbox" name="check_list[]" value="'.$getColumn[$column] .'" /></td>';
print "<td>" . $getColumn[$column] . "</td>";
echo '</tr>';
}
print '</table>';
I have a page on my site that shows a member directory. I want the members to be listed 3 per row, before it goes to the next row. The code I have, does this for the very first row - but on the second row, its all on one line and doesnt carry down.
The profiles are showing up like this:
uuu
uuuuuuuuuuuuuuuuuuuuuuuuuuu
When they should be doing this:
uuu
uuu
uuu
uuu
This is what my code looks like:
<table>
<tr>
<td colspan="4"><h1>Member Directory</h1></td></tr>
<tr>
<td>
<?php
while($row = mysql_fetch_array($result)) {
if (empty($row['profile']) === false){
echo '<img src="', $row['profile'], ' "width="125">';
} else {
echo '<img src="../../images/template/avatar.png">';
}
echo '</td><td>';
echo '' . ucfirst($row['username']) . '<br />';
echo "Location: " . $row['location'] . "<br />";
echo '</td><td>';
if ($i++ == 2) echo '</td></tr><tr><td>';
}
?>
</td>
</tr>
</table>
Any help would be greatly appreciated, thanks!
Use
if (++$i % 3 == 0) echo '</td></tr><tr><td>';
Explanation:
First of all ++$i first increments $i, and then uses it in whatever is next, this makes for more readable code.
Second, the % is the modulus, which means it sortof subtracts 3 from $i until it is not possible anymore. E.g. 9 % 3 == 0, and 11 % 3 == 2 and so on. This means we know that we have printed 3 rows whenever $i % 3 equals 0.
try this one
<table>
<tr>
<td colspan="4"><h1>Member Directory</h1></td>
</tr>
<?php
$count=0;
while($row = mysql_fetch_array($result))
{
$count+=1;
if($count%3==1)
{
echo '<tr>';
}
echo '<td>';
if (empty($row['profile']) === false){
echo '<img src="', $row['profile'], ' "width="125">';
} else {
echo '<img src="../../images/template/avatar.png">';
}
echo '</td>';
echo '<td>';
echo '' . ucfirst($row['username']) . '<br />';
echo "Location: " . $row['location'] . "<br />";
echo '</td>';
if($count%3==0)
{
echo '</tr>';
}
}
if($count%3!=0)
{
echo '</tr>';
}
?>
</table>
You didn't reset the value of $i, so it kept increasing; another issue is that if you have only seven items, the last row should have four empty cells. So the loop condition needs to be augmented with a row completion status:
$i = 0;
while (($row = mysql_fetch_array($result)) !== false || $i != 0) {
if ($i == 0) {
echo '<tr>'; // start of new row
}
if ($row !== false) {
echo '<td>';
if (empty($row['profile'])) {
echo '<img src="', $row['profile'], ' "width="125">';
} else {
echo '<img src="../../images/template/avatar.png">';
}
echo '</td><td>';
echo '' . ucfirst($row['username']) . '<br />';
echo "Location: " . $row['location'];
echo '</td>';
} else {
echo '<td></td><td></td>'; // no more data
}
$i = ($i + 1) % 3; // advance
if ($i == 0) {
echo '</tr>'; // end of the row
}
}
Hey guys I'm back and I feel like I'm making a really stupid error in my code but I can't seem to find it. What I am trying to do is split data retrieved from a mysql table into two columns inside an html table. So far I got it working...sort of. The problem I am having is the data keeps replicating to both rows in the table versus being an individual entry in each cell. I have used googled and searched these forms and can't seem to see where I am making the error. Below is the code
// Build the table
echo '
<table>
<tr>
';
// Build the headers
for ($x = '1'; $x <= '2'; $x++)
echo '
<td>Truck</td>
<td>Home Base</td>
<td>Client</td>
<td>Job Details</td>
<td>Crew</td>
';
// Close off headers
echo '</tr>';
// Fetch the table contents if the rigs are active
while($row = mysqli_fetch_array($truck_full_query)) {
for ($y = '1'; $y <= '1'; $y++):
echo '<tr>';
for ($z = '1'; $z <= '2'; $z++):
echo '<td>' . $row['model'] . ' #' . $row['position'] . '<br>' . $row['unit_number'] . '</td>';
echo '<td>' . $row['dispatch_location'] . '</td>';
// Get client information
echo '<td> </td>';
// Get Job Details
echo '<td> </td>';
// Get Crew
echo '<td> </td>';
endfor;
echo '</tr>';
endfor;
}
// Close table
echo '</table>';
// Build the table
echo '<table><tr>';
// Build the headers
echo '<td>Truck</td><td>Home Base</td><td>Client</td><td>Job Details</td><td>Crew</td>';
echo '<td>Truck</td><td>Home Base</td><td>Client</td><td>Job Details</td><td>Crew</td>';
echo '</tr>';
$data = mysqli_fetch_all($truck_full_query);
$i = 0;
$t = sizeof($data);
for (; $i < $t; $i += 2) {
echo '<tr>';
$left_row = $data[$i];
echo '<td>' . $left_row['model'] .'</td><td>...</td><td>...</td><td>...</td><td>...</td>';
$right_row = $data[$i + 1];
echo '<td>' . $right_row['model'] .'</td><td>...</td><td>...</td><td>...</td><td>...</td>';
echo '</tr>';
}
echo '</table>
And don't forget to check if the last $right_row exists.
I've got the first round of this loop displaying correctly.
What I want is 5 rows of 8 columns. What I'm getting is the first group displays correctly and the second group displays as 10 columns.
Where am I going wrong?
echo '<table align="center" width="70%"><tr>';
$count = 0;
$rowCount = 0;
while ( $row = mysql_fetch_array($result))
{
$count++;
echo "<td><a href='" . $row['URL'] . "'><img src='" . $row['IMG'] . "' width='120' h eight='160'/></a></td>";
if ($count % 8 === 0)
{
echo '</tr>';
$rowCount++;
if($rowCount % 8 === 0)
{
echo '</tr></table><br><br>Adds here<br><br><tablealign="center" width="70%"><tr>';
}else{
echo '<tr>';
}
}
}
echo ' </tr></table>';
You're trying to make it a little too complicated.
Separate out the functionality for the column counts versus the row counts:
<?php
echo '<table align="center" width="70%"><tr>';
$count = 0;
$rowCount = 0;
while($row = mysql_fetch_array($result))
{
$count++;
echo "<td><a href='" . $row['URL'] . "'><img src='" . $row['IMG'] . "' width='120' h eight='160'/></a></td>";
if($count%8===0)
{
$rowCount++;
echo '</tr>';
if($rowCount%5===0)
{
echo '</table><br/><br/>Adds Here<br/><br/><table align="center" width="70%"><tr>';
$rowCount = 0;
}
}
}
echo ' </tr></table>';