รบกวนหน่อยครับ การแบ่งหน้าpageด้วยoracle
<?
$objConnect = oci_connect("mdsys","nicky","");
$strSQL = "SELECT * FROM MEMBER ORDER BY ID_MEM ASC";
$objParse = oci_parse ($objConnect, $strSQL);
oci_execute ($objParse,OCI_DEFAULT);
$Num_Rows = oci_fetch_all($objParse, $Result);
$Per_Page = 3; // Per Page
$Page = $_GET["Page"];
if(!$_GET["Page"])
{
$Page=1;
}
$Prev_Page = $Page-1;
$Next_Page = $Page+1;
$Page_Start = (($Per_Page*$Page)-$Per_Page);
if($Num_Rows<=$Per_Page)
{
$Num_Pages =1;
}
else if(($Num_Rows % $Per_Page)==0)
{
$Num_Pages =($Num_Rows/$Per_Page) ;
}
else
{
$Num_Pages =($Num_Rows/$Per_Page)+1;
$Num_Pages = (int)$Num_Pages;
}
$Page_End = $Per_Page * $Page;
IF ($Page_End > $Num_Rows)
{
$Page_End = $Num_Rows;
}
?>
<table width="600" border="1">
<tr>
<th width="91"> <div align="center">MemberID </div></th>
<th width="98"> <div align="center">UserName </div></th>
<th width="198"> <div align="center">pass </div></th>
<th width="97"> <div align="center">Name </div></th>
<th width="59"> <div align="center">Lname </div></th>
<th width="71"> <div align="center">Phone </div></th>
<th width="81"> <div align="center">mail </div></th>
<th width="91"> <div align="center">adress </div></th>
</tr>
<?
for($i=$Page_Start;$i<$Page_End;$i++)
{
?>
<tr>
<td><div align="center"><?=$Result["ID_MEM"][$i];?></div></td>
<td><?=$Result["USERNAME"][$i];?></td>
<td><?=$Result["PASS"][$i];?></td>
<td><div align="center"><?=$Result["NAME"][$i];?></div></td>
<td align="right"><?=$Result["LNAME"][$i];?></td>
<td align="right"><?=$Result["PHONE"][$i];?></td>
<td align="right"><?=$Result["MAIL"][$i];?></td>
<td align="right"><?=$Result["ADDRESS"][$i];?></td>
</tr>
<?
}
?>
</table>
<br>
Total <?= $Num_Rows;?> Record : <?=$Num_Pages;?> Page :
<?
if($Prev_Page)
{
echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page'><< Back</a> ";
}
for($i=1; $i<=$Num_Pages; $i++){
if($i != $Page)
{
echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i'>$i</a> ]";
}
else
{
echo "<b> $i </b>";
}
}
if($Page!=$Num_Pages)
{
echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page'>Next>></a> ";
}
oci_close($objConnect);
?>
โค้ดด้านบนใช่งานได้ปกติ แบ่งหน้าได้ข้อมูลออกตามต้องการ
แต่มีหน้าเพจอยู่หน้านึงที่ต้องใช้พยามยามดัดแปลงมาใส แต่มันไม่แสดงข้อมูลออกมา และไม่สามารถเปลี่ยนหน้าได้
คือเพจด้านล่างนี้อะครับ ไม่มีerrorน่ะครับ แต่ข้อมูลมันไม่ออก แต่คิดว่าพอจะเจอสาเหตุคือตรง ที่เปนสีแดงอะครับ พอเอาออกข้อมูลก้อมาแต่ไม่สามารถแบ่งเพจได้ ช่วยดูหน่อยน่ะครับ ขอบคุณครับ
<?php
include("connectOracle.php");
$type = $_POST['type'];
$type1 = '';
$objSQL = "SELECT TYPE_NAME FROM TYPE_PRODUCT ";
$objSQL .="WHERE ID_TYPE = '".$type."'";
$head = oci_parse($objConnect,$objSQL);
oci_execute($head);
while($s = oci_fetch_array($head,OCI_BOTH)) {
$type1 = $s[0];
}
$objTYPE = "SELECT PID,PRODUCT_NAME FROM PRODUCT ";
$objTYPE .="WHERE ID_TYPE = '".$type."'";
$resault = oci_parse($objConnect,$objTYPE);
$resaultt = oci_parse($objConnect,$objTYPE);
oci_execute($resault,OCI_DEFAULT);
oci_execute($resaultt,OCI_DEFAULT);
$Per_Page = 2; // Per Page
$Page = $_GET["Page"];
if(!$_GET["Page"])
{
$Page=1;
}
$Prev_Page = $Page-1;
$Next_Page = $Page+1;
$Page_Start = (($Per_Page*$Page)-$Per_Page);
if($Num_Rows<=$Per_Page)
{
$Num_Pages =1;
}
else if(($Num_Rows % $Per_Page)==0)
{
$Num_Pages =($Num_Rows/$Per_Page) ;
}
else
{
$Num_Pages =($Num_Rows/$Per_Page)+1;
$Num_Pages = (int)$Num_Pages;
}
$Page_End = $Per_Page * $Page;
IF ($Page_End > $Num_Rows)
{
$Page_End = $Num_Rows;
}
if(oci_fetch_all($resaultt,$a)==0) {
echo "รายการนี้ ยังไม่มีสินค้า";
exit();
}
?>
<?
echo <<<TB
<table id="tb_product" width="600" border="1" cellpadding="3" style="border-collapse:collapse;">
<caption><font color='#FFFFFF'>$type1</font></caption>
<tr bgcolor="#eeeeff"><th width="50">ลำดับ</th><th width="450">ชื่อสินค้า</th><th>ดำเนินการ</th></tr>
TB;
$is = 1;
while($Num_Rows = oci_fetch_array($resault,OCI_BOTH)) {
for($i=$Page_Start;$i<$Page_End;$i++)
{
echo <<<TBODY
<tr id="row_{$Num_Rows['PID']}" align="center" valign="top">
<td><font color='#FFFFFF'>$is </font></td><td align="left"><font color='#FFFFFF'>{$Num_Rows['PRODUCT_NAME']}</font></td>
<td><button onclick="editProduct({$Num_Rows['PID']})">Edit</button>
<button onclick="deleteProduct({$Num_Rows['PID']})">Delete</button>
</td>
</tr>
TBODY;
}
$is++;
}
echo "</table>";
?>
Total <?= $Num_Rows;?> Record : <?=$Num_Pages;?> Page :
<?
if($Prev_Page)
{
echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page'><< Back</a> ";
}
for($i=1; $i<=$Num_Pages; $i++){
if($i != $Page)
{
echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i'>$i</a> ]";
}
else
{
echo "<b> $i </b>";
}
}
if($Page!=$Num_Pages)
{
echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page'>Next>></a> ";
}
oci_close($objConnect);
?>
1. ไม่สามารถแสดงรายการข้อมูลได้
2. ลิงค์ไปยังหน้าถัดไป ไม่ทำงาน หรือ แสดงไม่ถูกต้อง
3. แสดงได้ทุกอย่าง แต่พอกดหน้าถัดไปแล้ว มันไม่แสดงหน้าถัดไป
แต่ถ้ามีCodeที่เป็นสีแดงอยู่จะไม่สามารถทำอะไรได้เลยคือ ข้อมูลไม่แสดง เปลี่ยนหน้าไม่ได้ แต่ไม่error
ลองพยามประยุกใช้แร้วยังไงก็แก้ไม่อะครับ แต่ถ้าเป็นCode ด้านบน จะทำงานปกติครับ
เอา while ไปซ้อน for แล้วเมื่อไรจะสำเร็จ
<?php
$i = 0;
$r = 0;
while($Num_Rows = oci_fetch_array($resault,OCI_BOTH)) {
if($i > $start && $r < $list_per_page) {
echo .... แสดงผลข้อความ
$r++;
}
$i++;
}
?>
ตัวอย่างด้านบนเป็นตัวอย่างคร่าวๆ นะ ผมเขียนแบบง่ายๆไว้ให้เอาไปประยุกต์ดู
$start คือ ข้อมูลแรกที่ต้องการแสดงผล
$list_per_page คือ จำนวนข้อมูลที่ต้องการต่อหน้า
ตัวอย่างที่ให้มา ให้เอาไปใช้แทนforใช่มั้ยครับ
ครับ