看板 PHP 關於我們 聯絡資訊
※ 引述《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>&nbsp;"; : print "<a href='$link?page=$upPage'>上一頁</a>&nbsp;"; : print "<a href='$link?page=$nextPage'>下一頁</a>&nbsp;"; : print "<a href='$link?page=$lastPage'>最後一頁</a>&nbsp;"; 如果你沒有把你的總筆數先取得,最後一頁會是第 0 頁 ... 點了之後那頁的 $startX 會變 -499,你可以自己看看要怎麼處理這個部份。 : fclose($handle); : ?> : 目前顯示的結果為1~500筆都再同一頁 然後一直重複1~500這樣 : 沒有辦法達到分頁的功能 邏輯錯誤的地方應該是在於while之後 : 但是小弟我想不出適當的邏輯 : 麻煩大大們幫我看一下 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.134.25.14