รบกวนหน่อยครับ..งงจิงๆ
<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="ajax.lib.js"></script>
<script type="text/javascript" src="ajax_load.js"></script>
<script src="ajax_framework.js"></script>
<script>
//======================================= ซ่อนตารางคำถาม ======================================================
function showQuestionForm() {
document.getElementById('tb_tech').style.display = 'none';
document.getElementById('post_board').style.display = 'block';
document.getElementById('bt_post').style.display = 'none';
}
//======================================= ตรวจสอบฟอร์มคำถาม ===================================================
function checkFormQuestion() {
if(post_board.elements['post_topic'].value=="" ||
post_board.elements['post_detail'].value=="" ) {
document.getElementById('show_post').innerHTML = 'ใส่ข้อมูลไม่ครบ';
return;
}
postTopic();
document.getElementById('show_post').innerHTML = 'กำลังส่งข้อมูล';
document.getElementById('post_board').reset();
}
//======================================= ส่งข้อมูลไปเก็ยในdatabase ==============================================
function postTopic() {
var data = getFormData('post_board');
var URL = "admin_webboard_question_ss.php";
ajaxLoad('post',URL,data,'show_post');
}
//================================== ฟังชั่นในการเรียกโชว์คำถามในwebboard ===========================================
function showQuestion() {
document.getElementById('post_board').style.display = 'none';
document.getElementById('show_post').innerHTML = '';
ajaxLoad('post',"admin_webboard_show_question.php",'','show_question');
document.getElementById('bt_post').style.display = 'block';
}
//================================= ฟั่งชั่น reset form post ======================================================
function resetFormPost() {
document.getElementById('post_board').reset();
}
//================================ ฟั่งชั่น ส่งค่าidหัวข้อกระทู้ =======================================================
function checkQuestion(qid) {
var data = 'data=' + qid;
ajaxLoad('post','check_question.php',data,"");
}
//============== ลบคำถาม ======================================================================================================
function deleteQuestion(qid) {
if(!confirm('Delete this question?')) {
return;
}
var data = "qid=" + qid;
var URL = "admin_delete_question.php";
ajaxLoad('post', URL, data, '');
}
//=============================================== อัพเดตtableคำถาม ==========================================================
function showUpdateTable() {
document.getElementById('tb_tech').style.display = 'none';
ajaxLoad('post',"admin_webboard_show_question.php",'','show_question');
}
</script>
</head>
<body>
<?
$topic1 = $_SESSION['topic'];
include("connectOracle.php");
$numsrow=10;//กำหนดว่าแสดงหน้าละกี่ record
if(!$start_row) $start_row=0;
//??
$strSQLcount = "SELECT QID,Q_TOPIC,Q_DATE,USERNAME FROM QUESTION ";
$strSQLcount .="WHERE TOPIC_ID = ".$topic1." ORDER BY QID DESC ";
$objParseCount = oci_parse ($objConnect, $strSQLcount);
oci_execute ($objParseCount,OCI_DEFAULT);
$s1 = oci_parse($objConnect, "alter session set nls_date_format='DD-MM-YYYY'");
oci_execute($s1);
$count_num=oci_fetch_all($objParseCount, $Result);
if($count_num>$numsrow)
{
$a= $count_num/$numsrow;
$b=explode(".", $a);
$nump=$b[0];
$nump1=$b[1];
}
else
$nump='1';
if($nump1>0) $nump=($nump+1);
if(!$p) $p=1;
if($p==1)
$start_row=0;
else
$start_row=($p-1)*$numsrow;
$end_row=($start_row+$numsrow);
if($start_row>0) $start_row=$start_row+1;
//แสดงผล
$strSQL = "SELECT ROWNUM MYNUM , A.* FROM
( SELECT QID,Q_TOPIC,Q_DATE,USERNAME FROM QUESTION WHERE TOPIC_ID = ".$topic1." ORDER BY QID DESC)A WHERE ROWNUM BETWEEN $start_row and $end_row";
$objParse = oci_parse ($objConnect, $strSQL);
oci_execute ($objParse,OCI_DEFAULT);
#while ($row = oci_fetch_array($objExecute))
$r=0;
?>
<div id="bt_post"><div align="left"><a href="javascript:void(O)" onclick="showQuestionForm()">[ ตั้งหัวข้อเรื่อง ]</a> </div>
<span id="alert_login" style="color:#FF0000" ></span></div>
<div id="show_question" > </div>
<table id="tb_tech" width="787" height="52" border="1" background="images/bgr_html1.gif"style="border-collapse:collapse;" bordercolor="#FF0000" >
<tr>
<td width="328"><div align="center">หัวเรื่อง</div></td>
<td width="82"><div align="center">วันที่โพสต์</div></td>
<td width="25"><div align="center">ดู</div></td>
<td width="30"><div align="center">ตอบ</div></td>
<td width="88"><div align="center">ผู้โพสต์</div></td>
<td width="140"><div align="center">วันที่ตอบล่าสุด</div></td>
<td width="45"><div align="center">ลบ</div></td>
</tr>
while($row = oci_fetch_array($objParse,OCI_BOTH)){
$taid = $row['QID'];
$r++;
$objQue1 = "SELECT * FROM ANSWER ";
$objQue1 .="WHERE QID = ".$taid." ORDER BY AID DESC ";
$ques1 = oci_parse($objConnect,$objQue1);
$s = oci_parse($objConnect, "alter session set nls_date_format='DD-MM-YYYY'");
oci_execute($s);
oci_execute($ques1);
$i1 = 0;
while(oci_fetch_array($ques1,OCI_BOTH)) {
$i1++;
}
?>
<tr>
<td><div align="left"><a href="javascript:loaddoc()" onclick="checkQuestion(<? echo $row['QID']; ?>)"> <? echo $row['Q_TOPIC']; ?></a></div></td>
<td><? echo ($row['Q_DATE']); ?></td>
<td> </td>
<td><? echo $i1 ?></td>
<td><? echo $row['USERNAME']; ?></td>
<td> </td>
<td><button onclick="deleteQuestion(<? echo $row['QID']; ?>)">Delete</button></td>
</tr>
<? } ?>
</table>
<?
if($p==1)
$iconnb='<img src="images/arrow_left.png" border="0"> <a href="admin_webboard_question.php?select='.$select.'&StrName='.$StrName.'&p='.($p+1).'"><img src="images/arrow_right" border="0"></a> ';
if($p==1)
$iconnb='<img src="images/arrow_left.png" border="0"> <a href="javascript:loaddoc(0)" onclick="show_p('.($p+1).')"><img src="images/arrow_right" border="0"></a> ';
else if($p==$nump)
$iconnb='<a href="javascript:loaddoc(0)" onclick="show_p('.($p-1).')"><img src="images/arrow_left.png" border="0"></a> <img src="images/arrow_right" border="0"> ';
else
$iconnb='<a href="javascript:loaddoc(0)" onclick="show_p('.($p-1).')"><img src="images/arrow_left.png" border="0"></a> <a href="javascript:loaddoc(0)" onclick="show_p('.($p+1).')"><img src="images/arrow_right" border="0"></a> ';
//แสดง แต่ละเหน้า
if($nump>1) {
echo '
<tr><td colspan=3> <form name="form1" method="post" >
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr><td><br>
<center><font color="#828282">Page '.$p.' To '.$nump.' '.$iconnb.' Go To Page
<input name="p" type="input" id="p" size="1" value="'.$p.'">
To </font><input name="QID" type="input" id="QID" size="1" value="'.$nump.'">
<input name="Go" type="button" id="Go" onclick="show_p(form1.p.value)" value="GO">
<center></td></tr>
</table></form></td></tr>';
}//end num
?>
<?
oci_close($objConnect);
?>
<form id="post_board" style="display:none">
<p>TOPIC:</p>
<p>
<input type="text" id="post_topic" />
</p>
<p>DETAIL:</p>
<p>
<textarea id="post_detail" cols="45" rows="5"></textarea>
</p>
<p><button onclick="checkFormQuestion()">Post</button> <button onclick="resetFormPost()">Reset</button> </p>
</form>
<div id="show_post"> </div>
</body>
</html>
เคยถามไปครั้งนึงแร้วอะครับ แต่ก็ยังทำไม่ได้ เลยได้วิธีใหม่มา แต่ เกือบจะสำเร็จแร้วมันติดอยู่นิดนึงอะครับ
พอกดให้ไปหน้าถัดไปมันไปหน้ารอโหลดอะครับ กดที่ปุ่มgo ก็ไม่เกิดอะไรขึ้น ตรงมุมซ้ายล่างIE มันError
แต่ข้อมูลที่แสดงออกมา ตรงตามที่กำหนดไว้คือ 10 แถว ซึ่งข้อมูลจิงมี17 แถว เลยแบ่งได้ 2 หน้าเหมือนว่ามันสามารถแสดงข้อมูลและคำนวณได้ถูกต้องแล้ว
เหลือแต่กดให้มันเปลี่ยนหน้าถัดไปแต่มันไม่ไปอะครับ ผมคิดว่าส่วนที่เกิดปัยหาน่าจะมาจากส่วนCodeที่แรเงาสีน้ำเงินอะครับ ผมใช้การเปลี่ยนหน้าแบบAjax คือโปรเจคผมเปนAjaxล้วนๆ ไม่รุว่าแก้ตรงไหนอะครับ COdeที่เปนสีแดง คือCodeส่วนที่ทำงานในการดึงข้อมูลจากOracle และกำหนดการแบ่งหน้าครับ งงหลายวันแร้วอะครับ..รบกวนหน่อยนะครับ
ในส่วนของการสร้างตารางจาก db คงไม่ทำให้เกิด Error นี้ได้หรอกครับ (หมายคววามว่าโค้ดสร้างตารางถูกแล้ว)
จริงๆแล้วตัวอย่างการโหลดด้วย Ajax บนเว็บก็มีเยอะแยะนะ ไม่ลองศึกษาดู มีหลายๆกรณีที่เทียบเคียงกันได้
หลักการของการแบ่งหน้า โดยทั่วไปก็คือการส่งหมายเลขหน้าที่ต้องการเพื่อไป query ข้อมูล
index.php?page=1 ประมาณนี้
Ajax ก็เหมือนกัน มันก็ต้องส่งข้อมูลไปในลักษณะเดียวกัน ไม่มีอะไรแตกต่างกัน ถ้ามองว่าทั้งหมดเป็นแค่เพียงหน้าเพจหนึ่งๆ ซึ่งต่างกันแค่วิธีเรียก ทุกอย่างก็จะง่ายขั้น
ปัญหาที่สำคัญ อยู่ที่ไม่เข้าใจ concept ของมันเท่านั้น ดังนั้น ถ้าอ่านให้เยอะๆหน่อย ก็น่าจะช่วยได้นะ
<a href="javascript:loaddoc(0)" onclick="show_p('.($p-1).')">
คำสั่งนี้ จะทำงานที่ show_p ก่อน แล้วก็จะไปทำ loaddoc ต่อ ซึ่งมันไม่ควรจะเป็นเช่นนั้น จะทำอะไรก็เลือกเอาซะอย่างหนึ่งก็พอ โดยทั่วไป เราควรออกแบบให้เมือเรียก show_p แล้ว แสดงผลได้เลย โดยที่ไม่ต้องเรียก loaddoc อีก
ขอบคุณอาจารย์มากครับผมจะลองดูใหม่ ถ้าผมเปลี่ยนจากloaddocเปน void จะได้มั้ยครับ ผมลืมเอาฟั่งชั่นshow_pมาให้ดูครับ แต่ผมก็ยังงงคือไม่เข้าใจคำสั่งมันเรยครับ พอดีได้มาจากคนอื่นอะครับ
function show_Main( resp )
{
var resultarea= document.getElementById('result_show_main');
resultarea.innerHTML = resp.ReturnValue;
}
function show_p(p)
{
var rmi = new RemoteMethodInvoker( );
var ch;
var type_au;
var methodName='preview';
if( rmi.IsBrowserSupported( ) ) {
rmi.Location = "admin_webboard_question.php?p="+p;
// rmi.paramPost = pr.replace('?','');
rmi.RemoteMethod = methodName ;
rmi.UseHttpPost = false;
rmi.ClientCallBackMethod = "show_Main";
rmi.Invoke();
}
}//end webboard
ใช้ void ก็ได้ หรือให้ฟังก์ชั่น show return false ก็ได้
คำสั่งที่เธอใช้ ถ้าดูตามรูปการณ์ มันก็ ok ดีอยู่ แต่ในกรณีของ Ajax admin_webboard_question.php จะคืนค่าแค่ข้อมูลของบอร์ดออกมาเท่านั้น ไม่ได้คืนค่า เวเว็บทั้งหมดออกมา ซึ่งถ้าเข้าใจหลักการของมัน จะเห็นว่า มันก็ไม่ต่างอะไรกับการเขียนเว็บตามปกติ แถมสั้งกว่า อีตรงที่ไม่ต้องเขียน header หรือ footer ของเว็บ (เขียนแค่เนื้อหาที่ต้องการ)
เฮอ....เปลี่ยนแร้วมานก้อยังไม่ออกอีกอะครับ ไม่รุจะทำไงดี ผมคิดว่าผมจะไม่เอาแบบนี้แร้วอะครับ เพราะฟังชั่นมันผมไม่เคยเหนไม่เข้าใจมันเรยสักตัว กลัวเวลาสอบโดนถามจะตอบไม่ได้ ผมลองเรยแบบมากอะครับ ผมคิดว่าแบบนี้น่าจะทำให้ผมเข้าใจมาก คือผมลองแบบง่ายๆบ้านๆเรยอะครับ กะเอาให้มันสามารถเลื่อนหน้าแสดงได้ถูกต้องให้ได้ก่อน โดนที่ไม่เอา ฟั่งใดๆ เข้ามาใช้เรย มานก้อยังจะมีปัญหาอีก คือ หน้าแรก ข้อมูลแสดงถูกมีข้อมูลอยู่ 10 แบ่ง ให้มันแสดง หน้าล่ะ 5 ก็จะมีหน้าให้ Next คือ 2 หน้า แบบนี้ อะครับ
-----------หัวตาราง--------------------
ข้อมูลที่1
ข้อมูลที่2
ข้อมูลที่3
ข้อมูลที่4
ข้อมูลที่5
Total 10 Record : 2 Page : 1 [ 2 ] Next>>
แต่พอกดNext หรือ หน้า 2 มันมาแต่หัวตาราง ข้อมูลที่เหลืออีก 5 มันไม่ออกมาอะครับ ผมจนปัญญาแร้วครับ ไปถามที่ไหนก้อไม่ได้คำที่ดีกว่าที่นี้ ผมอยากทำแบบนี้ให้ได้ก่อน มันน่าจะทำให้ผมเข้าได้มากกว่า แล้วค่อยไปพัฒนาต่อไปอะครับ รบกวนหน่อยนะครับ...ครับคุณมากครับ
<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?
$topic1 = $_SESSION['topic'];
include("connectOracle.php");
$strSQLcount = "SELECT QID,Q_TOPIC,Q_DATE,USERNAME FROM QUESTION ";
$strSQLcount .="WHERE TOPIC_ID = ".$topic1." ORDER BY QID DESC ";
$objParseCount = oci_parse ($objConnect, $strSQLcount);
oci_execute ($objParseCount,OCI_DEFAULT);
$s1 = oci_parse($objConnect, "alter session set nls_date_format='DD-MM-YYYY'");
oci_execute($s1);
$Num_Rows=oci_fetch_all($objParseCount, $Result);
$Per_Page = 5;
$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;
}
//แสดงผล
$strSQL = "SELECT ROWNUM MYNUM , A.* FROM
( SELECT QID,Q_TOPIC,Q_DATE,USERNAME FROM QUESTION WHERE TOPIC_ID = ".$topic1." ORDER BY QID DESC)A WHERE ROWNUM BETWEEN $Page_Start and $Per_Page";
$objParse = oci_parse ($objConnect, $strSQL);
oci_execute ($objParse,OCI_DEFAULT);
#while ($row = oci_fetch_array($objExecute))
?>
<div id="bt_post"><div align="left"><a href="javascript:void(O)" onclick="showQuestionForm()">[ ตั้งหัวข้อเรื่อง ]</a> </div>
<span id="alert_login" style="color:#FF0000" ></span></div>
<div id="show_question" > </div>
<table id="tb_tech" width="787" height="52" border="1" background="images/bgr_html1.gif"style="border-collapse:collapse;" bordercolor="#FF0000" >
<tr>
<td width="46"><div align="center">ลำดับ</div></td>
<td width="281"><div align="center">หัวเรื่อง</div></td>
<td width="80"><div align="center">วันที่โพสต์</div></td>
<td width="22"><div align="center">ดู</div></td>
<td width="30"><div align="center">ตอบ</div></td>
<td width="82"><div align="center">ผู้โพสต์</div></td>
<td width="134"><div align="center">วันที่ตอบล่าสุด</div></td>
<td width="60"><div align="center">ลบ</div></td>
</tr>
<?
$r=0;
while($row = oci_fetch_array($objParse,OCI_BOTH)){
$taid = $row['QID'];
$r++;
?>
<tr>
<td width="46"><? echo "$r "; ?></td>
<td><div align="left"><a href="javascript:loaddoc()" onclick="checkQuestion(<? echo $row['QID']; ?>)"> <? echo $row['Q_TOPIC']; ?></a></div></td>
<td><? echo ($row['Q_DATE']); ?></td>
<td> </td>
<td><? //echo $i1 ?></td>
<td><? echo $row['USERNAME']; ?></td>
<td> </td>
<td><button onclick="deleteQuestion(<? echo $row['QID']; ?>)">Delete</button></td>
</tr>
<? } ?>
</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);
?>
</body>
</html>
borad.php?page=1
board.php?page=2
ค่าเหล่านี้มีอยู่บนเพจเธอหรือเปล่า
ขั้นต่อมา ถ้าเพจของเธอมีลิงค์แบ่งหน้าด้านบนแล้ว หลังจากคลิกลิงค์ ค่าที่ส่งไป คือ page ถูกส่งไปอย่างถูกต้องหรือเปล่า สามารถรับค่า page ได้หรือเปล่า ถ้ามันไม่สามารถรับได้ก็ทำให้มันรับได้ซะ
ขั้นต่อไป ถ้ามีค่าเพจส่งมาแน่ๆอย่างถูกต้องแล้ว ก็ไปดูที่ query ลอง echo คำสั่งที่ได้ออกมาดูว่ามันถูกต้องหรือไม่ ถ้าไม่ถูก ก็แก้ให้ถูก แค่นี้มันก็ทำงานได้อย่างแน่นอน
เฮ้อ....ได้สักที ขอบคุณอาจานย์มากๆนะครับ ตอนนี้แสดงออกมาเปนแบบนี้ครับ และเปลี่ยนหน้าได้แบบ Ajax
แต่อยากได้แบบนี้อะครับ
ต้องทำยังไงเหรอครับ พอมีตัวอย่างให้ดูมั่ยครับ
แร้ววันที่ตอบล่าสุด หรือ ค่าidที่ตอบล่าสุดอะครับ คำสั่ง sql oracle มันประมาณไหนเหรอครับ หาไม่เเจอเลยครับ ขอบคุณ มากครับ
วิธีคิด ให้หน้าปัจจุบัน อยู่ตรงกลาง แล้ว นับถอยหลังไป ข้างหน้าและ ข้างหลัง เท่าๆกัน
หน้าแรก = floor(หน้าปัจจุบัน - (จำนวนรายการที่ต้องการ / 2)) หรือ floor(6 - (5 / 2))
ใช้ floor() เพื่อปัดเศษลง ครับ
id ล่าสุด ก็ใช้ MAX(id) ไงครับ