โค้ดและตัวอย่างตัวไปนี้ เป็นแนวทางการสร้างฟอร์มการค้นหา
โดยมีการใช้งานแท็กต่างๆ ทีหลากหลาย เนื้อหาส่วนนี้จะประยุกต์ต่อจากเนื้อหาใน
บทความเก่า
แนวทาง การค้นหาข้อมูล และแบ่งหน้า ด้วย php
https://www.ninenik.com/content.php?arti_id=497 via @ninenik
โดยจะใช้ตารางจังหวัดในประเทศไทย มาทดสอบ
1. สร้างไฟล์ เก็บฟังก์ชั่นการแบ่งหน้า ชื่อ func_page_navi.php
<?php // ฟังก์ชั่นสำหรับการแบ่งหน้า NEW MODIFY function page_navi($before_p,$plus_p,$total,$total_p,$chk_page){ global $urlquery_str; $pPrev=$chk_page-1; $pPrev=($pPrev>=0)?$pPrev:0; $pNext=$chk_page+1; $pNext=($pNext>=$total_p)?$total_p-1:$pNext; $lt_page=$total_p-4; if($chk_page>0){ echo "<a href='$urlquery_str"."pages=".intval($pPrev+1)."' class='naviPN'>Prev</a>"; } if($total_p>=11){ if($chk_page>=4){ echo "<a $nClass href='$urlquery_str"."pages=1'>1</a><a class='SpaceC'>. . .</a>"; } if($chk_page<4){ for($i=0;$i<$total_p;$i++){ $nClass=($chk_page==$i)?"class='selectPage'":""; if($i<=4){ echo "<a $nClass href='$urlquery_str"."pages=".intval($i+1)."'>".intval($i+1)."</a> "; } if($i==$total_p-1 ){ echo "<a class='SpaceC'>. . .</a><a $nClass href='$urlquery_str"."pages=".intval($i+1)."'>".intval($i+1)."</a> "; } } } if($chk_page>=4 && $chk_page<$lt_page){ $st_page=$chk_page-3; for($i=1;$i<=5;$i++){ $nClass=($chk_page==($st_page+$i))?"class='selectPage'":""; echo "<a $nClass href='$urlquery_str"."pages=".intval($st_page+$i+1)."'>".intval($st_page+$i+1)."</a> "; } for($i=0;$i<$total_p;$i++){ if($i==$total_p-1 ){ $nClass=($chk_page==$i)?"class='selectPage'":""; echo "<a class='SpaceC'>. . .</a><a $nClass href='$urlquery_str"."pages=".intval($i+1)."'>".intval($i+1)."</a> "; } } } if($chk_page>=$lt_page){ for($i=0;$i<=4;$i++){ $nClass=($chk_page==($lt_page+$i-1))?"class='selectPage'":""; echo "<a $nClass href='$urlquery_str"."pages=".intval($lt_page+$i)."'>".intval($lt_page+$i)."</a> "; } } }else{ for($i=0;$i<$total_p;$i++){ $nClass=($chk_page==$i)?"class='selectPage'":""; echo "<a href='$urlquery_str"."pages=".intval($i+1)."' $nClass >".intval($i+1)."</a> "; } } if($chk_page<$total_p-1){ echo "<a href='$urlquery_str"."pages=".intval($pNext+1)."' class='naviPN'>Next</a>"; } } ?>
2. สร้างไฟล์สำหรับกำหนด css สไตล์ สำหรับปุ่มแบ่งหน้า ชื่อ page_navi.css
/* css แบ่งหน้า */ .browse_page{ clear:both; margin-left:12px; height:25px; margin-top:5px; display:block; } .browse_page a,.browse_page a:hover{ display:block; width: 2%; font-size:14px; float:left; margin:0px 5px; border:1px solid #CCCCCC; background-color:#F4F4F4; color:#333333; text-align:center; line-height:22px; font-weight:bold; text-decoration:none; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .browse_page a:hover{ border:1px solid #CCCCCC; background-color:#999999; color:#FFFFFF; } .browse_page a.selectPage{ display:block; width:45px; font-size:14px; float:left; margin-right:2px; border:1px solid #CCCCCC; background-color:#999999; color:#FFFFFF; text-align:center; line-height:22px; font-weight:bold; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .browse_page a.SpaceC{ display:block; width:45px; font-size:14px; float:left; margin-right:2px; border:0px dotted #0A85CB; background-color:#FFFFFF; color:#333333; text-align:center; line-height:22px; font-weight:bold; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .browse_page a.naviPN{ width:50px; font-size:12px; display:block; /* width:25px; */ float:left; border:1px solid #CCCCCC; background-color:#999999; color:#FFFFFF; text-align:center; line-height:22px; font-weight:bold; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } /* จบ css แบ่งหน้า */
3. สร้างไฟล์ทดสอบ ชื่อ form_complex_search.php
<?php // เชื่อมต่อกับฐานข้อมูล $link=mysql_connect("localhost","root","test"); // เชื่อมต่อ Server mysql_select_db("test"); // ติดต่อฐานข้อมูล mysql_query("set character set utf8"); // กำหนดค่า character set ที่จะใช้แสดงผล include("func_page_navi.php"); // เรียกใช้งานฟังก์ชั่นแบ่งหน้า ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Form complex search</title> <link rel="stylesheet" href="page_navi.css"> </head> <body> <div style="margin:auto:width:80%;"> <br><br> <div style="margin:auto;text-align:left;width:700px;"> <!--ส่วนสร้างฟอร์ม สำหรับค้นหา --> <form id="form_search" name="form_search" method="get" action=""> เลือกอย่างหนึ่งอย่างใด หรือไม่เลือกก็ได้ || <input type="radio" name="myradio" id="myradio1" value="จ" <?=($_GET['myradio']=="จ")?" checked":""?>> มี "จ" <input type="radio" name="myradio" id="myradio2" value="ม" <?=($_GET['myradio']=="ม")?" checked":""?>> มี "ม" <input type="radio" name="myradio" id="myradio3" value="ส" <?=($_GET['myradio']=="ส")?" checked":""?>> มี "ส" <br><br> เลือกอย่างหนึ่งอย่างใด หรือไม่เลือกก็ได้ || <select name="myselect" id="myselect"> <option value="">เลื่อกเงื่่อนไข</option> <option value="ก" <?=($_GET['myselect']=="ก")?" selected":""?> >ขึ้นต้นด้วย ก</option> <option value="อุ" <?=($_GET['myselect']=="อุ")?" selected":""?>>ขึ้นต้นด้วย อุ</option> </select> <br><br> พิมพ์บางคำ บางตัว หรือไม่พิมพ์ก็ได้ || <input type="text" name="keyword" id="keyword" value="<?=$_GET['keyword']?>" /> <br><br> เลือกอย่างหนึ่งอย่างใด หรือเลือกทั้งสอง หรือไม่เลือกก็ได้ || <input type="checkbox" name="mycheckbox" id="mycheckbox" value="นี" <?=($_GET['mycheckbox']=="นี")?" checked":""?> > ลงท้ายด้วย "นี" <input type="checkbox" name="mycheckbox2" id="mycheckbox2" value="คร" <?=($_GET['mycheckbox2']=="คร")?" checked":""?>> ลงท้ายด้วย "คร" <br><br> <input type="submit" name="button" id="button" value="ค้นหา" /> <input type="button" name="btn_reset" value="Reset" onclick="window.location='form_complex_search.php'"> </form> <br /> <table width="100%" border="0" align="center" cellpadding="0" cellspacing="00"> <tbody> <tr> <td align="left" > <br /> <table width="100%" border="1" cellspacing="0" cellpadding="2" style="border-collapse:collapse;"> <tr> <td width="50" height="20" align="center" bgcolor="#F2F2F2">#</td> <td height="20" bgcolor="#F2F2F2"> Topic</td> </tr> <?php $i=1; $q="SELECT * FROM province_th WHERE 1 "; // เงื่อนไขสำหรับ radio if(isset($_GET['myradio']) && $_GET['myradio']!=""){ // ต่อคำสั่ง sql $q.=" AND province_name LIKE '%".trim($_GET['myradio'])."%' "; } // เงื่อนไขสำหรับ input text if(isset($_GET['keyword']) && $_GET['keyword']!=""){ // ต่อคำสั่ง sql $q.=" AND province_name LIKE '%".trim($_GET['keyword'])."%' "; } // เงื่อนไขสำหรับ select if(isset($_GET['myselect']) && $_GET['myselect']!=""){ // ต่อคำสั่ง sql $q.=" AND province_name LIKE '".trim($_GET['myselect'])."%' "; } // เงื่อนไขสำหรับ checkbox if((isset($_GET['mycheckbox']) && $_GET['mycheckbox']!="") || (isset($_GET['mycheckbox2']) && $_GET['mycheckbox2']!="")){ // ต่อคำสั่ง sql if($_GET['mycheckbox']!="" && $_GET['mycheckbox2']!=""){ $q.=" AND (province_name LIKE '%".trim($_GET['mycheckbox'])."' OR province_name LIKE '%".trim($_GET['mycheckbox2'])."' )"; }elseif($_GET['mycheckbox']!=""){ $q.=" AND province_name LIKE '%".trim($_GET['mycheckbox'])."' "; }elseif($_GET['mycheckbox2']!=""){ $q.=" AND province_name LIKE '%".trim($_GET['mycheckbox2'])."' "; }else{ } } // echo $q; $qr=@mysql_query($q); $total=@mysql_num_rows($qr); $e_page=10; // กำหนด จำนวนรายการที่แสดงในแต่ละหน้า if(!isset($_GET['pages'])){ $_GET['pages']=0; }else{ $_GET['pages']=$_GET['pages']-1; if($_GET['pages']<0){ $_GET['pages']=0; } $chk_page=$_GET['pages']; $_GET['pages']=$_GET['pages']*$e_page; } $q.=" ORDER BY province_id DESC LIMIT ".$_GET['pages'].",$e_page"; $qr=@mysql_query($q); if(@mysql_num_rows($qr)>=1){ $plus_p=($chk_page*$e_page)+@mysql_num_rows($qr); }else{ $plus_p=($chk_page*$e_page); } $total_p=ceil($total/$e_page); $before_p=($chk_page*$e_page)+1; /// END PAGE NAVI ZONE while($rs=@mysql_fetch_array($qr)){ ?> <tr> <td width="60" height="20" align="center"><?=(($e_page*$chk_page)+$i)?></td> <td height="20"> <?=$rs['province_name']?></td> </tr> <?php $i++; } ?> </table> <br /> </td> </tr> </tbody> <thead> <tr> <td align="left"> <div style="margin:auto;width:100%;"> <?php if($total>10){ ?> <div class="browse_page"> <?php if(count($_GET)<=1){ $urlquery_str="?"; }else{ $para_get=""; foreach($_GET as $key=>$value){ if($key!="pages"){ $para_get.=$key."=".$value."&"; } } $urlquery_str="?$para_get"; } // เรียกใช้งานฟังก์ชั่น สำหรับแสดงการแบ่งหน้า page_navi($before_p,$plus_p,$total,$total_p,$chk_page); ?> </div> <?php } ?> </div> </td> </tr> <tr> <td height="30" align="left"> </td> </tr> </thead> <tfoot> <tr> <td height="30"> </td> </tr> <tr> <td align="left"> <div style="margin:auto;width:100%;"> <?php if($total>10){ ?> <div class="browse_page"> <?php // เรียกใช้งานฟังก์ชั่น สำหรับแสดงการแบ่งหน้า page_navi($before_p,$plus_p,$total,$total_p,$chk_page); ?> </div> <?php } ?> </div> </td> </tr> </tfoot> </table> </div> </div> </body> </html>
ตัวอย่าง
โค้ตและตัวอย่างด้านบน เป็นแนวทางสำหรับการสร้างฟอร์ม การค้นหาข้อมูล
สามารถปรับเปลี่ยนและจัดรูปแบบได้ตามต้องการ หากเข้าใจหลักการ ก็จะสามารถประยุกต์
ได้เป็นอย่างดี