0

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?

11
  • 1
    Try category instead of catagory. It won't fix your problem, but it will give you extra marks in your final class report (wink) Commented Aug 2, 2013 at 13:18
  • @Fred - Ha thanks! However any idea how i can do what i need to? Commented Aug 2, 2013 at 13:19
  • Hint: What's the difference between SELECT * and SELECT cola, colb, colc ? Commented Aug 2, 2013 at 13:20
  • @Fred any idea how to fix my issue? Commented Aug 2, 2013 at 13:21
  • 2
    You are using an obsolete database API and should use a modern replacement. You are also vulnerable to SQL injection attacks that a modern API would make it easier to defend yourself from. Commented Aug 2, 2013 at 13:24

3 Answers 3

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

Sign up to request clarification or add additional context in comments.

Comments

1

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

1 Comment

Changed this, first row showing one column, second row 2 columns, 3rd row 1 column?
1
<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>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.