我正在尝试设置一个产品页面,其中包含多个产品等。这是通过一个while循环从mysql数据库中获取数据来完成的,产品显示良好,但我遇到的问题是,我希望能够单独处理每个产品。换句话说,我不知道页面上可能出现了什么产品,所以当我尝试通过php处理它们时,它需要灵活。这有点难以解释,但这是我目前的代码,希望你能明白我的意思。
这是我的一个单独产品的html,所有产品都像下面的代码一样进行分组
<form id="<?php print "$material_id";?>" class="form">
<div class="supp_bro_mat_wrap">
<input type="hidden" name="supp_bro_mat_id" value="<?php print "$material_id";?>" />
<input name="supp_bro_qty_input" class="supp_bro_qty_input" type="text" />
</div><!---end supp_bro_input_wrap--->
<input name="supp_bro_add_to_cart" type="submit" class="supp_bro_add_to_cart" id="<?php print "$material_id";?>" />
</form>
这是php代码,我知道很简单,但我只想在这个阶段获得值,
if (isset($_POST['supp_bro_add_to_cart'])) {
$mat_id = $_POST['supp_bro_mat_id'];
$mat_qty = $_POST['supp_bro_qty_input'];
var_dump($mat_id);
var_dump($mat_qty);
}
当我尝试输入第一个产品的数量时,我会得到正确的var_dumps,但当我在下面的所有产品上尝试时,我得到
supplies_browse.php?supp_bro_mat_id=5&supp_bro_qty_input=8768&supp_bro_add_to_cart=Submit
显示在我的浏览器标题中,而不是
supplies_browse.php?sid=masonary
就像它应该是,没有var_dumps。希望你能明白我的意思,如果你还需要什么,请告诉我。
感谢
从您发布的内容中判断出来并不容易,但在产品列表之前的HTML中似乎有一个额外的<form>
标记。这个附加的<form>
标签上有method="POST"
因此,在您的产品列表中,第一个产品的<form>
标记被忽略(表单元素不允许嵌套),因此提交第一个产品将执行POST提交,因此数据将在HTTP主体中传输,URL具有您想要的值,并且$_POST
变量将正确填充。
然后,第一个产品末尾的</form>
标签关闭附加的<form>
,第二个产品和后续产品以它们自己的形式创建。这些的<form>
标记没有指定方法属性,因此使用的默认方法是GET。这将发送URL上的信息,该信息不会填充$_POST变量。
解决方案是从页面的开头移除额外的<form>
标记,并将method="POST"
属性(可能还有该标记上的任何其他属性)移动到产品的每个<form>
标记中。