作者SKL (:Q~~~~~~~)
看板PHP
标题Re: [请益] 汇入档案在分页
时间Sun Aug 8 04:42:08 2010
※ 引述《qaz5620 (阿德)》之铭言:
: 我参考了版有的汇入csv档案 以及分页的方法
: 可是我试了好久还是没能达到想要的结果
: 可以请大大帮们我看是哪边错误吗 感谢
: <?php
: $intRowsOfPage = 500;//每页显示500笔
: $page = ($_GET['page'] == '') ? '1' : (int)$_GET['page'];//目前是第几页
: $lastPage = ceil(($intTotal/$intRowsOfPage));
: $upPage = ($page == 1) ? '1' : ($page-1);
: $nextPage = ($page == $lastPage) ? $page : $page+1;
: $startX = ((($page - 1) * $intRowsOfPage) + 1);
: $endX = $startX + $intRowsOfPage;
先来个题外话,你这边的写法 $lastPage = 0 ,因为没有 $intTotal
首先要知道的是你的 $startX 跟 $endX 是什麽意思,
以这边来说 $startX 指的是当前页开始的笔数 = (就是当前页数-1) * 每页要显示的笔数 + 1
e.g. 第一页 => $startX = (1-1) * 500 + 1 = 1
第二页 => $startX = (2-1) * 500 + 1 = 501
$endX 名字上指的是当前页面结束的笔数,可是这边的写法代表的会是下一页开始的笔数,
不过这边写法没差因为可以在判断的时候可以用 < $endX 来做
e.g. 第一页 => $endX = 1 + 500 = 501
第二页 => $endX = 501 + 500 = 1001
(个人比较喜欢先 -1,因为意义上比较对 XD)
你的问题出在:
依照下面的用法感觉你的 $x 要指的是当前的列数?
可是你在 for 回圈那边却把他指定成你这页开始的第一笔然後 ++ 跑五百次,
整个逻辑变成每读进一列就印 当前页开始的笔数~结束的笔数,
又 因为你一直都在第一页,所以你每读一行就会印一次 1~500。
你要的逻辑:
应该是先用个变数让它等於 0 or 1 之後用来代表当前的列数,
每读取一列要把这个变数 ++ (这个也可以在後面都处理完後再做),
判断当前列是不在 $startX 跟 $endX 之间,
如果是的话就印出来你要的栏位,
在当前列数 > or >= or == $endX 的时候就可以 break; 提早离开回圈,不用一直读到档尾。
: $handle = fopen("bulkdata.csv", "r"); 开启档案来源
: while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 来源不为空时 资料放进data
: for ($x=$startX;$x<$endX;$x++){ 印出1~500笔资料
: print '第 ' . $x . '本书<br />' . "\n";
: }
: }
: $link = $_SERVER['PHP_SELF'];
: print "<a href='$link?page=1'>第一页</a> ";
: print "<a href='$link?page=$upPage'>上一页</a> ";
: print "<a href='$link?page=$nextPage'>下一页</a> ";
: print "<a href='$link?page=$lastPage'>最後一页</a> ";
如果你没有把你的总笔数先取得,最後一页会是第 0 页 ...
点了之後那页的 $startX 会变 -499,你可以自己看看要怎麽处理这个部份。
: fclose($handle);
: ?>
: 目前显示的结果为1~500笔都再同一页 然後一直重复1~500这样
: 没有办法达到分页的功能 逻辑错误的地方应该是在於while之後
: 但是小弟我想不出适当的逻辑
: 麻烦大大们帮我看一下 感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.134.25.14