PHP开发:如何获取复选框data-valuetwo属性值并传入后台处理函数
解决方案
方案1:拼接value值(最简便)
直接把id和month_claim用分隔符拼在checkbox的value属性里,后台接收后拆分即可:
修改单复选框结构代码:
<input name="checkbox[]" type="checkbox" class="checkbox" id="checkbox[]" value="<?php echo $ot['id'].'|'.$ot['month_claim']; ?>" >
修改后台处理逻辑:
function getCheckboxUpdate(){ $conn=db(); if(isset($_POST['checkbox'])){ $checkbox = $_POST['checkbox']; $activate = isset($_POST['activate']); // 拆分获取id和month_claim $ids = []; $month_claim = ''; foreach($checkbox as $item){ list($id, $mc) = explode('|', $item); $ids[] = intval($id); // 转数字防注入 $month_claim = $mc; // 若所有选中项month_claim一致可直接赋值 } $id_str = "('" . implode( "','", $ids ) . "');" ; // 改用预处理执行防SQL注入 $status = $activate ? 'VERIFIED' : 'REJECTED'; $sql="UPDATE aims_ot_approval ap LEFT JOIN aims_ot a ON a.id = ap.ot_id SET ap.verify_status = ?,ap.verify_date=CURRENT_TIMESTAMP WHERE a.month_claim = ? AND a.staff_record_id IN $id_str" ; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $status, $month_claim); $stmt->execute(); return $stmt->get_result(); } }
方案2:动态传值(不修改原有value结构)
如果不想改动原有value逻辑,可新增隐藏字段,提交表单时把选中项的data-valuetwo值写入隐藏字段传递:
修改表单结构,新增隐藏字段:
<form name="frmactive" method="post" action=""> <!-- 新增隐藏字段存储month_claim --> <input type="hidden" name="month_claim" id="month_claim" value=""> <!-- 原有表单代码不变 --> <table border="0"> <tr><td colspan="5"> <input class="btn btn-success" name="activate" type="submit" id="activate" value="VERIFY" /> <input class="btn btn-danger" name="deactivate" type="submit" id="deactivate" value="REJECT" /> </td> </table> </form>
修改JS脚本,增加表单提交监听逻辑:
$(document).ready(function(){ // 原有全选逻辑不变 $('#select_all').on('click',function(){ if(this.checked){ $('.checkbox').each(function(){ this.checked = true; }); }else{ $('.checkbox').each(function(){ this.checked = false; }); } }); $('.checkbox').on('click',function(){ if($('.checkbox:checked').length == $('.checkbox').length){ $('#select_all').prop('checked',true); }else{ $('#select_all').prop('checked',false); } }); // 新增表单提交监听,写入month_claim值 $('form[name="frmactive"]').on('submit', function(){ // 若所有选中项month_claim一致,取第一个值即可 let checkedMc = $('.checkbox:checked').first().data('valuetwo'); $('#month_claim').val(checkedMc); // 若需要传递多个不同的month_claim,可转JSON字符串存储,后台再json_decode解析 // let mcs = []; // $('.checkbox:checked').each(function(){ // mcs.push($(this).data('valuetwo')); // }); // $('#month_claim').val(JSON.stringify(mcs)); }); });
后台直接读取$_POST['month_claim']即可使用。
内容的提问来源于stack exchange,提问作者AccidentlyADeveloper
相关产品推荐
相关产品推荐

