A-AA+then

รบกวนหน่อยครับ การแบ่งหน้าpageด้วยoracle

1,849

<?
$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>&nbsp;&nbsp;
  <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);
?>

5 ความคิดเห็น

ลองตรวจสอบดูตัวแปรหลังการวนลูป  ไม่ให้ใช้ ตัวแปรเดียวกับการวนลูป ไม่ได้บอกให้ชัดเจนว่าอะไรที่แบ่งไม่ได้

1. ไม่สามารถแสดงรายการข้อมูลได้
2. ลิงค์ไปยังหน้าถัดไป ไม่ทำงาน หรือ แสดงไม่ถูกต้อง
3. แสดงได้ทุกอย่าง แต่พอกดหน้าถัดไปแล้ว มันไม่แสดงหน้าถัดไป
1

ก็คือถ้าCodeที่เป็นสีแดงออกไป ข้อมูลจะแสดงปกติ แต่ไม่สามารถ เปลี่ยนหน้าได้

แต่ถ้ามีCodeที่เป็นสีแดงอยู่จะไม่สามารถทำอะไรได้เลยคือ ข้อมูลไม่แสดง เปลี่ยนหน้าไม่ได้ แต่ไม่error

ลองพยามประยุกใช้แร้วยังไงก็แก้ไม่อะครับ แต่ถ้าเป็นCode ด้านบน จะทำงานปกติครับ
2

อ้อ ... ถ้างั้นก็คงถูกแล้วครับ

เอา 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 คือ จำนวนข้อมูลที่ต้องการต่อหน้า

3

ตัวอย่างที่ให้มา ให้เอาไปใช้แทนforใช่มั้ยครับ


4

อ้างจากคำตอบที่ #4ตัวอย่างที่ให้มา ให้เอาไปใช้แทนforใช่มั้ยครับ

ครับ
5
^