• บทความ ในนี้จะไม่มีการ update แล้วนะครับ บทความทั้งหมดจะไป update ที่ Modoeye Articles
  • ระบบยังไม่สมบูรณ์ ระบบสมาชิกยังใช้ไม่ได้นะครับ ติดปัญหาไม่สามารถ post ได้ แจ้งปัญหาได้ทาง E-mail เลยครับ
โอ๋
โอ๋
Mon 20 Feb 2006 09:18:10

โค้ดข้างล่างเป็นโค้ดที่ดึงข้อมูลมาจากดาต้าเบสครับ คือดึงแบบเพียว ๆ แบบนี้แหละ แต่มันจะโชว์ข้อมูลมาตรึมเลยอ่ะครับ

<?
$sql_link = mysql_pconnect ("","","");
mysql_select_db("");

$row1 = mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no ORDER BY mem_no ASC");
while ($r = mysql_fetch_array($row1)){
 echo "[$r[mem_no]] : $r[displayname] >> $r[mem_serial]<br>";  // โชว์  id ,ชื่อสมาชิก, โค้ด
}
?>

ผมเลยอยากได้โค้ดแบ่งหน้าอะครับ รบกวนด้วยครับ คืองานต้องส่งแล้ว

แล้วก็ขอโค้ดนับจำนวนคนที่ได้ serial ทั้งหมดอะครับ แบบว่าไม่รู้จะเอาโค้ดยังไงมาใส่อ่ะ

Administrator
Administrator
Mon 20 Feb 2006 10:23:00
การแบ่งหน้าก็เพียงเอาข้อมูลที่ query ได้จากฟังก์ชั่น mysql_query ซึ่งได้เป็น Result resource ใส่ฟังก์ชั่น mysql_num_rows() จะได้เป็นจำนวนของ Records ที่มีผลจากคำสั่ง SELECT ครับ จากนั้นก็นำไปหารด้วยจำนวนที่ต้องการแสดงผลต่อหนึ่งหน้า ก็จำได้จำนวนหน้าพร้อมเศษทศนิยมซึ่งต้องปัดขึ้น ก็เอาเลขที่หารได้นั้นใส่ฟังก์ชั่น ceil() จะได้ประมาณนี้ครับ

$pages = ceil((mysql_num_rows($res)/20);

จากนั้นก็วน loop for ทำการ print ตัวเลขตั้งแต่ 1-จำนวน $pages แล้วก็ใส่ลิงค์ของแต่ละหน้า

ส่วนการ SELECT ในหน้าต่อๆไปก็ใช้ keyword LIMIT ช่วยในการ query ครับ

ส่วนการจะหาค่า field member ที่มี serial นั้นต้องดูก่อนว่า field serial นั้นถ้าไม่มีค่าจะเป็นค่าใด NULL หรือ EmptyString ซึ่งนำค่านั้นมาใส่ใน WHERE CLAUSE ครับ
โอ๋
โอ๋
Mon 20 Feb 2006 11:01:08

อู้ อึ้งเลยครับ ขอแบบเต็ม ๆ ได้ป่ะ ผมมันอ่อนหัดเรื่องสคริ๊ปมาก ๆ เลยครับ ถ้าตัวอย่างไม่มีอผมก็แย่เลยครับ

Administrator
Administrator
Mon 20 Feb 2006 11:30:30

<?

$num_records = 20; //Amount of records per page

$sql_link = mysql_pconnect ("","","");
mysql_select_db("");

$records = mysql_num_rows(mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no")); // Get amount of records

$result = mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no ORDER BY m.mem_no ASC LIMIT ".(isset($_GET["start"])?$_GET["start"]:0).",".$num_records); //SELECT specified records

while ($r = mysql_fetch_array($result, MYSQL_ASSOC)){
 echo "[$r[mem_no]] : $r[displayname] >> $r[mem_serial]<br>";  // โชว์  id ,ชื่อสมาชิก, โค้ด
}

$pages = ceil($records/$num_records);
for($i = 0; $i < $pages; $i++){
    echo "<a href=\"".$_SERVER["PHP_SELF"]."?start=".($i*$num_records)."\">".($i+1)."</a>";
}
?>

อธิบาย

$num_records = เป็นตัวแปรจำนวน records ต่อหน้า

$records = mysql_num_rows(mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no")); เป็นการ SELECT ข้อมูลทั้งหมดที่มีผลต่อ Query นี้เพื่อนับจำนวนทั้งหมดเก็บไว้ในตัวแปร $records

$result = mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no ORDER BY m.mem_no ASC LIMIT ".(isset($_GET["start"])?$_GET["start"]:0).",".$num_records); เป็นการ SELECT record ที่มีผลตามที่ระบุ โดยตรวจสอบว่ามีการส่งตัวแปร start มาใน querystring หรือไม่ ถ้ามีก็ให้เริ่มนำ record ตั้งแต่ที่ระบุเป็นจำนวน $num_records ( LIMIT <recodr เริ่มต้น>, <จำนวน record>Wink

$pages = ceil($records/$num_records); หาจำนวนหน้าทั้งหมด

for($i = 0; $i < $pages; $i++){
    echo "<a href=\"".$_SERVER["PHP_SELF"]."?start=".($i*$num_records)."\">".($i+1)."</a>";
} ทำลิงค์เพื่อไปยังหน้าต่างๆ โดยส่งตัวแปร start ไปใน querystring
โอ๋
โอ๋
Mon 20 Feb 2006 12:10:58

ขอบคุณครับคุณ administrator 

โอ๋
โอ๋
Mon 20 Feb 2006 12:24:12

มัน error แบบนี้ครับ

//
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/xxx/xxx/xxx/xxx/list.php on line 24
123456789101112131415

บันทัดที่ 24 คือ 
while ($r = mysql_fetch_array($result, MYSQL_ASSOC)){

บันทัดที่ 25 
echo "[$r[mem_no]] : $r[displayname] >> $r[mem_serial]<br>";  // âªÇì  id ,ª×èÍÊÁÒªÔ¡, â¤é´
}

Administrator
Administrator
Mon 20 Feb 2006 12:28:27
$result = mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no ORDER BY mem_no ASC LIMIT ".(isset($_GET["start"])?$_GET["start"]:0).",".$num_records);
โอ๋
โอ๋
Mon 20 Feb 2006 12:47:02

ได้แล้วครับ ขอบคุณอีกครั้งครับผม

โอ๋
โอ๋
Mon 20 Feb 2006 13:14:55

แล้วถ้าจะเขียนโค้ดให้นับจำนวนทั้งหมด ทำไงบ้างครับ

Administrator
Administrator
Mon 20 Feb 2006 14:35:22
เข้าใจว่าถามถึงการ นับจำนวน record ทั้งหมด คุณอาจจะใช้ COUNT ของ SQL ก็ได้ครับ หรือจะใช้ mysql_num_rows() ของ PHP ก็ได้ครับ
โอ๋
โอ๋
Wed 22 Feb 2006 11:22:43

ได้แล้วครับ พอดีผมทำเป็นแบบโชว์หน้าละ 50 มันก็เลยดึงมาโชว์แค่ 50  นะครับ ทำยังไงถึงจะได้โชว์ทั้งหมดเลยครับ

Administrator
Administrator
Wed 22 Feb 2006 12:03:54
ในคำสั่ง Quqery เพียงไม่ต้องใส่ LIMI เท่านั้นครับ
เด็กมีปัญหา
เด็กมีปัญหา
Fri 8 Sep 2006 22:12:04

ใช้ SQL Server เป็นฐานข้อมูล มันไม่มีคำสั่ง limit แล้วจะทำยังไงดีล่ะ แถมยังติดต่อฐานข้อมูลด้วย ODBC อีกลองประยุกต์ใช้แล้วไม่ได้ผลเลย แต่ code นี้ผมว่าเข้าใจง่ายดีนะแต่ใช้กับงานของผมไม่ได้ รบกวนคุณ Admin ด้วยครับ

Administrator
Administrator
Fri 8 Sep 2006 23:11:55
ถ้าใน SQL Server ใช้คำสั่ง TOP() แทนครับเช่น SELECT TOP(50) field_name FROM ....
เด็กมีปัญหา
เด็กมีปัญหา
Fri 8 Sep 2006 23:58:26

while ($r = mysql_fetch_array($result, MYSQL_ASSOC)){
 echo "[$r[mem_no]] : $r[displayname] >> $r[mem_serial]<br>";  // โชว์  id ,ชื่อสมาชิก, โค้ด
}
แล้วถ้าแปลงให้เป็นการติดต่อแบบ odbc ล่ะครับใช่แบบนี้หรือเปล่า

$num_records = 20;
      $sql= "SELECT * FROM Hardware ORDER BY Name ASC";
      $records = odbc_num_rows(odbc_exec($conn,$sql));
      *** $result = odbc_exec($conn, ("SELECT TOP $num_records * FROM Hardware ORDER BY Name ASC ".(isset($_GET["start"])?$_GET["start"]:0).",".$num_records));
      while ($r = odbc_fetch_row($result)){
       echo odbc_result($result,"Name");
       echo "<a href=$PHP_SELF?no=" .odbc_result($result,"No"). ">" .odbc_result($result,"Name")."</a>";
      }
      $pages = ceil($records/$num_records);
      for($i = 0; $i < $pages; $i++){
          echo "<a href=\"".$_SERVER["PHP_SELF"]."?start=".($i*$num_records)."\">".($i+1)."</a>";
      }

เหมือนว่าจะผิดพลาดครับที่ *** แต่ความรู้ยังไม่มากพอแบบว่ามือใหม่ ขอรบกวนคุณ Admin อีกรอบแล้วกัน

Administrator
Administrator
Sat 9 Sep 2006 00:12:39
$result = odbc_exec($conn, ("SELECT TOP $num_records * FROM Hardware ORDER BY Name ASC ".(isset($_GET["start"])?$_GET["start"]:0).",".$num_records));

ตรงนี้เป็นโค๊ดเพื่อสร้าง parameter ให้กับ LIMIT ครับ คำสั่งที่ใช้สำหรับ SQL Server ควรจะเหลือ

$result = odbc_exec($conn, ("SELECT TOP $num_records * FROM Hardware ORDER BY Name ASC");

เท่านี้ครับ
เด็กมีปัญหา
เด็กมีปัญหา
Sat 9 Sep 2006 12:31:19

แล้วถ้าต้องการให้มันแสดงหน้าเหมือนกับการใช้ limit ล่ะครับ แบบว่าถ้าใช้ top มันจะแสดงแค่หน้าแรกเท่านั้น อย่างนี้ต้องทำอย่างไรบ้างล่ะครับผม แบบว่าขอละเอียดเลยแล้วกันครับ พยายามนั่งงมเมื่อคืนแล้วครับแต่ทำไม่ได้ -_-"

Administrator
Administrator
Sat 9 Sep 2006 13:24:24
ต้องใช้ SELECT TOP ซ้อนกันครับ เช่น

"SELECT TOP 10 * FROM Hardware h WHERE h.id NOT IN (SELECT TOP 20 * FROM Hardware ORDER BY Name ASC) ORDER BY Name ASC"

โดย h.id เป็น field ที่เป็น primary key ครับ จากโค๊ดจะได้ record ตั้งแต่ record ที่ 11 - 20 ครับ
เด็กมีปัญหา
เด็กมีปัญหา
Sat 9 Sep 2006 19:31:13

จะลองทำดูนะครับ ขอบคุณครับคุณ Admin

p_narak
p_narak
Thu 7 Feb 2008 17:28:21
Admin เก่งจังค่ะ ขอบคุณที่ให้ความรู้นะคะ
splintercell_p...
splintercell_pandora
Thu 28 Feb 2008 11:27:05

แล้วการนับทีละหน้าแบบต่อเนื่องหล่ะ

เช่น หน้าแรก 1-50 แล้วหน้าที่ สอง 51-100 หล่ะ มันไม่ไป มันตัดที่ 1-50 ตลอดเลย

งง.... Please...

webmaster
webmaster
Sat 8 Mar 2008 02:45:06
ก็หาเลขหน้าคูณด้วย record ต่อ 1หน้าจะได้ค่าเริ่มต้น ค่าท้ายก็เอาจำนวน record มาบวกเท่านั้นครับ
aom
aom
Fri 19 Jun 2009 09:06:23

สวัสดีค่ะรบกวน ถามหน่อยนะค่ะ

เรื่องการแบ่งหน้านะค่ะ  อ่านข้างบนมาแล้วงงค่ะ

คืองานที่ต้องการแบ่งหน้าคือ การโฟสข่าวอ่ะค่ะ  ตอนนี้มันโชว์อยู่หน้าเดียวแล้วมันยาวมาก

ต้องการแบ่งหน้าให้โชว์หน้าละประมาณ 5ข่าวเท่าๆกัน รบกวนสอนหน่อยนะค่ะว่าเขียนโค้ดยังไง

ปล.เด็กฝึกหัด

webmaster
webmaster
Fri 19 Jun 2009 16:13:10
โค๊ดทั้งหมด อยู่ด้านบนแล้วครับ หรือไม่ก็ลอง search ดูในนี้อีกทีครับจำไม่ได้ว่าเขียนไว้ที่ไหนอีก
baby_u
baby_u
Tue 13 Oct 2009 16:02:59

ทำได้ทุกอย่างแล้วแต่กดตงเปลี่ยนหน้ามันไม่ยอมเปลี่ยคับช่วยดุให้ทีคับ

include('config.inc.php');
$rowsPerPage = 20;
$pageNum = 1;
if(isset($_GET['page']))
{
$pageNum = $_GET['page'];
}

$offset = ($pageNum - 1) * $rowsPerPage;

$sql = "select * from quiz";
 $dbquery = mysql_db_query($dbname, $sql);
 $allnum = mysql_num_rows($dbquery);
$totalpage=ceil($allnum/$rowsPerPage);
if($start == 0)
{
 $start=0 ;
}
 $sql = "select * from quiz order by id_question desc limit $offset, $rowsPerPage";
 $dbquery = mysql_db_query($dbname, $sql);
 $num_rows = mysql_num_rows($dbquery);
 $i=0;
  while ($i < $num_rows)
   {
if($bg == "#FDFDFD") { //ส่วนของการ สลับสี
$bg = "#E6E6E6";
} else {
$bg = "#FDFDFD";
}
   $result = mysql_fetch_array($dbquery);
   $id_question = $result[id_question];
   $title = $result[title];
   $name = $result[name];
   $message = $result[message];
   $email = $result[email];
   $date_q = $result[date_q];
   $view = $result[view];
   //$count_q = $today_date;
   $today_date = date('d/m/y');
    ?>
    <tr bgcolor="<?echo "$bg";?>">
    <?
     print "<td width='2%' align='center'><img src='images/icon.gif'></td>";
     print "<td ><A HREF='ans.php?id_question=$id_question&views=1&staff=$staff&pass=$password' target='$id_question'>";
     echo substr($title,0,120);
     echo "...</A>&nbsp;";
   
     if ($today_date == $date_q){ echo "<img src=images/newff56.gif valign='top'>"; }else { echo "";}
     
//--------------- update กระทู้ 

include "config.inc.php";

$today_date = date('d/m/y');

$result = mysql_query("SELECT * FROM ans where id_question='$id_question'");
while($row = mysql_fetch_array($result))


 {
//    echo $row['date_a'];
    $date_day = date('d/m/y');
  if ($row['date_a']=="$date_day")
    { 
     
      echo "<img src='images/update2.gif' width='50'>";

    }
    else
    {
     echo "&nbsp;";
    }   
 }


    
     
     echo "</td>";
     print "<td width='10%' align='center'><font size='1'>";echo substr($name,0,15);echo"</font></td>";
     print "<td width='7%'> <font size='1'>" .$date_q." </font></td>";
     print "<td width='7%' align='center'> <font size='1'>" .$view."</font> </td>";  
        
    print "</tr>";
   $i++;
   }   
   print"</table>";
echo "<table width=700><tr><td>";
echo "<div class='text_news2'>";
//echo "<ul id='navlist'>";  
$page = ceil($allnum/$rowsPerPage);
for($i = 0; $i < $page; $i++){
    echo " | <a href='?id=webboard&start=".($i*$rowsPerPage)."'>".($i+1)."</a>";
 
}

webmaster
webmaster
Tue 13 Oct 2009 16:49:12
คุณเขียนรับตัวแปร page แต่ไม่มีการส่งค่าตัวแปรนั้นไปนี่ครับ
baby_u
baby_u
Tue 13 Oct 2009 17:05:45

คือว่าทุกอย่างมันได้หมดแล้วอะคับเหลือแต่เวลากดเลขหน้า แบบสมมุดไปหน้า3มันไม่เปลี่ยนให้แต่ถ้าไปกำหนดให้เริ่มหน้า3มันโชอะคับ   ชวยผมทีแบบว่าไม่ค่อยเป็นคับ

webmaster
webmaster
Tue 13 Oct 2009 20:32:16
ก็อย่างที่แจ้งแล้วครับ
PHP
  1. if(isset($_GET['page']))
  2. {
  3. $pageNum = $_GET['page'];
  4. }

เขียนรับตัวแปรชื่อ page แต่เวลาส่ง
PHP
  1. $page = ceil($allnum/$rowsPerPage);
  2. for($i = 0; $i < $page; $i++){
  3.     echo " | <a href='?id=webboard&start=".($i*$rowsPerPage)."'>".($i+1)."</a>";
  4.  
  5. }

ไม่มีการส่งตัวแปร page นี่ครับ
baby_u
baby_u
Wed 14 Oct 2009 09:21:45

ต้องทำยังไงบ้างอะคับคือทำตามตัวอย่างข้างบนมา

webmaster
webmaster
Wed 14 Oct 2009 13:29:51
ข้างบนชื่อตัวแปรไม่เหมือนกันนะครับ ตรวจสอบดูอีกทีครับ
baby_u
baby_u
Thu 15 Oct 2009 16:05:20

ยังไม่ได้เลยคับช่วยแนะอีกหน่อยได้ไหมครับ ขอบคุณครับ

baby_u
baby_u
Thu 15 Oct 2009 17:58:48

ได้แล้วครับ ขอบคุณมากๆเลยครับ

ขออีกคำถามครับถ้ามีหลายหน้าแต่ไม่ต้องการโชทั้งหมดจะทำอย่างไรครับ

<< 1 | 2 | 3 >> พอกด >> ก็จะกลายเป็น << 2 | 3 | 4 >>

หรือไม่ก็ << 1 | 2 | 3 | ...... | 20 | 21 | >>  อาไรแบบนี้อะคับ  ขอบคุณอีกทีนะคับ

 

webmaster
webmaster
Thu 15 Oct 2009 20:11:16
ก็หาค่าหน้าปัจจุบัน, หน้าสุดท้าย แล้วก็เขียน loop แล้วก็ตรวจสอบว่าหน้าปัจจุบันเท่าไร ก็แสดง +1 และ -1 เท่านั้น
baby_u
baby_u
Fri 16 Oct 2009 11:19:58
อู ขอตัวอย่างหน่อยได้ไหมครับ แบบว่านึกภาพไม่ออกเลย
webmaster
webmaster
Fri 16 Oct 2009 23:08:56
เช่น
PHP
  1. if($currentpage - 2 > 0){
  2. //echo $currentpage -2, $currentpage -1
  3. }
  4. //echo $currentpage
  5. if($currentpage + 2 < $maxpage){
  6. //echo $currentpage+1, $currentpage+2
  7. }


baby_u
baby_u
Mon 19 Oct 2009 09:15:25

ขอแบบเต็มๆได้ไหมครับ

webmaster
webmaster
Tue 20 Oct 2009 13:10:16
ลองเขียนดูก่อนครับ ไม่ยากเกินไปหรอกครับ
Reply: อยากได้โค้ดแบ่งหน้าครับ รายละเอียดข้างใน อิ ๆ ฟอร์มเดิม
Name:
E-mail:
Verify: Verify code