通过单独提交处理多个表单


Processing multiple forms with individual submits

我正在尝试设置一个产品页面,其中包含多个产品等。这是通过一个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>标记中。