作者cleanwind (C.Y.)
看板PHP
标题Re: [请益] 从mysql抓资料後多栏显示
时间Wed May 21 05:06:43 2014
Try this ...
<?php
$totalCount = ceil(mysql_num_rows($result)/3)*3;
for($k = 0; $k < $totalCount; $k ++) {
if($k%3 == 0) { echo '<tr>'; }
if($row = mysql_fetch_array($result)) {
echo '<td style="width:280px;">'.$row[goods_name].'</td>';
}
else {
echo '<td style="width:280px;"></td>';
}
if($k%3 == 2) { echo '</tr>'; }
}
?>
至於要特别指定某栏、某列的值,可以使用 mysql_result ;
此外我会建议将 mysql_fetch_array 换成 mysql_fetch_asoc ,
如果阵列不需要数字键的话。
还有 .... 其实 Table 切版很麻烦,
可以考虑改用 div 配合 float 去排出列表,
套 php Code 会比较神清气爽 XD
※ 引述《mick90207 (阿公)》之铭言:
: 我想做个类似商品清单的显示页面
: 可以每列显示三个商品
: 想请问前辈们该如何撰写呢?
: 有爬到文说可以加个计数器 再利用mod 看看是否要在该回圈中加<tr>
: 只是这样写下来
: if 判断是否加tr
: echo "<tr>";
: do loop
: <td width="280"><? echo $row[goods_name]; ?></td>
: i++
: while...
: <tr>
: do loop
: <td width="280"><? echo $row[price]; ?></td>
: i++
: while...
: 这样的话我一次只能把一栏的资料抓出来
: 我再写第二列价格的时候
: $row[]里面就会接续下去
: mysql有办法指定特别要某栏某列的值吗?
: 我现在的code 先把每栏直接*3看看前端介面用....
: <?php do{?>
: <tr>
: <td width="280"><? echo $row[goods_name]; ?></td>
: <td width="280"><? echo $row[goods_name]; ?></td>
: <td width="280"><? echo $row[goods_name]; ?></td>
: </tr>
: <tr>
: <td><? echo $row[price]; ?></td>
: <td><? echo $row[price]; ?></td>
: <td><? echo $row[price]; ?></td>
: </tr>
: <? }while($row=mysqli_fetch_array($result)); ?>
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.161.70.191
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/PHP/M.1400620006.A.8D1.html
1F:→ MOONRAKER:不过就是用table做table的事而已,用div+float做table 05/21 10:07
2F:→ MOONRAKER:的事才真的是不合理。而且跟无障碍设计违背。 05/21 10:08
3F:→ mick90207:谢谢!! 05/21 11:00
4F:推 mick90207:用DIV搭配float的话 是每个商品都为一个独立的div吗 05/21 11:53
5F:推 mick90207:试出来了~只是如果名称长短不一的话 每个DIV的大小也会 05/21 12:47
6F:→ mick90207:不同 这样要如何排版呢/ 05/21 12:47
7F:→ MOONRAKER:要固定div宽度。所以说应该table做的事就用table就好。 05/21 14:26
8F:→ MOONRAKER:float理解上超不自然的,inline-block还差不多一点。 05/21 14:27
9F:→ danny8376:这里就是table该做的事+1 05/21 17:20
10F:→ cokellen:这种资料列表,确实用table即可 05/21 19:58
11F:→ alog:table for data 05/21 20:58
12F:→ alog:div 是一种排版用的区块元素,本身不该是用来显示密集的资料 05/21 20:58
13F:→ cleanwind:如果要讨论 html element 我还是会投 li 而非 table 05/22 00:30
14F:→ cleanwind:原因有两个,一个是套 Coding 很麻烦,一个是如果以後要 05/22 00:31
15F:→ cleanwind:改版, Code 部分可能得大幅重写。 05/22 00:31
16F:→ cleanwind:然後的确要把元素设成 inline-block 。 05/22 00:34
17F:→ cleanwind:解法千千万万种,原 PO 也可以不用理我的疑问,直接把上 05/22 00:36
18F:→ cleanwind:面的 PHP Code 拿去用,继续使用 Table :p 05/22 00:36
19F:→ danny8376:会想塞table的资料本身就不该是会有排版需求的东西啊-3- 05/22 03:01
20F:→ danny8376:再说li要弄成table状也不会好到哪 05/22 03:02
21F:推 alog:资料呈现应该是用table 排版才用div实作.. 05/22 04:31
22F:→ alog:li是给单栏资料用的 05/22 04:32
23F:推 alog:原po应该是误把切版的意义了 05/22 04:34
24F:推 alog:而原原po问题应该只是卡在资料显示的问题 谈切版 似乎有点远 05/22 04:36
25F:→ alog:我们讲的是资料呈现应该用table tag 而不是说 架构面用table 05/22 04:37
26F:推 alog:不过 我觉得该用什麽应该由发问者自己把ui画出来才知道用那种 05/22 04:48
27F:→ cleanwind:等等,不会推文说的 table 都是 display 的属性吧 T_T" 05/22 06:41
28F:→ cleanwind:那我真的是蠢毙了 Orz 但我还是反对 table 是因为 IE6 05/22 06:42
29F:→ cleanwind:不过真心希望 IE6 应该和 XP 一起消失啊 Orz 05/22 06:58
30F:→ danny8376:IE6? 那东西早没理会啦XD IE8还会稍微注意下www 05/22 07:13
31F:→ cleanwind:长官是老人,老人用 XP , XP 绑 IE , IE 不更新 ..T_T 05/22 08:29
32F:→ danny8376:那偷偷帮忙更新IE8 (X 05/22 09:26
33F:→ MOONRAKER:说归说,其实满担心现在inline-block支援状况到底如何 05/22 12:57
34F:→ MOONRAKER:不断更新的chrome当然没问题 破破碎碎的IE怎麽办哩 05/22 12:58
35F:→ cleanwind:所以我其实通常是用 span 配合 inline-block ,灾请会少 05/22 14:59
36F:→ cleanwind:一点。 05/22 14:59
37F:→ cleanwind:以前帮他更新过 .... 他觉得 IE 6 比较好用,对了他还在 05/22 15:00
38F:→ cleanwind:用 Outlook Express ,常常信件都收到爆 .... (崩溃 05/22 15:00
39F:推 mick90207:请问 mysql_result要怎麽指定某栏某列的值呢? 05/22 17:35
40F:→ mick90207:用大大给的程式码的话 一次只能把一项资料排成三栏 05/22 17:36
41F:→ mick90207:如果有两项资料以上的话呢? 05/22 17:36
42F:→ mick90207:我想排成这样 05/22 17:36
43F:→ mick90207: 商品1 商品2 商品3 05/22 17:37
44F:→ mick90207: 价格 价格 价格 05/22 17:37
45F:→ mick90207: 日期 日期 日期 05/22 17:38
<?php
$totalCount = ceil(mysql_num_rows($result)/3)*3;
for($k = 0; $k < $totalCount; $k ++) {
if($k%3 == 0) { echo '<tr>'; }
if($row = mysql_fetch_array($result)) {
echo '<td style="width:280px;">'.$row[goods_name].
'<br />'.$row[goods_price].
'<br />'.$row[goods_date].'</td>';
}
else {
echo '<td style="width:280px;"></td>';
}
if($k%3 == 2) { echo '</tr>'; }
}
?>
不然在 <td> 里面塞 <table> 或是什麽 div / span 也行。
※ 编辑: cleanwind (1.161.70.191), 05/22/2014 17:43:53
46F:推 mick90207:谢谢 待会来试试 05/23 11:01
47F:→ mick90207:说来真惭愧 楼上在讨论甚麽看不懂 Orz 05/23 11:02
48F:推 mick90207:请问一下 为什麽是<br /> 而不是<br>呢? 05/24 15:53
49F:推 mick90207:然後为什麽商品中的第一项会显示不出来呢? 05/24 17:45
50F:推 mick90207:$row = mysqli_fetch_array($result); 05/24 17:49
51F:→ mick90207:是这里把第一笔资料提取掉了吗?该如何解决呢? 05/24 17:50
52F:推 mick90207:找到解法了 谢谢! 05/24 17:53
53F:→ MOONRAKER:你只要知道现在都是<br />就好,不用问为什麽。 05/26 09:53
54F:推 mick90207:喔......好 05/27 11:38
55F:推 ez880:问个为什麽都不可以喔 -.- 05/29 20:28
56F:→ ez880:在这个实例上看来 根本不是table该做的事情 还叫人用table 05/29 20:29
57F:→ ez880:揪竟是什麽样的心态呢~~ 05/29 20:30
58F:→ danny8376:楼上能解释为何不是table? 纯资料排列就是table啊 05/29 23:23
59F:→ danny8376:不然还麻烦举例何时才能用table 05/29 23:23
60F:→ ez880:告诉我 他这样排版 怎麽跟搜寻引擎说 我的第一列是什麽? 05/29 23:35