我有一个带有几个复选框的联系表格。 每当我提交表单时,我希望以逗号分隔打印所选值。
<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页面。即使标题位置被注释掉了。 标题位置似乎根本不起作用。
答案 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
属性,因此您无法做到。给它们单独的名称,您可以轻松处理此客户端和/或服务器端。