2010-03-24 49 views
0

我有一个复选框数组,我立即编辑以设置'tinyint'字段。问题出现在我取消选中复选框并将vales发布到mysql时。因为它发布了一个复选框数组和另一个平行的数组值列表,所以取消选中复选框会导致0值被PHP_POST忽略,因此复选框数组将少于表单中未选中值的数量,而数组将被编辑将具有表单中的所有记录。php mysql并行数组复选框

这里是提交代码

while($row=mysql_fetch_array($result)) 
{ 

$checked = ($row[active]==1) ? 'checked="checked"' : ''; 
... 

echo "<input type='hidden' name='TrID[]' value='$TrID'>"; 
echo "<input type='checkbox' name='active1[]' value='$row[active]''$checked' >"; 
... 

和处理PHP脚本

$userid = ($_POST['TrID']); 
$checked= ($_POST['active']); 

$i=0; 

foreach ($userid as $usid) 
{ 

if ($checked[$i]==1){ 
$check = 1; 
} 
else{ 
$check = 0; 
} 

$qry1 ="UPDATE `epapers`.`clientelle` SET `active` = '$check' WHERE `clientelle`.`user_id` = '$usid' "; 
$result = mysql_query($qry1); 
$i++; 

} 
+0

问题是,没有任何东西POST的未选中的复选框... – Franz 2010-03-24 15:56:53

回答

0

你可以尝试这样的:

$i = 0; 
while($row=mysql_fetch_array($result)) 
{ 

$i++; 
$checked = ($row[active]==1) ? 'checked="checked"' : ''; 
... 

echo "<input type='hidden' name='TrID[{$i}]' value='$TrID'>"; 
echo "<input type='checkbox' name='active1[{$i}]' value='$row[active]''$checked' >"; 
... 

然后复选框至少应该在数组中的适当地方...

+0

这不应该工作。第二个数组中的元素数量仍然少于第一个。 – Franz 2010-03-24 15:55:49

+0

它起作用,因为'if($ checked [$ i] == 1){'当POST帖子$检查为'$ checked [$ i]'时,从0开始递增',当'$ checked [$ i]'不被发布时它是0,'$ check'变成0,因此代码工作! – 2010-03-24 16:42:32

+0

这并不意味着您可以根据'error_reporting'设置获得“未定义索引”错误吗? – Franz 2010-03-25 09:35:47

0

可以使用第一阵列的关键,以获取第二的正确的元素...

$userid = ($_POST['TrID']); 
$checked= ($_POST['active']); 

foreach ($userid as $key => $usid) 
{ 

if ($checked[$key]==1){ 
$check = 1; 
} 
else{ 
$check = 0; 
} 

$qry1 ="UPDATE `epapers`.`clientelle` SET `active` = '$check' WHERE `clientelle`.`user_id` = '$usid' "; 
$result = mysql_query($qry1); 

} 

编辑 如果这不起作用,请尝试将数字索引添加到HTML代码中的元素名称。像这样:

echo "<input type='hidden' name='TrID[".$i."]' value='$TrID'>"; 
echo "<input type='checkbox' name='active1[".$i++."]' value='$row[active]''$checked' >"; 

你很可能必须在循环之前将$i设置为零。

0

复选框不应该有相同的名字,但每一个应该以不同的方式命名你可以通过修改第一页这样解决问题:

$i = 0; 
while($row=mysql_fetch_array($result)) 
{ 

$checked = ($row[active]==1) ? 'checked="checked"' : ''; 
... 

echo "<input type='hidden' name='TrID[$i]' value='$TrID'>"; 
echo "<input type='checkbox' name='active1[$i]' value='$row[active]''$checked' >"; 
$i++; 
... 

,并相应调整第二脚本...

+0

将元素赋值给数组确实给了它们不同的名称。 – Franz 2010-03-24 15:56:12

+0

在PHP中,但不在HTML中 – Kjir 2010-03-24 16:01:20

0

我有我自己的脚本,我用它来完成这个...看看能不能适应它,或者如果我在任何地方跟踪你想要做的事情。

模式:每行产品都带有一个复选框,用户可以检查以表示该产品需要添加到购物车以查看价格。

代码:
<td><input type="checkbox" name="addforprice[<?php echo $record['id']; ?>]" /></td>

然后,当表单提交:

如果($ _ POST [ 'addforprice']){
的foreach(array_keys($ _ POST [ 'addforprice'] )as $ var){
$ data ['add_for_price'] = 1;
$ update = $ db-> query_update(TABLE_PRODUCTS,$ data,“id =”。$ var);
echo“addforprice:”。$ var。' ”。$数据[ 'add_for_price']。'
';
unset($ data ['addforprice']);
}
}

$record['id']是打印出的行时产生的数据库ID。