我使用该foreach($_POST)
技术制作了可以使用单个提交按钮更新整个选项列表的动态表单,但是由于某种原因,我在使用复选框输入实现相同的事情时遇到了问题。
无论我取消选择哪些复选框,评估复选框并将表单中的最后一行视为我取消选择的行的脚本。换句话说,无论我取消选择哪个复选框,POST 脚本都会确定最后一个复选框被取消选中。这是我以前从未见过的非常奇怪的效果。
例如,这个 PHP 数组获取生成带有隐藏项目选项的库存项目行。
****请注意,我还没有采取安全措施。当我在逻辑上看到这项工作时,我会清理一切。目前我什至不想使用 REQUEST,但我想先看看这项工作。
<form action="update.php" method="post">
while($row=mysql_fetch_array($histresult))
{
echo '<tr height = "50px">';
//We grab the product id as well as everything else we need.
$customer_id= $row['customer_id'];
$product_id= $row['product_id'];
$link = $row['image_path'];
$name = $row['name'];
$sku_item_number = $row['sku_item_number'];
$suggested_quantity = $row['suggested_quantity'];
$sales_info = $row['sales_info'];
$item_id = $row['id_product_customer_suggested_qty'];
$customer_level = $row['level'];
//Visibility Option Goes here
echo '<td>';
echo '<input name="i" type="hidden" value="'.$i.'">
<input name="product_id[]" type="hidden" value="'.$product_id.'">
<input name="customer_id[]" type="hidden" value="'.$customer_view.'">
<input name="customer_level[]" type="hidden" value="'.$customer_level.'">';
echo '<input name="cart_visible[]" type="checkbox" value = "1"';
if (!in_array($product_id, $hidden))
{
echo 'checked = "checked"';
}
echo '></td>';
echo '<td>';
echo '<a href="displayitem.php?product_id='.$product_id.'">'.$name.'</a>';
echo '</td>';
echo '<td>'.$sku_item_number.'</td>';
echo '<td>'.$product_id.'</td>';
echo '<td>'.$sales_info.'</td>';
echo '<td>'.$suggested_quantity.'</td>';
echo '</tr>';
<input type="submit" name="button" id="button" value="Submit">
</form>
//And then update.php looks like this:
$j=0;
foreach($_REQUEST['product_id'] as $key=>$product_id)
{
echo 'j value is '.$j.'<br>';
$customer_id = $_REQUEST['customer_id'][$key];
$customer_level = $_REQUEST['customer_level'][$key];
$price_level_id = $_REQUEST['price_level_id'][$key];
$cart_visible = $_REQUEST['cart_visible'][$key];
if ($cart_visible != 1)
{
$cart_visible = 0;
}
//echo 'Customer ID is '.$customer_id.'<br>';
echo 'Testing - Product ID is '.$product_id.'<br>';
//echo 'Customer Level is '.$customer_level.'<br>';
//echo 'Price Level ID is '.$price_level_id.'<br>';
echo 'Cart visibility selection is '.$cart_visible.'<br>';
}
回显的调试行表明,无论我取消选择哪些行,它都会将表单中的最后一行视为被取消选择的行。例如,如果有 10 行并且我取消选中第 1、3 和 8 行的复选框,则表单将像用户取消选中第 8、9 和 10 个复选框一样。为什么它会专门为复选框执行此操作?