|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
[PHP]读取记录分行显示怎么实现
我要做一个类似相册的东西,在显示记录的时候要实现横4纵3用表格定位,也就是传统说法的重复区域,ASP中可以用for....rs.movenext....next...exit for这样的语法嵌套俩次for就可以实现,但是在PHP中我照着做了几次都不行,不是不能读出要求的记录,就是第二行表格跟第一行的一模一样。
希望大家能给我个提示! |
[code]
<table border=1><tr>
<?
#我先填充一个数组,模仿从数据库得到的数据
for ($i=0;$i<100;$i++)
$data[]=rand(0,$i);
$j=0;
for ($i=0;$i<100;$i++){
if ($j<4){
echo "<td>".$data[$i]."</td>";
$j++;
}
else{
echo "</tr><tr>";
$j=0;
}
}
?>
</table>
[/code] |
上面这段代码是个好思路,但我跟踪$i后发现总是少4,9,14,19,24,29……
正在自己动手修改! |
我不是很懂你的意思
你的意识是不是:
举个例子:图片n张,排列成4x3
1 2 3
4 5 6
7 8 9
10 11 12
这个样子排吗?? |
vally19在上个帖子中说
对,就是这个样子,但是我对MYSQL不熟悉,不知道咱们用数组和循环来控制输出。
|

[code]<?
/*数据库链接
$sql=“sql”//sql查询语句
$result= mysql_db_query("pic", $sql);
$rs= mysql_fetch_array($result)
*/
for ($i=0;$i<5;$i++)//纵向循环
{
for ($j=0;$j<4;$j++)//横向循环
{
echo "<td>".$rs["id"]."</td>";//如何让循环执行一次记录集自动向后移动一
}
echo "</tr>";
}
?>[/code]
这个代码肯定不对,但应该思路就是这样的,大侠帮看一下! |
嘿嘿,不好意思楼主,我的代码犯了个很低级的错误……当$j=4的时候我忘记输出了:p
代码修改如下:
[code]<table border=1><tr>
<?
$j=0;
for ($i=0;$i<100;$i++){
if ($j<4){
echo "<td>$i</td>";
$j++;
}
else{
echo "</tr><tr>";
$j=0;
$i--;
}
}
?>
</table>
[/code] |
感谢Sheneyan的帮助,现在思路更清晰了,但是怎样把变量i跟数据库里的记录结合起来我还是不会,你能不能写一个代码出来呢,不要用数组来模拟数据库。 |
老二在上个帖子中说
。。。。。。我特服 |
呵呵,我用个笨办法
pageft($totalpage,12);//分页
<?php
$query="...";
$i = 0;
$result=mysql_query($query) or die(mysql_error());
while ($info = mysql_fetch_array($result))
{
$i++;
if ($i % 4 == 1) {
echo "<tr>\n";
}
echo "<td align=center>\n";
echo "<TABLE cellSpacing=0 cellPadding=0 width=\"180\" border=0 >";
echo "<TR>";
echo "<TD align=middle>";
ecgo "你要输入的数据库内容";
echo "</td></tr>";
echo "</table>\n";
echo "</td>\n";
if ($i % 4 == 0) {
echo "</tr>";
}
}
?>
echo $page;//输出页
大致上就排列成4x3的形式,呵呵,我还没看到数组那块,就将就着吧,希望不会误人子弟,乱七八糟的弄的
|
老二在上个帖子中说
老大……
这个问题……说实话,我前面贴的那些内容已经属于编程的入门阶段的内容了……写那些内容我已经很不好意思了(何况还写错-_-)……再怎么把这些东西和数据库合起来……我会有点郁闷的哦
好,好人做到家……下面是包括了数据库的代码……因为牵涉到数据库,所以代码没测试,可能有笔误,将就着看吧...
[code]
<?
$str="select * from 表";
$result=mysql_query($str);
while($row=mysql_fetch_Array($result)) $rs[]=$row;
?>
<table border=1><tr>
<?
$j=0;
if (count($rs)>0){
foreach ($rs as $rr){
if ($j<4)
$j++;
else{
echo "</tr><tr>";
$j=0;
}
echo "<td>".$rr['字段名']."</td>";
}
}
else{
?>
<tr><td>没有数据</td></tr>
<?
}
?>
</table>
[/code] |
不好意思麻烦各位了,主要是我测试了N次都是显示12条记录都是第一条,检查了一下好像是结构的问题,“{}”的问题,再次谢谢大家,[b]深空[/b]你说你特服,那我也没有办法,:)
要知道从ASP到PHP过渡好多地方不习惯,范一些低级错误也在所难免,我是PHP菜鸟才在这里提问请求帮助的,当然你也有嘲笑我的权利!
|
问题已经解决,用的Sheneyan的方法,其实本来是个很简单的问题被我复杂化了,主要是我没有查到数组遍历的这个foreach 。以下是我修改Sheneyan的代码,Sheneyan那段从第二行开始变成5列了,主要是$j++的位置。
再次感谢大家的帮助!
[code]<?
$query="select * from table";
$result = mysql_db_query("database", $query);
while($row=mysql_fetch_array($result))
$rs[]=$row;
?>
<table border=1>
<tr>
<?
$j=0;
if (count($rs)>0){
foreach ($rs as $rr){
if ($j<4)
{echo "<td>".$rr[字段名]."</td>\n";
$j++;}
else{
echo "</tr>\n<tr>\n";
$j=0;
}
}
}
else{
?>
<tr>
<td>没有数据</td>
<?
}
?></tr>
</table>[/code] |
被你一说我才发现我学php居然都有半年了耶:)
楼上的,你这样写可能会少掉很多数据的,因为当j=4的时候没有输出,这和我一开始犯的低级错误是一样的。 |
Sheneyan在上个帖子中说
果然丢失了很多记录,但你那个代码显示效果是:
[html]<table border=1>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>10</td>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
</tr>
<tr>
<td>15</td>
</tr>
</table>[/html]
我再研究一下好了! |
|