应该是用嵌套循环来实现,但是我自己循环了几次,都是错误的,可能是外循环和内循环重复了:
$result = mysql_query("SELECT p_class FROM Product group by p_class limit 40");//取得商品类别名称:p_class mysql_data_seek($result, 0);
while ($row=mysql_fetch_row($result))
{
echo "<table bord='1'>\n";
echo "<tr>\n";
for ($i=0; $i<mysql_num_fields($result); $i++ )//外循环,实现分行显示p_class名
{
echo '<td align="center">';
echo "$row[$i]";
echo '</td>';
$result2 = mysql_query("SELECT * FROM Product where p_class=$row[$i] limit 0,4");
while ($row=mysql_fetch_row($result2))
{
echo '<table><tr><td align="right">';
for ($i=0; $i<mysql_num_fields($result2); $i++ )//内循环,实现显示:在不同的P_class下的所有商品名称,图片等内容
{
echo "<img src={$row['pic']} />";
}//内循环结束
echo '</td></tr></table>';
}//外循环结束
}
echo "</tr>\n";
}
echo "</table>\n";
mysql_free_result($result);
mysql_close($conn);
?>
$result = mysql_query("SELECT p_class FROM Product group by p_class limit 40");//取得商品类别名称:p_class mysql_data_seek($result, 0);
while ($row=mysql_fetch_row($result))
{
echo "<table bord='1'>\n";
echo "<tr>\n";
for ($i=0; $i<mysql_num_fields($result); $i++ )//外循环,实现分行显示p_class名
{
echo '<td align="center">';
echo "$row[$i]";
echo '</td>';
$result2 = mysql_query("SELECT * FROM Product where p_class=$row[$i] limit 0,4");
while ($row=mysql_fetch_row($result2))
{
echo '<table><tr><td align="right">';
for ($i=0; $i<mysql_num_fields($result2); $i++ )//内循环,实现显示:在不同的P_class下的所有商品名称,图片等内容
{
echo "<img src={$row['pic']} />";
}//内循环结束
echo '</td></tr></table>';
}//外循环结束
}
echo "</tr>\n";
}
echo "</table>\n";
mysql_free_result($result);
mysql_close($conn);
?>
不过你的html代码有问题
你内层的表格,写在外层表格标记的外边,自然就看着乱七八糟了
谢谢。那我试试吧HTML去掉看看。
+----+--------+----------------------+
| id | type | content |
+----+--------+----------------------+
| 1 | 天文 | 天文 天文 天文 |
| 2 | 天文 | 天 天 天文 |
| 3 | 天文 | 文 文 天文 |
| 4 | 地理 | 地理 地理 地理 |
| 5 | 地理 | 地 地 地 |
| 6 | 地理 | 理 理 理 |
| 7 | 科技 | 科技 科技 科技 |
| 8 | 科技 | 科 科 科 |
| 9 | 科技 | 技 技 技 |
+----+--------+----------------------+
9 rows in set (0.00 sec)
<?php
//连接数据库
function connect() {
$connect = mysql_connect("localhost:3306", "root", "111111");
if (!$connect) {
die("服务器连接失败:" . mysql_error());
}
$conn = mysql_select_db("test", $connect) or die("数据库连接失败!<br/>");
mysql_query("set names utf8");
return $connect;
}
connect();
function sqlQuery($sql,$count){
$res = mysql_query($sql);
if(!$res)
die("SQL:{$sql}<br>Error:".mysql_error());
if(mysql_affected_rows() > 0){
$arr = array();
switch($count){
case 1:
$arr = mysql_fetch_array($res,MYSQL_ASSOC);
break;
case 2:
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
array_push($arr,$rows);
}
break;
}
}else{
echo "查询失败<br>Error:".mysql_error();
}
return $arr;
}//$sql_type = "SELECT p_class FROM Product group by p_class limit 40";
$sql_type = "SELECT type FROM csdn_test4 group by type limit 40";
$types = sqlQuery($sql_type,2);//print_r($types);
?><?php
foreach($types as $type){
foreach($type as $title){
//$sql_title = "SELECT * FROM Product where p_class='".$title."' limit 0,4";
$sql_title = "SELECT * FROM csdn_test4 where type='".$title."' limit 0,4";
$contents = sqlQuery($sql_title,2);//print_r($contents);
?>
<table border="" cellpadding="0" cellspacing="0">
<tr>
<td colspan=3><?=$title?></td>
</tr>
<tr>
<?php foreach(array_keys($contents[0]) as $tit){ ?>
<td><?=$tit?></td>
<?php } ?>
</tr>
<?php foreach($contents as $content){ ?>
<tr>
<?php foreach($content as $key=>$cont){ ?>
<td><?=$cont?></td>
<?php } ?>
</tr>
<?php } ?>
</table><br>
<?php
}
}
?>效果:
写得比我那高深多了。这种函数化的写法,在PHP里我还是第一次接触,好像和ASP有点类似了。学习ing多谢!
大虾,我学了一下你的写法,原理上你这种实现起来确实更简单,但是后期根据实际需要在HTML中调整数据库中的字段显示数量,和排版时,我想得头大,解决不了问题哦。 我太笨了,你能否按照我下面的思路,帮我写一下我这种代码呢,我是PHP初学者,很多东西还在懵懂状态,一步步在爬:第一步我已经实现,商品的分类,按照不同的行显示,代码如下:$result = mysql_query("SELECT p_class FROM Product group by p_class limit 40"); mysql_data_seek($result, 0);
echo "<table border='1'>\n";
while ($row=mysql_fetch_row($result))
{
for ($i=0; $i<mysql_num_fields($result); $i++ )
{
echo "<tr>";
echo '<td>';
echo "$row[$i]";
echo '</td>';
echo "</tr>\n";
}
}
echo "</table>\n";
mysql_free_result($result);
得到的显示结果HTML下的源码:<table border='1'>
<tr><td>111</td></tr>
<tr><td>2222</td></tr>
<tr><td>3333</td></tr>
</table>
现在,我要分别在111,2222,3333下,横向显示该分类下的商品 细节。应该在原始代码的哪段插入才正确呢?
//连接数据库
function connect() {
$connect = mysql_connect("localhost:3306", "root", "111111");
if (!$connect) {
die("服务器连接失败:" . mysql_error());
}
$conn = mysql_select_db("test", $connect) or die("数据库连接失败!<br/>");
mysql_query("set names utf8");
return $connect;
}
connect();
function sqlQuery($sql,$count){
$res = mysql_query($sql);
if(!$res)
die("SQL:{$sql}<br>Error:".mysql_error());
if(mysql_affected_rows() > 0){
$arr = array();
switch($count){
case 1:
$arr = mysql_fetch_array($res,MYSQL_ASSOC);
break;
case 2:
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
array_push($arr,$rows);
}
break;
}
}else{
echo "查询失败<br>Error:".mysql_error();
}
return $arr;
}//$sql_type = "SELECT p_class FROM Product group by p_class limit 40";
$sql_type = "SELECT type FROM csdn_test4 group by type limit 40";
$types = sqlQuery($sql_type,2);//print_r($types);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>contentByTypeTitle</title>
<style type="text/css">
div{
border:solid 1px;
width:800px;
height:120px;
margin:5px;
}
ul{
list-style:none;
margin:5px;
float:left;
width:200px;
}
li{
padding:5px;
text-decoration:underline;
}
</style>
</head><body>
<?php
foreach($types as $type){
foreach($type as $title){
//$sql_title = "SELECT * FROM Product where p_class='".$title."' limit 0,4";
$sql_title = "SELECT * FROM csdn_test4 where type='".$title."' limit 0,4";
$contents = sqlQuery($sql_title,2);
?>
<div>
<b><?=$title?></b><br>
<?php foreach($contents as $content){ ?>
<ul>
<?php foreach($content as $key=>$cont){ ?>
<li><span><?=$key?></span><?=$cont?></li>
<?php } ?>
</ul>
<?php } ?>
</div>
<?php
}
}
?>
</body>
</html>
代码是一样的,针对你的要求只是html的排版问题,只需要将数据库的连接方式和sql语句替换成你的就行了