PHP获取复选框值由逗号

时间:2018-05-08 10:08:41

标签: php forms

我有一个带有几个复选框的联系表格。 每当我提交表单时,我希望以逗号分隔打印所选值。

<form  method="POST">
  <input type="checkbox" id="product1" name="product1" value="12">
  <input type="checkbox" id="product2" name="product1" value="13">
  <input type="checkbox" id="product3" name="product1" value="14">
  <button type="submit">Subscribe</button>
</form>

我正在使用此表单。可以说选择了产品1和2。然后它应该打印12,13&lt; 做这个的最好方式是什么?它甚至可能吗?

提前致谢。

使用案例:

所以我认为发布我需要它的原因很有用。

稍后当我能够获得值时,我会做这样的事情:

header("Location: http://test.com/$myvalues");

因此,在用户提交表单后,此链接可以是test.com/12,13

不工作:

所以即时使用此代码

<?php
  if(isset($_POST['product'])){
    $values =  implode(',',$_POST['product']);
    // header("Location: https://test.com/?add-to-cart=$values");
  }
  ?>

每当我点击提交按钮时,它就会转到一个不存在的页面。所以我得到了404页面。即使标题位置被注释掉了。 标题位置似乎根本不起作用。

3 个答案:

答案 0 :(得分:0)

<form  method="POST" action="upload.php" >
  <input type="checkbox" id="product1" name="product[]" value="12">
  <input type="checkbox" id="product2" name="product[]" value="13">
  <input type="checkbox" id="product3" name="product[]" value="14">
  <button type="submit" name="products" >Subscribe</button>
</form>

在upload.php中

$a=$_POST['product'];
$prodt=implode(',',$a);

$ prodt的值为

答案 1 :(得分:0)

通过hanshenrik巩固Alive to Die的答案和关于XSS的评论;

在输入名称属性中使用类似数组的语法:

<form method="POST">
  <input type="checkbox" id="product1" name="product[]" value="12">
  <input type="checkbox" id="product2" name="product[]" value="13">
  <input type="checkbox" id="product3" name="product[]" value="14">
  <button type="submit">Subscribe</button>
</form>

如果您选中前两个复选框并提交,则应收到:
$POST['product'] == ["12", "13"];

当然,在响应中输出之前,需要验证和转义任何输入。对于您提到的具体用例,您最终会得到类似的结果:

$products = [];
if (isset($POST['product'])) {
    foreach ($POST['product'] as $product) {
        if (!is_numeric($product)) {
            die("invalid product value.");
        }
        $products[] = intval($product);
    }
}

if (empty($products)) {
    die("no products selected.");
}

header("Location: https://test.com/" . implode(",", $products);

对输入验证的澄清:

如果您跳过输入验证,可以提交以下数据: product[]="admin.php"并重定向到https://test.com/admin.php。当然,这不是您希望此脚本执行的操作,因此仅通过该原则,您应该考虑限制代码的可能行为。但它可能会变得更糟:

如果您选择在您网站的某个地方echo implode(",", $POST['product']),有人可能会提交: product[]="<script>alert(\"vuln\");</script>"将为您的网站添加JavaScript。警报并不危险,但这个脚本可能是任何东西。从提交会话cookie到在浏览器中运行cryptominer。原则上,如果你可以alert(),你可以做任何事情。

如果从数据库构造原始表单,则有人可能会将恶意输入作为值插入数据库。因此,这些攻击不一定限于单个用户使用其元素检查器。

这些是很多'ifs',对于简单的本地网站或PHP脚本,您不需要关心大多数这些问题。但是,如果您选择将任何代码提供给互联网,则永远不要相信用户输入。

答案 2 :(得分:-1)

由于您已为每个复选框指定了相同的name属性,因此您无法做到。给它们单独的名称,您可以轻松处理此客户端和/或服务器端。