>我有一个查询正在做一些奇怪的事情。 此复选框处于 while 循环中,它正确列出了它需要的所有内容:
<input type='checkbox' name='rep[]' value='$invoiceID'>Reference Number: $invoiceID
<input type='hidden' name='billablehours[]' value='$billableTotal'>
提交表单时,使用以下方法将值插入到数据库中:
foreach ($_POST['rep'] as $index => $id) {
$sql2="INSERT into b_sale_basket (QUANTITY,LID,NAME)
VALUES
('".$_POST['billablehours'][$index]."','s1','".$_POST['rep'][$index]."')";
if (!mysqli_query($con,$sql2))
{
die('Error: ' . mysqli_error($con));
}
}
它插入除计费小时数之外的所有内容。 我已经在表单页面上的每个复选框上输出了$billableTotal的值,并且该值是正确的。 例如,它可能等于 25,但当按下按钮时,它会输入 37.5,这是复选框的另一个值。
奇怪。 任何人都可以识别问题吗?
如果未选中复选框,则不会将其传递到服务器,因此,如果您有 3 个复选框并选择第一个和第三个,则在服务器上,您可以使用 0、1 个索引获得它们。
在您的情况下,只需使用特定的标识符:
<input type='checkbox' name='rep[$id]' value='$invoiceID'>Reference Number: $invoiceID
<input type='hidden' name='billablehours[$id]' value='$billableTotal'>
假设你知道这个$id
是$invoiceID
和$billableTotal
连接的,它可能是数据库中的条目 ID。
使用时:$_POST['billablehours'][$index]
如果未选中复选框,它将为空...
注意:我的解释只是为了理解这一点,而不是 100% 的工作示例,因为我没有完整的代码你做什么。
请记住:这是使用复选框以正确引用从服务器传递到客户端的数据的关键。
仅提交选中的复选框。因此,如果您只选中一个,那么rep
数组将只有一个元素 0,但billablehours
数组将具有页面上定义的元素。
$i = 0;
//loop
echo "<input type='checkbox' name='rep[$i]' value='$invoiceID'>Reference Number: $invoiceID";
echo "<input type='hidden' name='billablehours[$i]' value='$billableTotal'>";
$i++;
//end loop
因此,无论选中了多少复选框,rep
和 billablehours
索引都将匹配。
脚本的SQL注入攻击持开放态度。您要么需要使用预准备语句(最好(,要么通过mysqli_real_escape_string;
运行$_POST
值
在下面留下我的错误答案,但不删除此答案,因为我认为需要解决SQL注入漏洞。
话虽如此,您的问题是您没有回显值:
value='<?php echo $billableTotal; ?>'>
进行以下更改:
name="billablehours[$invoiceID]"
$_POST['billablehours'][$_POST['rep'][$index]]