【问题标题】:use implode and ajax to insert checkbox values使用 implode 和 ajax 插入复选框值
【发布时间】:2017-02-06 01:30:40
【问题描述】:

我想插入我的复选框值,我不知道如何使用 ajax 获取所有值并使用 implode 将它们插入一行。

// this is my javascript where i take the data ,

function saveData() {
  var modsubj = $('#modalsubject').val();
  var modsect = $('#modalsection').val();
  var modday = $('#modalday').val();
  var modstart = $('#modalstarttime').val();
  var modend = $('#modalendtime').val();
  var moduser = $('#userID').val();

  $.ajax({
    type: "POST",
    url: "modal.funcs.php?p=add",
    data: "subj=" + modsubj + "&sect=" + modsect + "&day=" + modday + "&start=" + modstart + "&end=" + modend + "&user=" + moduser
  });

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" id="modalday[]" name="modalday[]" value="M">Monday &nbsp;&nbsp;
  </label>
</div>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" id="modalday[]" name="modalday[]" value="T">Tuesday &nbsp;&nbsp;
  </label>
</div>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" id="modalday[]" name="modalday[]" value="W">Wednesday &nbsp;&nbsp;
  </label>
</div>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" id="modalday[]" name="modalday[]" value="Th">Thursday &nbsp;&nbsp;
  </label>
</div>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" id="modalday[]" name="modalday[]" value="F">Friday &nbsp;&nbsp;
  </label>
</div>

这是我的 php 函数,我使用了 implode 函数,这样我就可以将数据插入一行。

$page = isset($_GET['p'])?$_GET['p']:'';
  if($page=='add'){
      foreach ($_POST['day'] as $key => $value) {
        $subj = $_POST['subj'];
        $sect = $_POST['sect']; 
        $day = implode("",$_POST['day']); 
        $strTime = $_POST['start'];
        $endTime = $_POST['end'];
        $user_id = $_POST['user'];
      }

        $auth_user->createSchedule($subj,$sect,$day,$strTime,$endTime,$user_id);
        $schedRow = $auth_user->readSchedule();

  } else if ($page=='edit') {

  }

【问题讨论】:

  • ID 必须是唯一的,所以 var modday = $('#modalday').val();不管用。将 id 更改为 class="modalday" 并遍历从$(".modalday :checked")返回的数组
  • 注意到了,那么我如何使用它来获取所有数据并使用 implode 对其进行压缩?
  • 查看我的评论的修改。什么是预期的输出?例如,您可以将“M,T,Th,F”返回给 PHP
  • 我专门按照你的指示做了,但还是一样,你确定我可以这样做吗?我对我的代码不是很自信,我期待一些剧烈的变化,但如果这样做会很棒,我认为我仍然缺少一些东西

标签: javascript php jquery ajax checkbox


【解决方案1】:

这里是如何向服务器发送列表

你可以分解一天得到一个天数组

要添加更多项目,请添加逗号和更多键值:

 data: { day: modday.join(","),
         subj:$('#modalsubject').val() // no comma on the last
       }

$(function() {
  $("#save").on("click", function() {
    saveData();
  });
});

function saveData() {
  var modday = [];
  $('.modalday:checked').each(function() {
    modday.push(this.value);
  });
  console.log(modday);
  $.ajax({
    type: "POST",
    url: "modal.funcs.php?p=add",
    data: { day: modday.join(",") }
  });

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" class="modalday" name="modalday[]" value="M">Monday &nbsp;&nbsp;
  </label>
</div>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" class="modalday" name="modalday[]" value="T">Tuesday &nbsp;&nbsp;
  </label>
</div>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" class="modalday" name="modalday[]" value="W">Wednesday &nbsp;&nbsp;
  </label>
</div>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" class="modalday" name="modalday[]" value="Th">Thursday &nbsp;&nbsp;
  </label>
</div>
<div class="checkbox">
  <label class="checkbox-inline">
    <input type="checkbox" class="modalday" name="modalday[]" value="F">Friday &nbsp;&nbsp;
  </label>
</div>
<button id="save">Save</button>

【讨论】:

  • 但是他需要键值对,这样他就可以在 PHP 中针对键提取值
  • 现在他不需要内爆任何东西。复选框到达已经内爆
  • 对。他如何对没有键的值执行 POST 操作。 albert,enistin 将作为一个值发送,但应用程序如何知道,这是名字和姓氏。如果它去就好了,firstName=albert&lastName=eistin
  • 我没有得到你的评论。如果他将, "user": + $('#userID').val() 添加到我的代码中,他将在 php 中获得 $_POST["user"] - 他目前只内爆复选框
  • 如果他没有对名称-值对进行预处理,那么它们当前将为modalday[]=T,modalday[]=W,modalday[]=F。 [] 的想法是向服务器传递一个数组,但由于他使用的是 AJAX 并且想要内爆,那么名称-值的用例在哪里?
【解决方案2】:

我自己尝试过,我认为大部分操作都可以在您的 saveData 函数中发生,而不是在 PHP 中。

我假设你会将你的 id 改为一个类,因为 id 应该是唯一的:

<input type="checkbox" class="modalday" name="modalday[]" value="M">Monday &nbsp;&nbsp;

看看这个:

function saveData() {
  var modsubj = $('#modalsubject').val();
  var modsect = $('#modalsection').val();

  var moddayAll = document.getElementsByClassName('modalday');

  var modday = [];

  for (let i = 0; i < moddayAll.length; i++) {
    if (moddayAll[i].checked) {
      modday.push(moddayAll[i].value);
    }
  }

  var modstart = $('#modalstarttime').val();
  var modend = $('#modalendtime').val();
  var moduser = $('#userID').val();

  var add = 'add';

  $.post("modal.funcs.php", {p:add, subj:modsubj, sect:modsect, day:modday.join(","), start:modstart, end:modend, user:moduser},
    function( data ) {
      // do whatever you want with data returned from modal.funcs.php
    }
  );

};

我只是使用 vanilla JavaScript 来选择所有 modalday 元素,然后循环遍历它们并将检查的值(M、T、W 等)添加到 modday 数组中:

  var moddayAll = document.getElementsByClassName('modalday');

  var modday = [];

  for (let i = 0; i < moddayAll.length; i++) {
    if (moddayAll[i].checked) {
      modday.push(moddayAll[i].value);
    }
  }

然后,由于您仍然使用 POST 方法,我使用了 JQuery 的 .post(),并将“p”参数与数据一起传递,而不是在查询字符串中传递。您会注意到,这也是 modday 数组通过 join() 调用转换为字符串的地方:

  var add = 'add';

  $.post("modal.funcs.php", {p:add, subj:modsubj, sect:modsect, day:modday.join(","), start:modstart, end:modend, user:moduser},
    function( data ) {
      // do whatever you want with data returned from modal.funcs.php
    }
  );

然后,在 modal.funcs.php 中,您可以从 $_REQUEST 变量中获取值并将它们传递给您的函数:

<?php

$page = $_REQUEST['p'];

if ($page == 'add') {

  $subj = $_REQUEST['subj'];
  $sect = $_REQUEST['sect']; 
  $day = $_REQUEST['day']; 
  $strTime = $_REQUEST['start'];
  $endTime = $_REQUEST['end'];
  $user_id = $_REQUEST['user'];

  $auth_user->createSchedule($subj,$sect,$day,$strTime,$endTime,$user_id);
  $schedRow = $auth_user->readSchedule();

} else if ($page=='edit') {

}

$_REQUEST['day] 将是已选中复选框值的逗号分隔字符串。如果您需要在此处对数组进行进一步处理,您可以添加另一个步骤来执行此操作。

【讨论】:

    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多