Php:发布复选框列表

时间:2015-05-26 13:27:02

标签: php html post

在SQL请求之后,我获得了一个包含数据列表的表单,每行末尾都有复选框。目标如下。如果用户检查其中一些,则在提交表单时将在数据库中删除该行。

我用我的SQL请求结果命名这样的复选框,所以我的Php脚本可以找到要删除的行:

<input type="checkbox" name="chk[<?echo '/'.'$t[datetr]'.'/'.'$t[beneficiaire]'.'/'.'$t[objet]'.'/'.'$t[montant]';?>]">

我的目标是将所有带有$ _POST的复选框值添加到我的Php脚本中。但即便如此......

foreach ($_POST as $key => $value) {
        echo "<tr>";
        echo "<td>";
        echo $key;
        echo "</td>";
        echo "<td>";
        echo $value;
        echo "</td>";
        echo "</tr>";
    }

...我的php脚本似乎没有得到复选框值...我做错了什么?谢谢你的帮助。

6 个答案:

答案 0 :(得分:2)

除了关于未通过HTTP请求传递未经检查的框的其他(完全准确的)评论之外 - 您的实际PHP存在一些问题。

function getDataButNoJerky() {
  ....
  var chart = $('#container').highcharts(); // get our chart
  // if you have multiple series
  for (var i = 0; i < chart.series.length - 1; i++) {
    chart.series[i].setData([]);
  }

  chart.showLoading('Loading....');
  // request new data source here
  $.getJSON('/data', function (data) {
    // repopulate your chart with the data returned
  }
}

首先,你的回声是错的;它可能应该是<?echo '/'.'$t[datetr]'.'/'.'$t[beneficiaire]'.'/'.'$t[objet]'.'/'.'$t[montant]';?> <?php echo而不是<?=(尽管可能会启用短启动标记)。

其次,PHP中的Apostrophes是非插值字符串文字(即<?echo字面上将被视为字符串'$t[objet]'而不是变量。)

最后,假设'$t[objet]'是一个数组,你的关联索引需要有引号,否则它们会被解释为常量 - 这可能会引发错误。

我认为你想要的东西可以写成:

$t

一旦您对其进行了排序,<?= "/{$t['datetr']}/{$t['beneficiaire']}/{$t['objet']}/{$t['montant']}"; ?> 数据应该正确设置,并且它将成为您期待的关联数组。

然后一个$_POST['chk']循环应该可以工作......但是,当然,你的输入实际上目前都没有值。

答案 1 :(得分:1)

使用<input type="checkbox" name="foo" value="42"/>时,仅当选中复选框时,才会发送变量foo = 42 。如果未选中此框,则根本不会发送任何内容。

如果您需要0/1的某些信息,我建议您使用<select>或几个<input type="radio">代码:

<input type="radio" name="foo" value="1"/> Yes
<input type="radio" name="foo" value="0"/> No

答案 2 :(得分:1)

空白复选框不会发布到接收脚本,只有已选中的复选框。为了解决这个问题,有一组相应的隐藏字段,并将它们的值设置为&#34; ON&#34;或&#34; OFF&#34;取决于单击复选框的方式。您可能希望使用onClick事件,确定是否单击了该框,然后设置相应的隐藏字段,即 Checkbox_One Hidden_​​One Checkbox_Two Hidden_​​Two等 发布表单时,让脚本忽略复选框,然后处理隐藏的字段。

答案 3 :(得分:1)

如果您将所有复选框命名为name="boxArray[]",则会在提交表单时创建名为$_POST["boxArray"]的数组。

然后你可以进行foreach循环来显示值:

foreach ($_POST["boxArray"] as $item) {
        echo "<tr>";
        echo "<td>";
        echo $item;
        echo "</td>";
        echo "</tr>";
    }

要添加到此,如果您只想删除已选中的项目,则为每个复选框分配记录的ID作为其值:

<input type="checkbox" name="boxArray[]" value="RECORD ID">

现在,当您运行foreach循环时,只有选中的框会发布值,因此您更改代码以删除数组中的每个项目:

foreach ($_POST["boxArray"] as $item) {
       //SQL TO DELETE RECORD WHERE ID = $item;
    }

答案 4 :(得分:1)

执行这些多重复选框时需要记住的是,当您提交时,它将在PHP中解释为数组,在您的情况下$_POST['chk']将是一个已选中复选框的数组。

但是,您还应该确保给复选框一个值,即使只是1

处理您的POST时,最初只需尝试使用var_dump($_POST); die();查看数据的样子。

答案 5 :(得分:1)

使用以下代码:

foreach ($_POST['chk'] as $key => $value) {
        echo "<tr>";
        echo "<td>";
        echo $key;
        echo "</td>";
        echo "<td>";
        echo $value;
        echo "</td>";
        echo "</tr>";
    }