A-AA+then

รบกวนหน่อยครับ..งงจิงๆ

1,855

<?
 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>&nbsp;&nbsp;</div>
<span id="alert_login" style="color:#FF0000" ></span></div>
<div id="show_question" >&nbsp;</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']; ?>)">&nbsp;&nbsp;<? echo $row['Q_TOPIC']; ?></a></div></td>
    <td><? echo ($row['Q_DATE']); ?></td>
    <td>&nbsp;</td>
    <td><? echo $i1 ?></td>
    <td><? echo $row['USERNAME']; ?></td>
    <td>&nbsp;</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>&nbsp;&nbsp;<button onclick="resetFormPost()">Reset</button>&nbsp;</p>
</form>
<div id="show_post">&nbsp;</div>
</body>
</html>
เคยถามไปครั้งนึงแร้วอะครับ แต่ก็ยังทำไม่ได้ เลยได้วิธีใหม่มา แต่ เกือบจะสำเร็จแร้วมันติดอยู่นิดนึงอะครับ
พอกดให้ไปหน้าถัดไปมันไปหน้ารอโหลดอะครับ กดที่ปุ่มgo ก็ไม่เกิดอะไรขึ้น ตรงมุมซ้ายล่างIE มันError
แต่ข้อมูลที่แสดงออกมา ตรงตามที่กำหนดไว้คือ 10 แถว ซึ่งข้อมูลจิงมี17 แถว เลยแบ่งได้ 2 หน้าเหมือนว่ามันสามารถแสดงข้อมูลและคำนวณได้ถูกต้องแล้ว
เหลือแต่กดให้มันเปลี่ยนหน้าถัดไปแต่มันไม่ไปอะครับ ผมคิดว่าส่วนที่เกิดปัยหาน่าจะมาจากส่วนCodeที่แรเงาสีน้ำเงินอะครับ ผมใช้การเปลี่ยนหน้าแบบAjax คือโปรเจคผมเปนAjaxล้วนๆ ไม่รุว่าแก้ตรงไหนอะครับ COdeที่เปนสีแดง คือCodeส่วนที่ทำงานในการดึงข้อมูลจากOracle และกำหนดการแบ่งหน้าครับ งงหลายวันแร้วอะครับ..รบกวนหน่อยนะครับ


 

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

Error ก็หมายถึง ผิดที่ Javascript ส่วนจะผิดที่ไหน จะตรวจง่ายขึ้นถ้าอยู่บนหน้าเว็บ

ในส่วนของการสร้างตารางจาก 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 อีก
1

ขอบคุณอาจารย์มากครับผมจะลองดูใหม่ ถ้าผมเปลี่ยนจาก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 

2

ใช้ void ก็ได้ หรือให้ฟังก์ชั่น show return false ก็ได้

คำสั่งที่เธอใช้ ถ้าดูตามรูปการณ์ มันก็ ok ดีอยู่ แต่ในกรณีของ Ajax admin_webboard_question.php จะคืนค่าแค่ข้อมูลของบอร์ดออกมาเท่านั้น ไม่ได้คืนค่า เวเว็บทั้งหมดออกมา ซึ่งถ้าเข้าใจหลักการของมัน จะเห็นว่า มันก็ไม่ต่างอะไรกับการเขียนเว็บตามปกติ แถมสั้งกว่า อีตรงที่ไม่ต้องเขียน header หรือ footer ของเว็บ (เขียนแค่เนื้อหาที่ต้องการ)

3

เฮอ....เปลี่ยนแร้วมานก้อยังไม่ออกอีกอะครับ ไม่รุจะทำไงดี ผมคิดว่าผมจะไม่เอาแบบนี้แร้วอะครับ เพราะฟังชั่นมันผมไม่เคยเหนไม่เข้าใจมันเรยสักตัว กลัวเวลาสอบโดนถามจะตอบไม่ได้ ผมลองเรยแบบมากอะครับ ผมคิดว่าแบบนี้น่าจะทำให้ผมเข้าใจมาก คือผมลองแบบง่ายๆบ้านๆเรยอะครับ กะเอาให้มันสามารถเลื่อนหน้าแสดงได้ถูกต้องให้ได้ก่อน โดนที่ไม่เอา ฟั่งใดๆ เข้ามาใช้เรย มานก้อยังจะมีปัญหาอีก คือ หน้าแรก ข้อมูลแสดงถูกมีข้อมูลอยู่ 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>&nbsp;&nbsp;</div>
<span id="alert_login" style="color:#FF0000" ></span></div>
<div id="show_question" >&nbsp;</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']; ?>)">&nbsp;&nbsp;<? echo $row['Q_TOPIC']; ?></a></div></td>
    <td><? echo ($row['Q_DATE']); ?></td>
    <td>&nbsp;</td>
    <td><? //echo $i1 ?></td>
    <td><? echo $row['USERNAME']; ?></td>
    <td>&nbsp;</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>

 

4

อย่างแรกเลยที่เธอต้องดู ก็คือค่า page ส่งไปมั้ย

borad.php?page=1
board.php?page=2

ค่าเหล่านี้มีอยู่บนเพจเธอหรือเปล่า

ขั้นต่อมา ถ้าเพจของเธอมีลิงค์แบ่งหน้าด้านบนแล้ว หลังจากคลิกลิงค์ ค่าที่ส่งไป  คือ page ถูกส่งไปอย่างถูกต้องหรือเปล่า สามารถรับค่า page ได้หรือเปล่า ถ้ามันไม่สามารถรับได้ก็ทำให้มันรับได้ซะ

ขั้นต่อไป ถ้ามีค่าเพจส่งมาแน่ๆอย่างถูกต้องแล้ว ก็ไปดูที่ query ลอง echo คำสั่งที่ได้ออกมาดูว่ามันถูกต้องหรือไม่ ถ้าไม่ถูก ก็แก้ให้ถูก แค่นี้มันก็ทำงานได้อย่างแน่นอน  
5

ขอบคุณมากครับ เดี๋ยวจะลองทำดูตามที่อาจานบอกครับ
6

เฮ้อ....ได้สักที ขอบคุณอาจานย์มากๆนะครับ  ตอนนี้แสดงออกมาเปนแบบนี้ครับ และเปลี่ยนหน้าได้แบบ Ajax

ลำดับ
หัวเรื่อง
วันที่โพสต์
ดู
ตอบ
ผู้โพสต์
วันที่ตอบล่าสุด
ลบ
1 17-02-2010     nicky  
2 04-03-2010     ADMIN  
3 04-03-2010     ADMIN  
4 04-03-2010     ADMIN  
Total 17 Record : 1 Page : 1 [ 2 ][ 3 ][ 4 ][ 5 ] Next>>  (ออกมาทุกหน้า)

แต่อยากได้แบบนี้อะครับ
ลำดับ
หัวเรื่อง
วันที่โพสต์
ดู
ตอบ
ผู้โพสต์
วันที่ตอบล่าสุด
ลบ
1 17-02-2010     nicky  
2 04-03-2010     ADMIN  
3 04-03-2010     ADMIN  
4 04-03-2010     ADMIN  
Total 17 Record : 1 Page : [<<] [<] 4 5 [6] 7 8 [>] [>>]
ต้องทำยังไงเหรอครับ  พอมีตัวอย่างให้ดูมั่ยครับ

แร้ววันที่ตอบล่าสุด หรือ ค่าidที่ตอบล่าสุดอะครับ คำสั่ง sql oracle มันประมาณไหนเหรอครับ หาไม่เเจอเลยครับ ขอบคุณ มากครับ

7

รูปแบบของ ตัวเลือกหน้า คงต้องปรับเองแล้วมั้งครับ ถ้าจะดูตัวอย่าง ลองดู webboard ของ GCMS ครับ

วิธีคิด ให้หน้าปัจจุบัน อยู่ตรงกลาง แล้ว นับถอยหลังไป ข้างหน้าและ ข้างหลัง เท่าๆกัน

หน้าแรก = floor(หน้าปัจจุบัน - (จำนวนรายการที่ต้องการ / 2)) หรือ floor(6 - (5 / 2))

ใช้ floor() เพื่อปัดเศษลง ครับ

id ล่าสุด ก็ใช้ MAX(id) ไงครับ
8
^