0

我有一个名为 mysql 的表product,其结构如下:

CREATE TABLE product (
    id int(6) unsigned NOT NULL auto_increment,
    name varchar(100) NOT NULL default '',
    image varchar(255) NOT NULL default '',
    link varchar(255) NOT NULL default '',
    price decimal(3,2) NOT NULL default '0.00',
    PRIMARY KEY (id)
);

我想将检索到的结果可视{product1,...,product5}化为一个 3 列的 html/php 表,该表还具有以下结构:

<table border="1" cellpadding="2" cellspacing="2" width="100%">
    <tr>
       <td>product1.image</td>   <td>product2.image</td>   <td>product3.image</td>
    </tr>
    <tr>
       <td>product1.name</td>    <td>product2.name</td>    <td>product3.name</td>
    </tr>
    <tr>
       <td>product1.link</td>    <td>product2.link</td>    <td>product3.link</td>
    </tr>

    <tr> 
         <td colspan="3">&nbsp;</td>
    </tr>

    <tr>
       <td>product4.image</td>   <td>product5.image</td>  <td>&nbsp;</td>
    </tr>
    <tr>
        <td>product4.name</td>   <td>product5.name</td>  <td>&nbsp;</td>
    </tr>
    <tr>
        <td>product4.link</td>   <td>product5.link</td>  <td>&nbsp;</td>
    </tr>
</table>

请注意,给定条目的字段(例如product1.{image,description,link})显示在不同的行中。下面的代码说明了如何显示某些产品的图像。

$table = 'product';
$result = mysql_query("SELECT id, image, description, link FROM {$table}");
if (!$result) {
    die("Query to show fields from table failed");
}

$fields_num = mysql_num_fields($result);

echo "<h1>Table: {$table}</h1>";
echo "<table border='1' cellpadding='2' cellspacing='2' width='100%'><tr>";
// printing table headers
for($i=0; $i<$fields_num; $i++)
{
    $field = mysql_fetch_field($result);
    echo "<td> <img src="$field->image" border="0"></td>";

    if($i%3==0){echo"</tr><tr>";}
}
echo "</tr></table>";

任何建议表示赞赏!

4

2 回答 2

1

所以你想要一个 html 结构,它总是显示三个产品并排显示,并且每个产品都将图像放在链接上方的描述之上。

...而且我不会为此使用桌子。

我假设您知道如何从数据库中获取数据。您可以根据需要循环遍历结果表和显示:

$counter = 1;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "<span><div>".$row["image"]."</div><div>".$row["description"]."</div><div>".$row["link"]."</div></span>;
    $counter += 1;
    if($counter % 3 = 0)
    {
        echo "</br>
    }
}

这为您提供了一组彼此相邻的 3 个元素,其中包含彼此上方的 3 个 div 元素,每个元素都包含有关您的产品的详细信息。

下面是使用环绕表的代码:

echo "<h1>Table: {$table}</h1>";
echo "<table border='1' cellpadding='2' cellspacing='2' width='100%'><tr>";
$counter = 1;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "<td><div>".$row["image"]."</div><div>".$row["description"]."</div><div>".$row["link"]."</div></td>;
    $counter += 1;
    if($counter % 3 = 0)
    {
        $echo "</tr><tr>";
    }
}
echo "</tr></table>";

...这是您在问题中要求的:

echo "<h1>Table: {$table}</h1>";
echo "<table border='1' cellpadding='2' cellspacing='2' width='100%'>";
$counter = 1;
$htmlHolder1 = "<tr>";
$htmlHolder2 = "<tr>";
$htmlHolder3 = "<tr>";
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $htmlHolder1 .= "<td>".$row["image"]."</td>";
    $htmlHolder2 .= "<td>".$row["description"]."</td>";
    $htmlHolder3 .= "<td>".$row["link"]."</td>";
    $counter += 1;
    if($counter % 3 = 0)
    {
        echo $htmlHolder1."</tr>";
        echo $htmlHolder2."</tr>";
        echo $htmlHolder3."</tr>";

        $htmlHolder1 = "<tr>";
        $htmlHolder2 = "<tr>";
        $htmlHolder3 = "<tr>";
    }
}
if($counter % 3 != 0)
{
    echo $htmlHolder1."</tr>";
    echo $htmlHolder2."</tr>";
    echo $htmlHolder3."</tr>";
}
echo "</table>";
于 2012-11-08T16:20:27.347 回答
0

一个循环来构建单元格,边走边计算每个单元格,然后每隔 XX(使用您的示例的第三个)关闭该行并打开一个新行。

不确定您是否需要更多,但这是基础。

于 2012-11-08T14:58:19.763 回答