PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

เลือก checkbox ในข้อมูลหลายๆ หน้าด้วย cookie อย่างง่าย

05 March 2014 By


ตัวอย่างโค้ดนี้ จะเป็นการประยุกต์ รวมการใช้งานเนื้อหาต่างๆ
มาใช้งาน โดยรูปแบบของการทำงานคือ
 
มีเนื้อหาที่ดึงจากฐานข้อมูล แสดงในลักษณะ การแบ่งหน้า
อ่านได้ที่ 
 
แบ่งหน้า ด้วย php เพิ่ม หัว ท้าย ด้วย thead และ tfoot อย่างง่าย
http://www.ninenik.com/content.php?arti_id=468 via @ninenik
 
โดยเราสามารถจัดการกับ แต่ละรายการในตารง ของแต่ละหน้า ด้วยการกำหนด
ใช้งาน checkbox โดยกำหนด class="myChkBox" และจะเก็บค่า 
เท่ากับ ค่าหลักของข้อมูล ที่ เป็นแบบ primary key สำหรับไว้ใช้งาน
 
เมื่อเลือกรายการใดๆ แล้ว ก็จะทำการเน้นบรรทัดที่ทำการเลือก
และสร้าง cookie เก็บค่านั้นๆ ไว้ใช้งาน เพื่อที่เมื่อย้อนกลับ
มาหน้าเดิมแล้ว รายการนั้นก็จะยังถูกเลือกอยู่ 
 
เมื่อเลือกรายการ แต่ละหน้า แล้ว ถ้ามีการกดปุ่ม submit ส่งข้อมูล
เราก็จะใช้ ค่าตัวแปร cookie นั้นในการใช้งานต่อไป
โดยหลังจากหดปุ่ม submit และเรียกใช้งานแล้ว ก็จะทำการ ลบตัวแปร cookie นั้นๆ
เพื่อเริ่มต้นการทำงานใหม่
 
ตัวอย่าง

 
ดาวน์โหลดไฟล์ ตัวอย่าง 
http://www.ninenik.com/download/test_page_checkbox_cookie.rar
 
 
อธิบาย สิ่งที่ควรทำ และโค้ดสำคัญๆ
 
ส่วนของ checkbox สำหรับเลือก หรือไม่เลือกทั้งหมด
// สำหรับเก็บค่าหน้าของแต่ละ page เพื่อใช้งานใน cookie
// ถ้าไม่ได้กำหนด ให้มีค่าเท่ากับ 1 
$cookie_page=(!isset($_GET['pages']))?1:$_GET['pages'];

// checkbox กำหนดชื่อ และ id ตามนี้ได้เลย 
<input name="checkAll" type="checkbox" id="checkAll" value="<?=$cookie_page?>"
          <?=($_COOKIE['chkbox_all'][$cookie_page]==$cookie_page)?"checked":""?>  />

// ถ้าหน้าไหน ถูกเลือกทั้งหมด พอกลับมาหน้านั้น ตรวจสอบ cookie หน้าเพจว่า ถูกเลือกหรือไม่
<?=($_COOKIE['chkbox_all'][$cookie_page]==$cookie_page)?"checked":""?>
 
 
ส่วนของตาราง
// ตาราง จะต้องกำหนด class="myTable" ส่วนอื่นๆ ปรับตามต้องการ
<table class="myTable" width="700" border="1" align="center" cellpadding="0" cellspacing="0">
 
 
ส่วนของแถวของชุดข้อมูล
// ตรวจสอบ และสลับสี ตามลำดับข้อมูล ว่าเป็นแถวคู่หรือคี่ ด้วย<?=($i%2==1)?"RowOdd":"RowEven"?>
<tr class="<?=($i%2==1)?"RowOdd":"RowEven"?><?=($_COOKIE['chkbox'][$rs['province_id']]==$rs['province_id'])?" selectedRow":""?>">

// และถ้าแถวนั้น ถูกเลือกแล้ว ก็จะเพิ่ม class css selectedRow เพิ่มเข้าไป โดยเช็คจาก ค่า  cookie
<?=($_COOKIE['chkbox'][$rs['province_id']]==$rs['province_id'])?" selectedRow":""?>
 
 
ส่วนของ checkbox แต่ละรายการ
// ต้องใช้ class="myChkBox" และกำหนดชื่อและไอดี เป็นแบบ array name="item[]" , id="item[]"
<input name="item[]" type="checkbox" class="myChkBox" id="item[]" value="<?=$rs['province_id']?>" 
 <?=($_COOKIE['chkbox'][$rs['province_id']]==$rs['province_id'])?"checked":""?> />

// ตรวจสอบ cookie ของแต่ละรายการ ถ้าเท่ากับให้ทำการเลือก checkbox นั้น
<?=($_COOKIE['chkbox'][$rs['province_id']]==$rs['province_id'])?"checked":""?>

 
ตัวอย่างโค้ดไฟล์ ทดสอบสอบ 
test_page_head_footer.php

<?php  
$link=mysql_connect("localhost","xxxxx","xxxxx"); // เชื่อมต่อ Server  
mysql_select_db("xxxxx");  // ติดต่อฐานข้อมูล  
mysql_query("set character set utf8"); // กำหนดค่า character set ที่จะใช้แสดงผล  
?>  
<?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>";   
    }   
}
?>
<!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" />
<title></title>

<style type="text/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;   
    height:25px;    
    width:45px;   
    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: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;	
}   
.browse_page a:hover{   
	border:1px solid #CCCCCC;
	background-color:#000000;
    color:#FFFFFF;   
}   
.browse_page a.selectPage{   
    display:block;   
    height:25px;   
    width:45px;   
    font-size:14px;   
    float:left;   
    margin-right:2px;   
	border:1px solid #CCCCCC;
	background-color:#000000;
    color:#FFFFFF;   
    text-align:center;   
    line-height:22px;    
    font-weight:bold;   
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;	
}   
.browse_page a.SpaceC{   
    display:block;   
    height:25px;   
    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: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;	
}   
.browse_page a.naviPN{   
    width:50px;   
    font-size:12px;   
	height:25px;  
    display:block;   
/*    width:25px;   */
    float:left;   
	border:1px solid #CCCCCC;
	background-color:#000000;
    color:#FFFFFF;   
    text-align:center;   
    line-height:22px;   
    font-weight:bold;      
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;	
}  
/* จบ css แบ่งหน้า */
/* css สำหรับแถวคี่ */  
.RowOdd{  
    background-color:#EAEAEA;         
}  
/* css สำหรับแถวคู่ */  
.RowEven{  
    background-color:#FBFBFB;     
}  
/* css สำหรับแภวที่เลือก */  
.selectedRow{  
    background-color:#99FF00;     
}  
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>    
<script type="text/javascript">
$(function(){
					
	$("#checkAll").click(function(){
		var parentTR=$(".RowOdd,.RowEven");
        var statusCheckBox=($(this).prop("checked"))?true:false;
		$(this).parents(".myTable").find(".myChkBox").prop("checked",statusCheckBox);
		$(this).parents(".myTable").find(".myChkBox").each(function(j,k){
			if(statusCheckBox){			
				set_cookie("chkbox",1,$(".myChkBox").eq(j).val());					
			}else{
				set_cookie("chkbox",0,$(".myChkBox").eq(j).val());		
			}
		});
		if($(this).prop("checked")){
			parentTR.addClass("selectedRow");
			set_cookie("chkbox_all",1,$(this).val());		
		}else{
			parentTR.removeClass("selectedRow");
			set_cookie("chkbox_all",0,$(this).val());		
		}
	});
	
	$("input.myChkBox").click(function(){
		var parentTR=$(this).parents(".RowOdd,.RowEven");
		if($(this).prop("checked")){
			parentTR.addClass("selectedRow");
			set_cookie("chkbox",1,$(this).val());				
		}else{
			parentTR.removeClass("selectedRow");
			set_cookie("chkbox",0,$(this).val());		
		}
	});
});
function set_cookie(cname,action,val){
	var date = new Date();  
	if(action==1){
		var days=1; // กำหนดจำนวนวันที่ต้องการให้จำค่า  
		date.setTime(date.getTime()+(days*24*60*60*1000));  		
	}else{
		date.setTime(date.getTime()*-1);  	
	}
	var expires = "; expires="+date.toGMTString();  					
	document.cookie = cname+"["+val+"]=" +val+ "; expires=" + expires + "; path=/";    			
}
</script>
</head>

<body>



<table width="800" border="0" align="center" cellpadding="0" cellspacing="0">
 <tbody>
  <tr>
    <td align="left">
<br />
<br />
    <form id="form1" name="form1" method="post" action="test_submit_checkbox.php?<?=time()?>">
      <table class="myTable" width="700" border="1" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td width="50" height="25" align="center" bgcolor="#CCFFCC">
          <?php
		  $cookie_page=(!isset($_GET['pages']))?1:$_GET['pages'];
		  ?>
          <input name="checkAll" type="checkbox" id="checkAll" value="<?=$cookie_page?>"
          <?=($_COOKIE['chkbox_all'][$cookie_page]==$cookie_page)?"checked":""?>  />
           </td>
          <td width="50" height="25" align="center" bgcolor="#CCFFCC">#</td>
          <td height="25" align="center" bgcolor="#CCFFCC">Province Name</td>
          </tr>
<?php
        $i=1;
        $q="SELECT * FROM  province_th WHERE 1 ";
        $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   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 class="<?=($i%2==1)?"RowOdd":"RowEven"?><?=($_COOKIE['chkbox'][$rs['province_id']]==$rs['province_id'])?" selectedRow":""?>">
          <td height="25" align="center">
          <input name="item[]" type="checkbox" class="myChkBox" id="item[]" value="<?=$rs['province_id']?>" 
		  <?=($_COOKIE['chkbox'][$rs['province_id']]==$rs['province_id'])?"checked":""?> />
          </td>
          <td height="25" align="center"><?=(($e_page*$chk_page)+$i)?></td>
          <td height="25" align="left"> &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <?=$rs['province_name']?></td>
          </tr>
 <?php $i++; } ?>           
      </table>

<br />
<center>
  <input type="submit" name="button" id="button" value="Submit" />
</center>      
      
    </form>
<br />
<br />
    
    </td>
  </tr>
</tbody>
  
<thead>
  <tr>
    <td align="left">
    
<div style="margin:auto;width:95%;">
    <?php if($total>$e_page){ ?>                  
    <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>
</thead>    
  
<tfoot>
  <tr>
    <td align="left">
 
 <div style="margin:auto;width:95%;">
     <?php if($total>$e_page){ ?>                  
    <div class="browse_page">   
    <?php      
    // เรียกใช้งานฟังก์ชั่น สำหรับแสดงการแบ่งหน้า      
    page_navi($before_p,$plus_p,$total,$total_p,$chk_page);       
    ?>
    </div>   
    <?php } ?>     
</div>  
    
    </td>
  </tr>
</tfoot>      
</table>


</body>
</html>
 
ตัวอย่างโค้ดไฟล์ รับค่า checkbox 
test_submit_checkbox.php

<?php
// ฟังก์ชั่น redirect หรือย้อนกลับไปหน้าที่ต้องการ ส่งค่า url  กับ เวลา ที่ต้องการดีเลย์
function goURL($URL,$delay_time){
	echo "<meta http-equiv="refresh" content="$delay_time;URL=".$URL."" />";
	exit;
}
?>
<!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" />
<title>
 </title>
 <script type="text/javascript">
 function set_cookie(cname,action,val){
	var date = new Date();  
	if(action==1){
		var days=1; // กำหนดจำนวนวันที่ต้องการให้จำค่า  
		date.setTime(date.getTime()+(days*24*60*60*1000));  		
	}else{
		date.setTime(date.getTime()*-1);  	
	}
	var expires = "; expires="+date.toGMTString();  					
	document.cookie = cname+"["+val+"]=" +val+ "; expires=" + expires + "; path=/";    			
}
 </script>
</head>

<body>

<br />
<br />

<div style="margin:auto;width:500px;">
<?php
// เมื่อส่งค่าปุ่ม sumbit ชื่อ button มา
if($_POST['button']){
	
	// เช็คว่ามีการกดเลือก รายการมาหรือไม่
	if(count($_COOKIE['chkbox'])>0){
		foreach($_COOKIE['chkbox'] as $k_cookie=>$v_cookie){
			echo $v_cookie."<br>";
//			ค่า จาก checkbox ที่เป็น id หลัก หรือค่า primary key ที่จะใช้งาน
//			เช่น วนแสดงข้อมูล id ของจังหวัด ที่ส่งมา แล้วนำไปใช้งาน
//			ส่วนนี้แทรกโค้ดคำสั่ง อื่นๆ ตามต้องการ			
		}
	}					
	
	// ส่วนสำหรับล้างค่า cookie ที่เป็น checkbox รายการหลัก ที่ส่ง id หลักมาใช้งาน
	if(count($_COOKIE['chkbox'])>0){
		foreach($_COOKIE['chkbox'] as $k_cookie=>$v_cookie){			
			echo "<script>";
			echo "set_cookie('chkbox',0,".$v_cookie.");";
			echo "</script>";			
		}
	}	
	//  ส่วนนี้สำหรับล้างค่า cookie ที่เป็น checkbox all ของแต่ละเพจ 
	if(count($_COOKIE['chkbox_all'])>0){
		foreach($_COOKIE['chkbox_all'] as $k_cookie=>$v_cookie){
			echo "<script>";
			echo "set_cookie('chkbox_all',0,".$v_cookie.");";
			echo "</script>";			
		}
	}	
	echo "<br /><hr />กลับไปหน้าเดิม ใน 5 วินาที";
	goURL($_SERVER['HTTP_REFERER'],5); // กลับไปหน้าเดิม ใน 5 วินาที
}
?>

</div>
<br />

</body>
</html>

 

Tags:: cookie checkbox





URL สำหรับอ้างอิง