Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

Firstly, Please bare in mind that i am a PHP beginner!

I am trying to show all products in a database with a certain catagory in a HTML table. However i'm not sure how to limit the table to 3 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 wating to show prodID, prodtitle and image all in the same "cell" but only have 3 columns (3 products per row).

How do i do this?

share|improve this question
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) –  Fred -ii- Aug 2 '13 at 13:18
    
@Fred - Ha thanks! However any idea how i can do what i need to? –  Shane Aug 2 '13 at 13:19
    
Hint: What's the difference between SELECT * and SELECT cola, colb, colc ? –  Ollie Jones Aug 2 '13 at 13:20
    
@OllieJones - ? –  Shane Aug 2 '13 at 13:20
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. –  Quentin Aug 2 '13 at 13:24
show 7 more comments

3 Answers

up vote 1 down vote accepted
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 <.

share|improve this answer
    
Yayy!! thanks!! –  Shane Aug 2 '13 at 13:28
add comment

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
share|improve this answer
    
Changed this, first row showing one column, second row 2 columns, 3rd row 1 column? –  Shane Aug 2 '13 at 13:25
add comment
<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>
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.