我有一个奇怪的问题。这个复选框位于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));
}
}
除了billablehours之外,它会插入应该执行的所有操作。我已在表单页面上的每个复选框上输出$ billableTotal的值,且值正确。例如,它可能等于25,但是当按下按钮时,它输入37.5,这是复选框的另一个值。
奇怪。任何人都可以发现问题吗?
答案 0 :(得分:2)
问题是,如果未选中复选框,则不会将其传递给服务器,因此,如果您有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%工作的例子,因为我没有完整的代码。
请记住:使用复选框正确引用从服务器传递到客户端和vs的数据时,这是关键。
答案 1 :(得分:0)
您使用脚本对SQL注入攻击 。您需要使用prepared statements(首选)或通过mysqli_real_escape_string;
$_POST
值
在下面留下我的错误答案,但不删除此答案,因为我认为需要解决SQL注入漏洞。
话虽如此,你的问题是你没有回应这个价值:
value='<?php echo $billableTotal; ?>'>
答案 2 :(得分:0)
仅提交已选中的复选框。因此,如果您只检查一个,那么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
索引都会匹配。
答案 3 :(得分:0)
进行以下更改:
name="billablehours[$invoiceID]"
$_POST['billablehours'][$_POST['rep'][$index]]