การแสดงผลหน้าจอการแบ่งหน้าแสดงได้ถูกต้องแค่หน้าแรกเท่านั้น ช่วยไขความกระจ่างหน่อยครับ
ผมเขียนโปรแกรมรายงานผลรอบเดือน ซึ่งการแสดงผลกำหนดให้แสดงหน้าละ 5 บรรทัด โดยจะให้เลือกว่าต้องการให้แสดงผลเดือนใด และเมื่อเลือกเดือนแล้วก็กยืนยัน ปรากฎว่า ผลจะแสดงตามเดือนที่เลือกโดยมีรายชื่อเดือนที่เลือกและยอดยกมาถูกต้องในการแสดงผลเฉพาะหน้าที่หนึ่งเท่านั้น แต่พอติ๊กให้เลื่อนไปแสดงผลยังหน้าสอง ปรากฎว่ารายชื่อเดือนที่เลือกไม่ปรากฎที่หน้าจอ และยอดยกมาเป็นไม่ปรากฏเช่นกัน ไม่ทราบว่าจะทำอย่างไร ขอความกระจ่างจากผู้รู้ด้วยครับ ขอบคุณมากครับ
Code ที่เขียน ตามข้างล่างครับ
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
<html>
<?php require_once('Connections/cnqmss.php'); ?>
<?
//กำหนดค่าตัวแปรให้แต่ละเดือน
$jan = "มกราคม";
$feb = "กุมภาพันธ์";
$mar = "มีนาคม";
$apr = "เมษายน";
$may = "พฤษภาคม";
$jun = "มิถุนายน";
$jul = "กรกฎาคม";
$aug = "สิงหาคม";
$sep = "กันยายน";
$oct = "ตุลาคม";
$nov = "พฤศจิกายน";
$dec = "ธันวาคม";
?>
<form action="" method="post">
<select name="mount" id="mount" >
<option value="">ระบุเดือน</option>
<option value="มกราคม">มกราคม</option>
<option value="กุมภาพันธ์">กุมภาพันธ์</option>
<option value="มีนาคม">มีนาคม</option>
<option value="เมษายน">เมษายน</option>
<option value="พฤษภาคม">พฤษภาคม</option>
<option value="มิถุนายน" >มิถุนายน</option>
</select><input type="submit">
</form>
<?
//if($m==""){$m="1";} //ถ้าไม่มีการเลือกให้เป็นเดือน ม.ค.
switch ($mount)
{
case $jan:
$cym="201001"; //เดือนที่เรียกดู
$pym="200912"; //เดือนที่แล้ว
break;
case $feb:
$cym="201002"; //เดือนที่เรียกดู
$pym="201001"; //เดือนที่แล้ว
break;
case $mar:
$cym="201003"; //เดือนที่เรียกดู
$pym="201002"; //เดือนที่แล้ว
break;
case $apr:
$cym="201004"; //เดือนที่เรียกดู
$pym="201003"; //เดือนที่แล้ว
break;
case $may:
$cym="201005"; //เดือนที่เรียกดู
$pym="201004"; //เดือนที่แล้ว
break;
case $jun:
$cym="201006"; //เดือนที่เรียกดู
$pym="201005"; //เดือนที่แล้ว
break;
}
mysql_select_db($database_cnqmss, $cnqmss);
//เอารายการที่มีการเบิกน้ำมันที่ผ่านมาจนถึงเดือนที่เรียกดูมาแสดงทั้งหมด เงื่อนไขคือ where date_oil <= เดือนที่เรียกดู
$sql1="SELECT gas_id,namegas,unit, sum(num_in)as n_in, sum(num_out)as n_out , sum(stock)as n_stock
FROM mount
WHERE date_format(date_oil,'%Y%m')<='$cym' group by gas_id ";
//echo $sql1;
$rso=mysql_query($sql1,$cnqmss)or die(mysql_error());
//echo mysql_num_rows($rso);
//$row=($rso); //จำนวนแถวที่เปิดเรคอร์ดได้
$Num_Rows = mysql_num_rows($rso);
//echo $Num_Rows . " " ;
// echo "$cym = " . $cym . " $pym = " . $pym;
$Per_Page =5; // 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;
}
$sql1 .=" order by gas_id ASC LIMIT $Page_Start , $Per_Page";
$rso = mysql_query($sql1);
?>
<center>รายการประจำเดือน : <?=$mount?></center>
<table border="1" width="100%">
<tr bgcolor="#999999">
<td width="4%" align="center">ลำดับ</td>
<td width="41%" align="center">รายการ</td>
<td width="10%" align="center">หน่วยนับ</td>
<td width="10%" align="center">ยอดยกมา</td>
<td width="9%" align="center">ยอดรับ</td>
<td width="9%" align="center">ยอดรวม</td>
<td width="9%" align="center">ยอดจ่าย</td>
<td width="8%" align="center">คงเหลือ</td>
</tr>
<?
$i=0;
while($rs=mysql_fetch_array($rso))
{
$i=$i+1;
//ของเดือนที่เรียกดูปัจจุบัน
$gas_id=$rs["gas_id"];
$gname=$rs["namegas"];
$unit=$rs["unit"];
$sumin=$rs["n_in"];
$sumout=$rs["n_out"];
$sumstock=$rs["n_stock"];
//ระหว่างวนลูปให้เอาหมายเลขน้ำมันไปเช็คดูในฐานข้อมูลตั้งแต่อดีตจนถึงเดือนที่แล้ว (เดือนก่อนเดือนที่เรียกดู) มียอดคงเหลือที่จะยกมาเท่าไหร่
//เงื่อนไขคือ where date_oil <=เดือนก่อนหน้า
$sql2="SELECT gas_id,sum(stock)as n_stock
FROM mount
WHERE date_format(date_oil,'%Y%m')<='$pym' and gas_id='$gas_id' group by gas_id";
$rspo=mysql_query($sql2,$cnqmss);
$rsp=mysql_fetch_array($rspo);
$presum=$rsp["n_stock"]; //ยอดยกมา
//นำยอดคงเหลือมาบวกกับยอดรับของเดือนปัจจุบัน
$sumtotal=$sumin+$presum; //ยอดรวม
//echo "<tr><td colspan=181 align='left'>".$sql2."</td></tr>" //ลองปรินท์ sql2 ออกมาดู
?>
<tr>
<td><?=$i?></td>
<td><?=$gas_id?><?=$gname?></td>
<td><?=$unit?></td>
<td align="right"><?=$presum?></td>
<td align="right"><?=$sumin?></td>
<td align="right"><?=$sumtotal?></td>
<td align="right"><?=$sumout?></td>
<td align="right"><?=$sumstock?></td>
</tr>
<?
}
?>
</table>
<center>
<br>
จำนวนทั้งสิ้น <?= $Num_Rows;?> บรรทัด : จาก <?=$Num_Pages;?> หน้า :
<?
if($Prev_Page)
{
echo "<a href=\"$PHP_SELF?Page=$Prev_Page&&cym=$cym\"><< - ย้อนกลับ </a>";
}
for($i=1; $i<=$Num_Pages; $i++){
if($i != $Page)
{
echo "[ <a href=\"$PHP_SELF?Page=$i&&cym=$cym\">$i</a> ]";
}
else
{
echo "<b> $i </b>";
}
}
if($Page!=$Num_Pages)
{
echo "<a href=\"$PHP_SELF?Page=$Next_Page&&cym=$cym\"> หน้าถัดไป ->></a>";
}
mysql_close($cnqmss);// ปิดฐานข้อมูล
?>
</body>
</html>Tag : PHP, MySQL
Date :
2010-08-27 22:02:58
By :
ตู่
View :
739
Reply :
2
เท่าที่ดูคร่าวๆนะครับ
1.ที่ลิ้งกดเปลี่ยนหน้าคุณส่งตัวแปรไปไม่ครบ
2.ยอดที่ยกมา ถ้าอยากให้ตามมาด้วยก็ให้ส่งมาด้วยครับ หรือจะเก็บเป็น session ก็ได้ครับ
3.เครื่องหมาย & มันเกินนะครับ ใช้ตัวเดียวพอ
4.ผมเห็นคุณส่งค่า $cym ไปด้วยเวลาเปลี่ยนหน้าอะครับ แต่ไม่ได้เห็นเอามาใช้เลยครับ
Date :
2010-08-28 04:43:27
By :
iamatomix
ช่วยปรับแก้ไขในรายละเอียดเพื่อเป็นแนวทางให้ทีเถอะครับ เพราะหาพยายามหาวิธีแก้ไขแล้ว ยังไม่สามารถทำได้เลยครับ
ขอบคุณมากครับ
Date :
2010-08-28 20:33:54
By :
ตู่
Load balance : Server 00