<?
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
| ลำดับ | หัวเรื่อง | วันที่โพสต์ | ดู | ตอบ | ผู้โพสต์ | วันที่ตอบล่าสุด | ลบ |
| 1 | 17-02-2010 | nicky | |||||
| 2 | 04-03-2010 | ADMIN | |||||
| 3 | 04-03-2010 | ADMIN | |||||
| 4 | 04-03-2010 | ADMIN |
แต่อยากได้แบบนี้อะครับ
| ลำดับ | หัวเรื่อง | วันที่โพสต์ | ดู | ตอบ | ผู้โพสต์ | วันที่ตอบล่าสุด | ลบ |
| 1 | 17-02-2010 | nicky | |||||
| 2 | 04-03-2010 | ADMIN | |||||
| 3 | 04-03-2010 | ADMIN | |||||
| 4 | 04-03-2010 | ADMIN |
ต้องทำยังไงเหรอครับ พอมีตัวอย่างให้ดูมั่ยครับ
แร้ววันที่ตอบล่าสุด หรือ ค่าidที่ตอบล่าสุดอะครับ คำสั่ง sql oracle มันประมาณไหนเหรอครับ หาไม่เเจอเลยครับ ขอบคุณ มากครับ
วิธีคิด ให้หน้าปัจจุบัน อยู่ตรงกลาง แล้ว นับถอยหลังไป ข้างหน้าและ ข้างหลัง เท่าๆกัน
หน้าแรก = floor(หน้าปัจจุบัน - (จำนวนรายการที่ต้องการ / 2)) หรือ floor(6 - (5 / 2))
ใช้ floor() เพื่อปัดเศษลง ครับ
id ล่าสุด ก็ใช้ MAX(id) ไงครับ