foreach循环中$ _POST超全局无法正常工作

时间:2012-04-18 12:27:27

标签: php select post foreach shopping-cart

使用下面的代码我选择一个数量,然后检查我选择了数量的项目,然后点击添加按钮提交表格。

<form name="addtocart" method="post" action="checkbox.php"> 

//foreach loop below loops through array of items fetched from the db
<?php foreach($result2 as $row) { ?>

<select name="qty">
<?php for ($i=0; $i < $row['prd_quantity'] + 1 ; $i++) { ?>
<option value = "<?php echo $i; ?>" ><?php echo $i; ?></option>;    
<?php }?>
</select>

<input type="checkbox" name="checkitem[]" id="addtocart"  value="<?php echo   $row['prd_id'] ?>" optional /></p>

<?php } ?>
enter code here
<input type="submit" value="Make Order"/>

</form>

选择后,在select元素上说8,$ ordqty下面仍然输出0.我在想它与循环和$_POST超全局有关但是

  

checkitems []

的工作原理。帮助将不胜感激。谢谢。

$ordqty = $_POST['qty'];
//$ordqty returns 0.

以下是$row['prd_quantity'] = 8

的第一个项目生成的HTML
<select name = "qty">

<option value="0">0</option>
;
<option value="1">1</option>
;
<option value="2">2</option>
;
<option value="3">3</option>
;
<option value="4">4</option>
;
<option value="5">5</option>
;
<option value="6">6</option>
;
<option value="7">7</option>
;
<option value="8">8</option>
;
</select>

3 个答案:

答案 0 :(得分:2)

在我看来,如果您的数据库返回的行不止一行,那么您的响应中会有多个select元素,所有元素都被命名为qty。这可以解释为什么表单没有发布正确的值。你检查过了吗?

尝试以下方面的内容:

<select name="qty[<?php echo $row['prd_id']; ?>]">
    <?php for ($i=0; $i < $row['prd_quantity'] + 1 ; $i++) { ?>
        <option value = "<?php echo $i; ?>" ><?php echo $i; ?></option>;    
    <?php }?>
</select>

这将发布按产品ID键入的一系列选择。

更新

感谢您使用已生效的产品ID索引所选商品数量的数组。

要访问qty []数组的元素,我知道这可能会更好,但我做到了:

//Array below holds the values of the quantities entered

$new_ord_qty = $_POST['qty'];

//Array below holds product ids -- in the HTML code -- prodid is the name of a hidden inputfield inside the foreach loop whose value i have set to $row['prd_id'] 

$prod_id_array = $_POST['prodid']; 

for($i=0; $i<count($checked_items_array);$i++) {

for ($i=0; $i < count($new_ord_qty); $i++) {

//Array below holds the values of the quantities entered with the prod_id_array elements as //the indices

$ord_qty = $new_ord_qty[$prod_id_array[$i]];

// Here echo will output an array of the quantities entered for the checked items
echo $ord_qty; 

}

}

谢谢大家。

答案 1 :(得分:1)

我认为问题可能是您将复选框作为数组checkitems[]传递,但您将数量作为单个qty传递可能值得将数量名称更改为{{ 1}}

显然,您可能还需要更新代码以处理数组作为数组并将其与checkitem值匹配。

答案 2 :(得分:1)

问题应该是您有多个具有相同名称的选择,我假设POST变量将显示最后一个,仍然设置为0.您可以使用id后缀,如qty_0,qty_1下拉列表。

您可以发布细分受众群生成的HTML代码吗?这可能会有所帮助。