繁体   English   中英

将复选框值的多行保存到数据库中

[英]Save multiple row of checkbox value into database

我正在创建一个涉及复选框的表单。 连续有5个复选框。 如果用户添加另一行,将还有另外5个复选框。

看起来像这样 在此处输入图片说明

我使用的代码

 <tbody id="dataTable"> <tr> <td> <input type="text" class="form-control" name="startTime[]"> </td> <td> <input type="text" class="form-control" name="endTime[]"> </td> <td> <input type="checkbox" name="Monday[0]" value="1"> </td> <td> <input type="checkbox" name="Tuesday[0]" value="1"> </td> <td> <input type="checkbox" name="Wednesday[0]" value="1"> </td> <td> <input type="checkbox" name="Thursday[0]" value="1"> </td> <td> <input type="checkbox" name="Friday[0]" value="1"> </td> <td> <input type="button" class="btn btn-danger" value="Delete" onClick="deleteRow('dataTable')" /> </td> </tr> </tbody> 

我用于将数据插入数据库的代码,

 <?php if (mysqli_connect_errno($con)) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } else { if ($_POST['startTime']) { foreach ($_POST["startTime"] as $key => $value) { $endTime = $_POST["endTime"][$key]; $monday = isset($_POST["Monday"][$key]) ? 1 : 0; $tuesday = isset($_POST["Tuesday"][$key]) ? 1 : 0; $wednesday = isset($_POST["Wednesday"][$key]) ? 1 : 0; $thursday = isset($_POST["Thursday"][$key]) ? 1 : 0; $friday = isset($_POST["Friday"][$key]) ? 1 : 0; $sql = "INSERT INTO timetableschedule ( startTime, endTime, Monday, Tuesday, Wednesday, Thursday, Friday) " . "VALUES ('$value', '$endTime', '$monday', '$tuesday', '$wednesday', '$thursday', '$friday')"; mysqli_query($con, $sql); } } echo "1 record added"; mysqli_close($con); } ?> 

假设我以上图所示的方式提交表格,我在数据库中得到了这个结果, 在此处输入图片说明

假定时间为“ 1600 1700”的值出现在“ 1400 1500”行上。 我希望将值保存为选定的值。

编辑 :删除零( name="Monday[]" )将无法解决问题,因为未提交未选中的单选或复选框元素。

我会考虑在生成行时向您的复选框名称添加索引,例如:

  <input type="checkbox" name="Monday[0]" value="1">

  <input type="checkbox" name="Tuesday[0]" value="1">

...

  <input type="checkbox" name="Monday[1]" value="1">

  <input type="checkbox" name="Tuesday[1]" value="1">

...

  <input type="checkbox" name="Monday[2]" value="1">

  <input type="checkbox" name="Tuesday[2]" value="1">

这样,您的PHP循环应该可以工作

JSON方式:

 function sendFunction() { //tr var checkboxJSON = {}; var i = 0; var tr = $("#dataTable > tr").each(function(){ //checkboxes checkboxJSON[i] = {}; $(this).find("input[type='checkbox']").each(function(){ if ($(this).is(':checked')) { checkboxJSON[i][$(this).attr("name")] = 1; } else { checkboxJSON[i][$(this).attr("name")] = 0; } }); i++; }); var checkboxData = JSON.stringify(checkboxJSON); //send this to the server as checkboxdata! console.log(checkboxData); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table> <tbody id="dataTable"> <tr> <td> <input type="text" class="form-control" name="startTime[]"> </td> <td> <input type="text" class="form-control" name="endTime[]"> </td> <td> <input type="checkbox" name="Monday" value="1"> </td> <td> <input type="checkbox" name="Tuesday" value="1"> </td> <td> <input type="checkbox" name="Wednesday" value="1"> </td> <td> <input type="checkbox" name="Thursday" value="1"> </td> <td> <input type="checkbox" name="Friday" value="1"> </td> <td> <input type="button" class="btn btn-danger" value="Delete" onClick="deleteRow('dataTable')" /> </td> </tr> <tr> <td> <input type="text" class="form-control" name="startTime[]"> </td> <td> <input type="text" class="form-control" name="endTime[]"> </td> <td> <input type="checkbox" name="Monday" value="1"> </td> <td> <input type="checkbox" name="Tuesday" value="1"> </td> <td> <input type="checkbox" name="Wednesday" value="1"> </td> <td> <input type="checkbox" name="Thursday" value="1"> </td> <td> <input type="checkbox" name="Friday" value="1"> </td> <td> <input type="button" class="btn btn-danger" value="Delete" onClick="deleteRow('dataTable')" /> </td> </tr> </tbody> </table> <input type="button" class="btn btn-danger" value="Send" onClick="sendFunction('dataTable')" /> 


为您的解决方案。 上班:

  1. 将隐藏的输入设置为您的窗体。
 <input type="hidden" value="{}" name="checkboxes" />
  1. 在表单上使用onSubmit事件
 <form id="formDates" action="file.php" method="post" onSubmit="checkForm" />   
  1. 使用复选框代码编写提交功能:
 function checkForm(e)
 {
     e.preventDefault(); //prevents form from being sent to early

     var checkboxJSON = {};
     var i = 0;
     var tr = $("#dataTable > tr").each(function(){
         //checkboxes
         checkboxJSON[i] = {};
         $(this).find("input[type='checkbox']").each(function(){

            if ($(this).is(':checked'))
            {
              checkboxJSON[i][$(this).attr("name")] = 1;
            }
            else
            {  
                checkboxJSON[i][$(this).attr("name")] = 0;
            }
         });
         i++;
      });

      $("input[type='hidden']").val(JSON.stringify(checkboxJSON)); //save this to the hidden input.
     document.getElementById("formDates").submit(); //submit all the data.
 }
  1. 在PHP中,您可以使用json_decode()这些数据重建为一个数组
$checkboxes = json_decode($_POST['checkboxes'], true); //use true to set it as an array.
foreach ($_POST["startTime"] as $key => $value) {

        $endTime = $_POST["endTime"][$key];
        $monday = $checkboxes[$key]['Monday']; //key should refer to an INT. 0 for the first row.
        $tuesday = $checkboxes[$key]['Tuesday'];
        $wednesday = $checkboxes[$key]['Wednesday'];
        $thursday = $checkboxes[$key]['Thursday'];
        $friday = $checkboxes[$key]['Friday'];


        $sql = "INSERT INTO timetableschedule ( startTime, endTime, Monday, Tuesday, Wednesday, Thursday, Friday) " .
                "VALUES ('$value', '$endTime', '$monday', '$tuesday', '$wednesday', '$thursday', '$friday')";
        mysqli_query($con, $sql);
}    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM