2013-12-12 68 views
0

我有一个奇怪的查询。该复选框是在一个while循环,它正确地列出了它需要的一切:PHP数组变量传递错误

<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

只有选中的复选框被提交。所以如果你只检查一个,那么'rep'数组只有一个元素'0',但'billablehours'数组的数量将与页面上定义的数量一样多。 – AbraCadaver

回答

0

你是开放SQL注入攻击与您的脚本。你要么需要使用prepared statements(最好)或通过mysqli_real_escape_string;

运行$_POST值低于离开我的答案不正确,但不能删除这个答案,因为我认为,SQL注入漏洞需要加以解决。


话虽这么说,你的问题是,你是不是呼应值:

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

+1

我会愿意打赌他用双引号回应整个事情,所以变量被正确打印,这不是问题。虽然我可能是错的。 – Leng

+1

我不认为问题来自回声,我实际上认为他向我们展示的所有内容都在回声“...”内,所以处理变量 – Igoooor

+0

它已经在回声中。我把$ totalBillable放在每个复选框的旁边,它显示了它应该是的正确数字,但是当它插入时它显示一个不同的数字...... – andy

2

问题是,如果复选框未被选中它不会传递到服务器,所以如果u有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]如果复选框未被选中它全球有机纺织品标准的空...

注:我exmplanation只是了解一点,不是100%的工作例如,也许,因为我没有完整的代码你做什么。

只要记住:与复选框合作,从服务器传送的数据正确地引用到客户端,并与

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指标会不管多少复选框被检查相匹配。

0

进行这些更改:

name="billablehours[$invoiceID]" 

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