Reputation: 244
I am trying to show all products in a database with a certain category in a HTML table. However I'm not sure how to limit the table to three columns only.
Here is my code:
<table>
<?php
$catagory=$_GET["q"];
$con = mysql_connect("localhost","cl49-XXX","XXX");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("cl49-XXX", $con)or die( "Unable to select database");
$result=mysql_query("SELECT * FROM products WHERE catagory = '$catagory' ")or die('You need enter a catagory ' );
for ($i = 0; $i < mysql_num_rows($result); $i++)
{
$row = mysql_fetch_array($result);
$prodname = $row['prodname'];
$prodID = $row['prodID'];
if ($i % 5 == 0 || $i == 0) {
echo "<tr>";
}
echo "
<td>
<b>$prodname </b><br />
Product ID: $prodID<br />
<img src='/userpics/$prodID.jpg' height='200' width='200'>
</td>";
if ($i % 3 == 0 || $i == (mysql_num_rows($result)-1)) {
echo "</tr>";
}
}
?>
<table>
I am waiting to show prodID, prodtitle and image all in the same "cell" but only have three columns (three products per row).
How do I do this?
Upvotes: 0
Views: 1508
Reputation: 46208
<table>
<?php
$con = mysql_connect("localhost","cl49-XXX","XXX");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("cl49-XXX", $con)or die( "Unable to select database");
$catagory = mysql_real_escape_string($_GET['q']); // prevent SQL injections
if(empty($catagory)) {
die('You need to enter a catagory');
}
$result = mysql_query("SELECT * FROM products WHERE catagory = '$catagory';") or die(mysql_error());
// a general error might have occurred,
// may or may not be related to not entering a catagory
$rows = mysql_num_rows($result); // cache the number for performance
for ($i = 0; $i < $rows; ++$i) {
$row = mysql_fetch_array($result);
$prodname = $row['prodname'];
$prodID = $row['prodID'];
if ($i % 3 === 0) {
echo "<tr>";
}
echo "
<td>
<b>$prodname</b><br />
Product ID: $prodID<br />
<img src='/userpics/$prodID.jpg' height='200' width='200'>
</td>";
if ($i % 3 === 0) {
echo "</tr>";
}
}
if($i % 3 > 0) {
// last row was not full
echo '</tr>';
}
?>
</table>
Upvotes: 1
Reputation: 670
echo "<tr>"; // first row beginning
for ($i = 1; $i <= mysql_num_rows($result); $i++)
{
$row = mysql_fetch_array($result);
$prodname = $row['prodname'];
$prodID = $row['prodID'];
echo "
<td>
<b>$prodname </b><br />
Product ID: $prodID<br />
<img src='/userpics/$prodID.jpg' height='200' width='200'>
</td>";
if ($i % 3 == 0) {
echo "</tr> <tr>"; // it's time no move to next row
}
}
echo "</tr>"; // last row ending
Note that $i is now starting from 1 and it loops while <=
of num_rows, not <
.
Upvotes: 2
Reputation: 3204
This does not look good.
if ($i % 5 == 0 || $i == 0) {
I think it should be
if ($i % 3 == 0 || $i == 0) {
Otherwise a new <tr>
Won't be opened when you close the old one.
Expanding on this, you could make this a whole lot easier for yourself.
echo "<table><tr>"; // Open the first row
for ($i ..... etc.) {
-- SNIP --
if ($i % 3 == 0) {
echo "</tr><tr>"; // imediately open new row
}
}
echo "</tr></table>"; // Close last row as well as table
Upvotes: 1