※ 引述《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