2012-01-03 66 views
50

我使用网站上销售的产品创建了一个页面。我想包括的每个产品,其列出了类似这样的标记附近的“添加到购物车”按钮:多个表单或多个页面提交?

<h4 class="productHeading">Product Name 1</h4> 
<div> 
    Extra information on the product 1. 
</div> 
<h4 class="productHeading">Product Name 2</h4> 
<div> 
    Extra information on the product 2. 
</div> 
... 

由于提交的投入将有不同的名称(与该产品的代码中包含了) ,最大的问题是:我是否应该将整个产品列表包装在一个表单中,还是应该为每个产品创建一个表单?在代码:

<form method="post" action="process.php"> 
    <h4 class="productHeading">Product Name 1</h4> 
    <div> 
    Extra information on the product 1. 
    <input type="submit" name="submit1" value="Add to Cart"> 
    </div> 
    <h4 class="productHeading">Product Name 2</h4> 
    <div> 
    Extra information on the product 2. 
    <input type="submit" name="submit2" value="Add to Cart"> 
    </div> 
</form> 

或者......

<h4 class="productHeading">Product Name 1</h4> 
<div> 
    Extra information on the product 1. 
    <form method="post" action="process.php"> 
    <input type="submit" name="submit1" value="Add to Cart"> 
    </form> 
</div> 
<h4 class="productHeading">Product Name 2</h4> 
<div> 
    Extra information on the product 2. 
    <form method="post" action="process.php"> 
    <input type="submit" name="submit2" value="Add to Cart"> 
    </form> 
</div> 

哪一个是最好的做法?任何严重的原因,不使用一个或另一个,或者我是否完全错误?

回答

83

最佳实践:每个产品一种形式是一定要走的路。

优点:

  • 这将节省您不必解析数据,以找出产品点击了哪个
  • 这将减少数据的大小被张贴

的麻烦

在您的具体情况

如果你永远只能打算有一个表单元素,在这种情况下submit按钮,一个形式都应该工作得很好。


我的建议 做每一个产品的形式,并更改您的标记是这样的:

<form method="post" action=""> 
    <input type="hidden" name="product_id" value="123"> 
    <button type="submit" name="action" value="add_to_cart">Add to Cart</button> 
</form> 

这会给你一个更清洁,可用POST。没有解析。 它可以让你在未来的(大小,颜色,数量等)增加更多的参数。

注:没有什么技术的好处是用<button><input>,但作为一个程序员,我发现它冷却器与action=='add_to_cart'工作比action=='Add to Cart'。另外,我讨厌把表达与逻辑混合在一起。如果有一天你决定按钮说“添加”更合理,或者如果你想使用不同的语言,你可以自由地做到这一点,而不必担心你的后端代码。

+0

感谢艾曼。一些评论:关于第一点,我不需要解析数据吗?这将是多种形式和相同的“行动”。而在第2点,只有一个提交将被发送,所以在这两种情况下,POST大小应该是相同的,对吗? – winck 2012-01-03 14:15:41

+0

非常感谢Ayman!不幸的是我只能投一次!最好的祝愿 – winck 2012-01-03 16:02:36

+0

@winck,在你的情况下,你是对的。然而,第二个你添加第二个字段到你的表单,我的建议会更有意义。 – 2013-01-04 10:28:21