ทำแบ่งหน้าได้แล้ว แต่ข้อมูลไม่แบ่งให้ตามที่กำหนดค่ะ
ทำการแบ่งหน้าได้แล้ว แต่ที่กำหนดให้แต่ละหน้ามีข้อมูล 10 แถว มันไม่แบ่งให้
จากตัวอย่างคิวรี่ออกมาจะได้ 19 แถว เพจแบ่งเป็น 2 เพจ แล้ว แต่ข้อมูลมันมารวมอยู่เพจแรกหมดเลยทั้ 19 แถว
รวบกวนดูให้น่อยค่ะ
ดูตัวอย่างจากกระทู้นี้ค่ะ
เห็นมีปัญหากันเยอะ เลยเอามาแจก ระบบ แบ่งหน้าการปริ้น css page-break-after
Code (PHP)
<?
include("conn.php");
$strSQL = " select
pohd.DocuNo,
CONVERT( VARCHAR( 20 ), pohd.DocuDate, 103 ) as DocuDate ,
pohd.RefDocuNo,
EMDept.Deptcode,
EMVendor.VendorName ,
pohd.SumGoodAmnt,
pohd.BillDiscAmnt,
pohd.BillAftrDiscAmnt,
pohd.NetAmnt,
SUM(POInvDT.TotaExcludeAmnt) as ToUse,
SUM(POInvHD.AftrAdvnAmnt) as crnote,
pohd.DocuStatus,
pohd.CancelFlag
FROM POHD pohd
left join EMVendor EMVendor on pohd.VendorID = EMVendor.VendorID
left join emdept emdept on pohd.deptid=emdept.deptid
left join poinvdt on poinvdt.poid=pohd.poid
left join POInvHD on POInvHD.LastInvNo=POInvDT.RefeNo
where pohd.docudate between '2013/01/01' and '2013/01/31'
and pohd.docutype='305' and pohd.MultiCurr = 'N' and pohd.docustatus in ('p','c')
GROUP BY
pohd.DocuNo,
pohd.DocuDate,
pohd.RefDocuNo,
EMDept.Deptcode,
EMVendor.VendorName ,
pohd.SumGoodAmnt,
pohd.BillDiscAmnt,
pohd.BillAftrDiscAmnt,
pohd.NetAmnt,
pohd.DocuStatus,
pohd.CancelFlag,
poinvdt.PONo
order by pohd.docuno " ;
$objQuery = mssql_query($strSQL) or die ("Error Query [".$strSQL."]");
include 'header.php';
//$sql ="select data_table order by id";
//$result = mysql_query($sql);
///////// การวนลูปโดยใช้ while loop จากฐานข้อมูล
//while($array = mysql_fetch_array($result)){
////// การวนลูปโดยใช้ for
for($i=1;$i<20;$i++){
$page_print = $i; /////รับค่าจากค่าที่วนลูปโดย for loop /// $array['id']; /// ใช้คำสั่งนี้เมื่อรับค่าจาก while loop
$data_show = 10;////////////// จำนวนที่จะสั่งปริ้นต่อหน้า
if($page_print%$data_show==0)
{
//include 'footer.php';
echo "<div style='page-break-after: always'>";
echo "</div>";
include 'header.php';
}
?>
<table>
<?
while($objResult = mssql_fetch_array($objQuery)){
?>
<tr>
<td><?=$objResult["DocuNo"]; ?></td>
</tr>
<?
$num++;
}
?>
</table>
<?
}
include 'footer.php';
?>
<?
mssql_close($objConnect);
?>
</div>
Tag : PHP, MySQL, Ms SQL Server 2008, HTML/CSS
Date :
2014-06-20 16:31:32
By :
AnnYZaa
View :
1749
Reply :
25
ใส่ limit '.(($curPage-1) * $per_page).','.$per_page
ต่อท้าย statement ไปด้วยครับ
เช่น
$curPage=1; $per_page=10; // $curPage ต้องมากกว่า 0
$sql='select * from table where 1 limit '.($curPage*$per_page).','.$per_page;
ประวัติการแก้ไข 2014-06-20 17:10:56
Date :
2014-06-20 17:08:21
By :
Chaidhanan
ฐานข้อมูลเป็น sql server 2008 ค่ะ ใช้ limit ไม่ได้
Date :
2014-06-21 09:29:02
By :
AnnYZaa
Code (PHP)
////////////////////////////////////////////////////////////////////////////////
function row_count($table, $fldName){
// $fldName ควรเป็น Primary Key
$qr='select count('.$fldName.') c from '.$table;
$rs=mysql_query($qr);
if(mysql_errno()) return false;
$ro=mysql_fetch_assoc($rs); mysql_free_result($rs);
return $ro['c'];
}
function page_count($rowCount, $per_page){
$mod=$rowCount % $per_page;
return (int)(($rowCount - $mod) / $per_page + ($mod? 1 : 0));
}
/////////////////////////////////////////////////////////////////////////////////
$tablename = 'Your Table name'; // ใส่ให้ถูกต้องด้วยครับ
$primary_key = 'Field Primary Key'; // ใส่ให้ถูกต้องด้วยครับ
$perpage=isset($_REQUEST['perpage'])? $_REQUEST['perpage'] : 20;
$curPage=isset($_REQUEST['curPage'])? $_REQUEST['curPage'] : 1;
$num_rows=row_count($tablename, $primary_key); // หาจำนวน Row
$curPage=isset($_REQUEST['curPage'])? $_REQUEST['curPage'] : 1;
$count_page=page_count($num_rows, $perpage);
////////////////////// sample statment Mysql ////////////////////////////////////////////////////////////
// $qr='select * from '.$tablename.' order by id desc limit '.(($curPage-1)*$perpage).','.$perpage;
// statement นี้ต้องแก้ไขตากความเป็นจริงครับ นี้เป็นแค่ตัวอย่าง
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ใส่โค๊ดข้างบนหลัง include ครับ และปรับแก้ตามความต้องการครับ
ลองอ่านดูครับ ชื่อฟีลด์บอก ความหมายของตัวมันเองอยู่แล้วครับ
ประวัติการแก้ไข 2014-06-21 09:39:04
Date :
2014-06-21 09:34:29
By :
Chaidhanan
ผิดอีกแล้ว ROWNUM มันเป็น oracle มืนครับ จำผิดจำถูก
SQL น่าจะใช้ TOP มั้งครับ ลองค้นดูครับ เพื่อจะเจอก่อนผม เพราะผมไม่ค่อยได้ใช้ครับ SQL Server
ประวัติการแก้ไข 2014-06-21 09:48:27 2014-06-21 09:49:56 2014-06-21 09:54:22 2014-06-21 09:56:17
Date :
2014-06-21 09:41:22
By :
Chaidhanan
คงต้องใช้ where id<firstid สำหรับ prior page
หรือ id>lastid สำหรับ next page
Code (PHP)
$isPrior=isset($_REQUEST['isprior']);
$isNext=isset($_REQUEST['isnext']);
$qr='select TOP '.$perpage.' * from tablename '.
'where ( ตรวจสอบ ของคุณ ) and ('.
($isPrior? 'fieldkey < '.$firstid : ($isNext? 'fieldkey>'.$lastid )).
')' .
($isPrior? ' order by fieldkey desc' : '');
$rs=mssql_query($qr);
$newFirstid=''; $newLastid='';
while($ro=mssql_fetch_assoc($rs)){
if($newFirstid=='') $newFirstid=$ro['fieldkey'];
$newLastid=$ro['fieldkey';
if($isPrior){
$textHTML='สิ่งที่คุณต้องการ' . $textHTML; // แสดง row ใหม่ ก่อน row เก่า FILO
}else{
$textHTML .='สิ่งที่คุณต้องการ'; // แสดง row เก่า ก่อน row ใหม่ FIFO
}
}
แล้วก็เอา $newFirstID และ $newLastid ไปทำเป็นปุ่ม Link เช่น
<a href="?isprior=1&firstid=$newFirstid" >Prior</a>
<a href="?isnext=1&lastid=$newLastid" >Next</a>
ปล. fieldkey แก้ ให้เป็น field primary key ของ table นะครับ
ต้องขอโทษด้วยครับไม่รอบคอบที่ นึกว่าเป็น MySql ผมไม่ค่อยได้เห็น PHP ใช้กับ MsSql นะครับ
ประวัติการแก้ไข 2014-06-21 10:44:16 2014-06-21 10:59:07
Date :
2014-06-21 10:42:57
By :
Chaidhanan
Code (PHP)
$isPrior=isset($_REQUEST['isprior']);
$isNext=isset($_REQUEST['isnext']);
$firstid=$isPrior? $_REQUEST['firstid'] : '';
$lastid=$isNext? $_REQUEST['lastid'] : '';
$qr='select TOP '.$perpage.' * from tablename '.
'where ( ตรวจสอบ ของคุณ )'.
(($isPrior | $isNext)? ' and ('.
($isPrior? 'fieldkey < '.$firstid : 'fieldkey>'.$lastid ).
')' : '') .
($isPrior? ' order by fieldkey desc' : '');
$rs=mssql_query($qr);
$newFirstid=''; $newLastid=''; $textHTML='';
while($ro=mssql_fetch_assoc($rs)){
if($isPrior){
if($newLastid=='') $newLastid=$ro['fieldkey'];
$newFirstid=$ro['fieldkey';
$textHTML='สิ่งที่คุณต้องการ' . $textHTML; // แสดง row ใหม่ ก่อน row เก่า FILO
}else{
if($newFirstid=='') $newFirstid=$ro['fieldkey'];
$newLastid=$ro['fieldkey';
$textHTML .='สิ่งที่คุณต้องการ'; // แสดง row เก่า ก่อน row ใหม่ FIFO
}
}
มีปรับปรุงนิดหน่อย
ประวัติการแก้ไข 2014-06-21 15:49:21 2014-06-21 15:51:53
Date :
2014-06-21 15:43:52
By :
Chaidhanan
ขอโค๊ดที่แก้ไขแล้วมาดูหน่อยครับ
Date :
2014-06-23 09:47:33
By :
Chaidhanan
ี่เออเร่อร์แบบนีี้ เป็น statement ที่ส่งไปยัง mssql ผิดไวยกรณ์ครับ
Incorrect syntax near '*'. (severity 15)
Date :
2014-06-23 09:48:51
By :
Chaidhanan
Code (PHP)
<meta http-equiv="Content-Type" content="text/html; charset=Tis-620" />
<link href="style.css" rel="stylesheet" type="text/css" />
<body>
<?
include("conn.php");
include 'header.php';
$isPrior=isset($_REQUEST['isprior']);
$isNext=isset($_REQUEST['isnext']);
$firstid=$isPrior? $_REQUEST['firstid'] : '';
$lastid=$isNext? $_REQUEST['lastid'] : '';
$qr='select TOP '.$perpage.' * from PoHD '.'where ( DocuNo = "QC197/E-0147" )'.(($isPrior | $isNext)? ' and ('.($isPrior? 'fieldkey < '.$firstid : 'fieldkey>'.$lastid ).')' : '') .($isPrior? ' order by fieldkey desc' : '');
$rs=mssql_query($qr) ;
$newFirstid=''; $newLastid=''; $textHTML='';
while($ro=mssql_fetch_assoc($rs)){
if($isPrior){
if($newLastid=='') $newLastid=$ro['fieldkey'];
$newFirstid=$ro['fieldkey'];
$textHTML='สิ่งที่คุณต้องการ' . $textHTML; // แสดง row ใหม่ ก่อน row เก่า FILO
}else{
if($newFirstid=='') $newFirstid=$ro['fieldkey'];
$newLastid=$ro['fieldkey'];
$textHTML .='สิ่งที่คุณต้องการ'; // แสดง row เก่า ก่อน row ใหม่ FIFO
}
}
include'footer.php';
?>
</body>
Date :
2014-06-23 10:22:20
By :
AnnYZaa
เห็น เออเร่อร์แล้วครับ $perpage ไม่ได้มีการกำหนด
ต้องเขียน ผสม กับ คห 4 ครับในการกำหนด ปุ่ม คลิกหน้าต่อไป หรือ ย้อนหลังครับ
ประวัติการแก้ไข 2014-06-23 11:13:57
Date :
2014-06-23 10:50:22
By :
Chaidhanan
มาแอบดู การแบ่งหน้า sql server อิอิ
ปล.เปลี่ยนฟังก์ชั่น mssql เป็น sqlsrv ได้แล้วนะครับ
Date :
2014-06-23 13:14:36
By :
compiak
ยังไม่ได้เลยค่ะ
แต่อันนี้ไม่ต้องมีคลิกหน้าถัดไปนะคะ จะให้อยู่ในหน้าเดียวกันหมดเลยค่ะ
Code (PHP)
<meta http-equiv="Content-Type" content="text/html; charset=Tis-620" />
<link href="style.css" rel="stylesheet" type="text/css" />
<body>
<?
include("conn.php");
include 'header.php';
$perpage=isset($_REQUEST['perpage'])? $_REQUEST['perpage'] : 20;
$isPrior=isset($_REQUEST['isprior']);
$isNext=isset($_REQUEST['isnext']);
$firstid=$isPrior? $_REQUEST['firstid'] : '';
$lastid=$isNext? $_REQUEST['lastid'] : '';
$qr=' select TOP '.$perpage.' * from POHD '.' where ( DocuDate between "2013/01/01" and "2013/01/05" )'.(($isPrior | $isNext)? ' and ('.($isPrior? 'fieldkey < '.$firstid : 'fieldkey>'.$lastid ).')' : '') .($isPrior? ' order by fieldkey desc' : '' );
$rs=mssql_query($qr) ;
if(!$rs){
echo $qr, "<br/>\n",mssql_get_last_message(); exit;
}
$newFirstid=''; $newLastid=''; $textHTML='';
while($ro=mssql_fetch_assoc($rs)){
if($isPrior){
if($newLastid=='') $newLastid=$ro['fieldkey'];
$newFirstid=$ro['fieldkey'];
$textHTML='สิ่งที่คุณต้องการ' . $textHTML; // แสดง row ใหม่ ก่อน row เก่า FILO
}else{
if($newFirstid=='') $newFirstid=$ro['fieldkey'];
$newLastid=$ro['fieldkey'];
$textHTML .='สิ่งที่คุณต้องการ'; // แสดง row เก่า ก่อน row ใหม่ FIFO
}
}
include'footer.php';
echo $qr;
?>
</body>
Date :
2014-06-23 13:52:53
By :
AnnYZaa
งงแล้วครับ โค๊ดที่ทำแบ่งหน้า กับโค๊ดที่ไม่ต้องแบ่งหน้า มันคนละอย่างนะครับ
แล้วเวลามี error ช่วยนำมาแสดงด้วยครับ บอกว่ายังไม่ได้ ผมแก้ไม่่ถูกเหมือนกันครับ
เวลาผมเช็ค error ผมจะสั่งให้ echo ที่ละบันทัดเมื่อดูว่ามัน error อย่างไร และแก้เป็นบันทัดไปครับ
Date :
2014-06-23 14:01:49
By :
Chaidhanan
ขอโทษค่ะ คือจะแบ่งหน้าตามภาพนี่อ่ะค่ะ
ส่วนโค้ดล่าสุด
Code (PHP)
<meta http-equiv="Content-Type" content="text/html; charset=Tis-620" />
<link href="style.css" rel="stylesheet" type="text/css" />
<body>
<?
include("conn.php");
include 'header.php';
$perpage=isset($_REQUEST['perpage'])? $_REQUEST['perpage'] : 20; >> บรรทัดที่เพิ่ม
$isPrior=isset($_REQUEST['isprior']);
$isNext=isset($_REQUEST['isnext']);
$firstid=$isPrior? $_REQUEST['firstid'] : '';
$lastid=$isNext? $_REQUEST['lastid'] : '';
$qr=' select TOP '.$perpage.' * from POHD '.' where ( DocuDate between "2013/01/01" and "2013/01/05" )'.(($isPrior | $isNext)? ' and ('.($isPrior? 'fieldkey < '.$firstid : 'fieldkey>'.$lastid ).')' : '') .($isPrior? ' order by fieldkey desc' : '' );
$rs=mssql_query($qr) ;
if(!$rs){
echo $qr, "<br/>\n",mssql_get_last_message(); exit;
}
$newFirstid=''; $newLastid=''; $textHTML='';
while($ro=mssql_fetch_assoc($rs)){
if($isPrior){
if($newLastid=='') $newLastid=$ro['fieldkey'];
$newFirstid=$ro['fieldkey'];
$textHTML='สิ่งที่คุณต้องการ' . $textHTML; // แสดง row ใหม่ ก่อน row เก่า FILO
}else{
if($newFirstid=='') $newFirstid=$ro['fieldkey'];
$newLastid=$ro['fieldkey'];
$textHTML .='สิ่งที่คุณต้องการ'; // แสดง row เก่า ก่อน row ใหม่ FIFO
}
}
include'footer.php';
echo $qr;
?>
</body>
ถ้าเพิ่มบรรทัด $perpage=isset($_REQUEST['perpage'])? $_REQUEST['perpage'] : 20;
จะไม่ query ไม่ออกอะไรมาเลย
แต่ถ้าเพิ่มบรรทัดนั้นเข้าไปจะ error ตามนี้ค่ะ
Warning: mssql_query() [function.mssql-query]: message: Incorrect syntax near '*'. (severity 15) in C:\AppServ\www\winspeed\test3.php on line 19
Warning: mssql_query() [function.mssql-query]: Query failed in C:\AppServ\www\winspeed\test3.php on line 19
Date :
2014-06-23 17:21:46
By :
AnnYZaa
แทรก บันทัด 18
echo
$qr='
ผมอยากเห็น $qr
Date :
2014-06-23 17:30:11
By :
Chaidhanan
ผมว่าแย่แล้ว รู้สึกจะแบ่งหน้า งานพิมพ์ บน printer ใช่ไหมครับ
Date :
2014-06-23 17:32:38
By :
Chaidhanan
ขอโทษผมมั่วเอง อ่านไม่หมด ครั้งนี้จะเป็นบทเรียนสำหรับผม ในการอ่านข้อมูล ต้องอ่านให้ละเอียด
ทำให้เสียเวลาไปมากเลยครับ ขอโทษจริงๆ
Date :
2014-06-23 17:35:30
By :
Chaidhanan
เดี๋ยวผมค้นให้ครับ เคยทำอยู่ แต่ต้องใช้เวลาหาหน่อยครับ มันมีหลายเวป
Date :
2014-06-23 17:37:36
By :
Chaidhanan
แทรกที่ับันทัด 34 - 35
echo '<div style="page-break-after: always"></div>';
สำหรับ ไฟล์อันนี้
บันทัดที่ 37 เอาออกไปเลยครับ
13. $perpage=isset($_REQUEST['perpage'])? $_REQUEST['perpage'] : 20; >> บรรทัดที่เพิ่ม
14.$isPrior=isset($_REQUEST['isprior']);
15.$isNext=isset($_REQUEST['isnext']);
16.$firstid=$isPrior? $_REQUEST['firstid'] : '';
17.$lastid=$isNext? $_REQUEST['lastid'] : '';
18.$qr=' select TOP '.$perpage.' * from POHD '.' where ( DocuDate between "2013/01/01" and "2013/01/05" )'.(($isPrior | $isNext)? ' and ('.($isPrior? 'fieldkey < '.$firstid : 'fieldkey>'.$lastid ).')' : '') .($isPrior? ' order by fieldkey desc' : '' );
19.$rs=mssql_query($qr) ;
แก้เป็น
Code (PHP)
// $perpage=isset($_REQUEST['perpage'])? $_REQUEST['perpage'] : 20; >> บรรทัดที่เพิ่ม
$isPrior=isset($_REQUEST['isprior']);
$isNext=isset($_REQUEST['isnext']);
$firstid=$isPrior? $_REQUEST['firstid'] : '';
$lastid=$isNext? $_REQUEST['lastid'] : '';
$qr=' select TOP 20 * from POHD where ( DocuDate between "2013/01/01" and "2013/01/05" )'.
(($isPrior | $isNext)? ' and ('.($isPrior? 'fieldkey < '.$firstid : 'fieldkey>'.$lastid ).')' : '') .
($isPrior? ' order by fieldkey desc' : '' );
$rs=@mssql_query($qr) ;
ประวัติการแก้ไข 2014-06-23 17:50:30 2014-06-23 17:51:51
Date :
2014-06-23 17:50:11
By :
Chaidhanan
ถ้า query แบบนี้ มีอะไรเกิดขึ้นเลยค่ะ ไม่มีเออเรอด้วย
Code (PHP)
$qr=' select TOP 20 * from POHD where ( DocuDate between "2013/01/01" and "2013/01/05" )'.
(($isPrior | $isNext)? ' and ('.($isPrior? 'fieldkey < '.$firstid : 'fieldkey>'.$lastid ).')' : '') .
($isPrior? ' order by fieldkey desc' : '' );
ตรงเงื่อนไขต้องใส่เป็น single quote รึป่าวคะ '2013/01/01' and '2013/01/05'
ลองเปลี่ยนดู และเพิ่ม double quote เปิดปิด stagment มันก็ยังเออเรออยู่ค่ะ
Code (PHP)
$qr="select TOP 20 * from POHD where ( DocuDate between '2013/01/01' and '2013/01/05' )'.
(($isPrior | $isNext)? ' and ('.($isPrior? 'fieldkey < '.$firstid : 'fieldkey>'.$lastid ).')' : '') .
($isPrior? ' order by fieldkey desc' : '' )";
ผลที่ได้
select TOP 20 * from POHD where ( DocuDate between '2013/01/01' and '2013/01/05' )'. (( | )? ' and ('.(? 'fieldkey < '. : 'fieldkey>'. ).')' : '') . (? ' order by fieldkey desc' : '' )
Unclosed quotation mark after the character string ' : ' )'.
Date :
2014-06-24 11:17:04
By :
AnnYZaa
select TOP 20 * from POHD where ( DocuDate between '2013/01/01' and '2013/01/05' )'. (( | )? ' and ('.(? 'fieldkey < '. : 'fieldkey>'. ).')' : '') . (? ' order by fieldkey desc' : '' )
Unclosed quotation mark after the character string ' : ' )'.
ตรงนี้มันไม่ใช่ผลที่ได้ครับ
แค่ คำสั่ง echo $qr; เพื่อโชว์ คำสั่ง sql คุณก็ไม่ยอมทำให้ แล้วจะให้ผมช่วยอะไรล่ะครับ
คุณแค่ลอกอะไรมาให้ผมแล้ว โดยที่ไม่ได้ รันโปรแกรมครับ
เอาเป็นว่า ผมช่วยไม่ได้แล้วครับ คงต้องให้คนอื่นช่วยแทนแล้วนะครับ
บายครับ
Date :
2014-06-24 15:42:08
By :
Chaidhanan
Load balance : Server 04