เขียนระบบ 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 อีกหรือแค่ใช้ในการสร้างเอสคิวเอลคิวรีอย่างเดียว
