PHP 数组变量传递不正确


PHP Array Variable Being Passed Incorrectly

>我有一个查询正在做一些奇怪的事情。 此复选框处于 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

因此,无论选中了多少复选框,repbillablehours 索引都将匹配。

你对

脚本的SQL注入攻击持开放态度。您要么需要使用预准备语句(最好(,要么通过mysqli_real_escape_string;运行$_POST

在下面留下我的错误答案,但不删除此答案,因为我认为需要解决SQL注入漏洞。


话虽如此,您的问题是您没有回显值:

value='<?php echo $billableTotal; ?>'>

进行以下更改:

name="billablehours[$invoiceID]"
$_POST['billablehours'][$_POST['rep'][$index]]