PlusMagi's Blog By Pitt Phunsanit Database,JavaScript,jQuery,PHP,Programming ส่งค่าตัวแปรในเช็กบ็อกซ์โดย jQuery

ส่งค่าตัวแปรในเช็กบ็อกซ์โดย jQuery

เขียนระบบ update ข้อมูลโดยใช้ ajax แต่ปัญหาคือ ใน form นี้มันมี input อยู่หลายตัว และเพราะว่าต้องการแค่ input ที่ชื่อ items[] ตัวเดียวเท่านั้น ถ้าส่ง data ไปโดยใช้ jQuery โดยปกติจะส่งค่าไปโดยใช้ .serialize () หรือ .serializeArray () ก็จะส่งตัวแปรอื่น ๆ ที่ไม่จำเป็นติดไปด้วย จนทำให้ url ยาวจนเกิน limit ทำให้ต้องหาวิธีส่งไปเฉพาะตัวที่ใช้จริง ๆ เท่านั้น

ตัวอย่างการส่งค่าไปในแบบ array
checkbox_to_array.html

<!doctype html>
<html>
 
<head>
 <meta charset="utf-8">
 <title>checkbox to array</title>
</head>
 
<body>
 <ul>
 <li>
 <input name="items[]" type="checkbox" value="c1">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c2">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c3">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c4">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c5">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c6">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c7">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c8">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c9">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c10">
 </li>
 </ul>
 <div id="result"></div>
 <button id="sendBtn" type="submit">Send</button>
 <script src="jquery-3.1.1.min.js"></script>
 <script>
 $ (function () {
 
 $ ('#sendBtn') .click (function () {
 var checkboxs = $ ('input[name="items\\[\\]"]:checked') ;
 
 alert ('checked ' + checkboxs.length + ' items') ;
 
 var values = checkboxs.map (function () {
 return $ (this) .val () ;
 }) .get () ;
 
 var params = {
 "id": 24,
 "items": values,
 };
 $.ajax ({
 "data": params,
 "success": function (data) {
 $ ('#result') .html (data) ;
 },
 "type": "GET",
 "url": "processing.php",
 }) ;
 
 }) ;
 
 }) ;
 </script>
</body>
 
</html>

ตัวอย่างการส่งค่าไปในแบบ string
checkbox_to_string.html

<!doctype html>
<html>
 
<head>
 <meta charset="utf-8">
 <title>checkbox to string</title>
</head>
 
<body>
 <ul>
 <li>
 <input name="items[]" type="checkbox" value="c1">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c2">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c3">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c4">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c5">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c6">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c7">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c8">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c9">
 </li>
 <li>
 <input name="items[]" type="checkbox" value="c10">
 </li>
 </ul>
 <div id="result"></div>
 <button id="sendBtn" type="submit">Send</button>
 <script src="jquery-3.1.1.min.js"></script>
 <script>
 $ (function () {
 
 $ ('#sendBtn') .click (function () {
 var checkboxs = $ ('input[name="items\\[\\]"]:checked') ;
 
 alert ('checked ' + checkboxs.length + ' items') ;
 
 var values = checkboxs.map (function () {
 return $ (this) .val () ;
 }) .get () .join () ;
 
 alert ('values = ' + values) ;
 
 var encoded = encodeURIComponent (values) ;
 
 alert ('URL encoded = ' + encoded) ;
 
 var decoded = decodeURIComponent (encoded) ;
 
 alert ('URL decoded = ' + decoded) ;
 
 $.ajax ({
 "data": 'id=24&items=' + encoded,
 "success": function (data) {
 $ ('#result') .html (data) ;
 },
 "type": "GET",
 "url": "processing.php",
 }) ;
 
 }) ;
 
 }) ;
 </script>
</body>
 
</html>

ตัวอย่างการนำค่าไปเขียนเป็น sql query
processing.php

<dl>
 <dt>method="GET"</dt>
 <dd><?=print_r ($_GET, true) ;?></dd>
 <dt>method="POST"</dt>
 <dd><?=print_r ($_POST, true) ;?></dd>
</dl>
<?php
if (is_array ($_REQUEST['items'])) {
 echo '<br>send items by array';
 $where = "WHERE id IN ('" . implode ("', '", $_REQUEST['items']) . "') ";
} else {
 echo '<br>send items by string';
 $where = "WHERE id IN ('" . str_replace (',', "', '", $_REQUEST['items']) . "') ";
}
 
$query = "SELECT *
FROM table_name
$where;";
 
echo '<br>example query = ' . $query;

เลือกใช้การส่งแบบสตริงหรืออาร์เรย์ ก็แล้วแต่ความสะดวก ที่ต้องนำไป loop อีกหรือแค่ใช้ในการสร้างเอสคิวเอลคิวรีอย่างเดียว