PHP数组变量传递不正确

时间:2013-12-12 22:52:04

标签: php mysql

我有一个奇怪的问题。这个复选框位于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,这是复选框的另一个值。

奇怪。任何人都可以发现问题吗?

4 个答案:

答案 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

因此,无论检查了多少个复选框,repbillablehours索引都会匹配。

答案 3 :(得分:0)

进行以下更改:

name="billablehours[$invoiceID]"

$_POST['billablehours'][$_POST['rep'][$index]]