【问题标题】:how should I get checked and unchecked values of dynamic checkbox array in php [duplicate]我应该如何在php中获取动态复选框数组的选中和未选中值[重复]
【发布时间】:2021-12-05 04:54:19
【问题描述】:

我有这种表,如果复选框被勾选,我必须存储,因为我像布尔一样使用它们

name isEmployed isSoloParent
john 1 0

我必须使表单动态化,因此人们可以添加许多行,因为他们想一次填写很多行。

文本输入没有问题,可以使用<input type="text" name="name[]"> 和一些标准的PHP $name=$_POST['name']; 轻松完成,但是我似乎无法将相同的概念应用于复选框。它不会接收未经检查的值(sql 中的 NULL),也不会被 php ISSET 读取。

【问题讨论】:

  • 你会发布你的代码吗?因为看起来,radio 适合你的情况,而不是 checkbox
  • 我实际上有 7 个复选框。我认为收音机会非常压倒性,不是吗?我试图在 javascript/jquery 中处理代码,但它对我没有用(我已经问过一个关于它的问题)所以现在我正在寻找 php。但是,如果这真的令人叹为观止,我一定会改用收音机
  • 这能回答你的问题吗? POST unchecked HTML checkboxes
  • 不幸的是它没有。那里的最佳答案适用于已识别数量的复选框。我的是动态的,我从那里尝试了其他解决方案,但我还没有找到一个可行的解决方案
  • 从您提到的动态表单以及您对问题的一般描述来看,PHP 在这里可能是一个错误的工具。 PHP 不提供前端灵活性。它是用 JS 完成的。如果您坚持 PHP 是这里的方式,则必须为问题添加更多上下文。

标签: php arrays forms checkbox


【解决方案1】:

如果选中,则在 php 中,$_REQUEST(或$_GET$_POST)中存在一个复选框(并包含值)。否则不存在。因此,要确定您的复选框是否被选中,您可以使用以下命令:

$is_checked = isset($_POST["checkbox_name"]);

要打印复选框值,请使用checked html attribute。如果给出,复选框将被打勾。

print(
    "<input ".
        "type='checkbox' ".
        "name='checkbox_name' ".
        (isset($_POST["checkbox_name"]) ? "checked='checked' " : "").
    " />"
);

为了处理动态数量的元素,我在$_POST(或$_REQUEST)中使用了数组。您可以通过将[] 添加到您的输入的name 属性的末尾(例如https://www.php.net/manual/reserved.variables.post.php#87650)来做到这一点。另一种方法是使用后缀或前缀(例如checkbox_name_1),但在我看来,这只是需要做更多的工作。

要添加新输入,您的 javascript 可能类似于以下 sn-p。名称始终相同,只是附加了一个 [&lt;index&gt;] 来告诉 php 将其作为数组处理。 &lt;index&gt; 是要使用的数字索引。这很重要,否则您不能使用isset($_POST[...][$index]),因为动态索引会“填满”您的复选框值。

$("#add").on("click", function(){
  let i = $("#table tr").length;
  
  $("#table").append(
    "<tr>" + 
      "<td>Name <input type='text' name='name[" + i + "]' /></td>" + 
      "<td>Is solo parent <input type='checkbox' name='is_solo_parent[" + i + "]' /></td>" + 
      "<td>Is employeed <input type='checkbox' name='is_employeed[" + i + "]' /></td>" + 
    "</tr>"
  );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="add">Add</button>
<table id="table">
</table>

然后你可以在 php 中遍历请求的变量并检查它们是否存在:

foreach($_POST["name"] as $i => $name){
    // the "name" exists, if no name is given, no entry in the database is wanted

    $is_solo_parent = isset($_POST["is_solo_parent"][$i]); // true or false
    $employeed = isset($_POST["employeed"][$i]); // true or false

    $database->insert($name, $is_solo_parent, $employeed);
}

$database-&gt;insert() 当然是一个将数据填充到数据库中的函数。确保转义用户输入以防止script injection 并最好使用prepared statements 以防止sql injection

【讨论】:

  • 但我也必须获取未经检查的值,我需要将它们存储为 0 但 PHP 无法读取它们
  • 您有未选中的复选框。 isset($_POST["checkbox_name"]) 返回 true 如果复选框存在并选中并返回 false 如果复选框未选中(因为它不存在)。如果您有三行名称和employeed,对于第1 行和第3 行有employeed,而对于第2 行缺少它,您就知道第2 行的employeed 未被选中。这就是想法。这就是为什么您需要在 javascript 中修复 i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2023-03-18
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
相关资源
最近更新 更多