Несколько форм или несколько сообщений на странице?
Я создаю страницу с продуктами, проданными на веб-сайте. Я хотел бы добавить кнопку "добавить в корзину" рядом с каждым продуктом, которые перечислены с разметкой, подобной этой:
<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>
Какая из них - лучшая практика? Любая серьезная причина не использовать то или другое, или я делаю это совершенно неправильно?
Ответы
Ответ 1
Лучшая практика: одна форма для каждого продукта, безусловно, способ пойти.
Преимущества:
- Это избавит вас от необходимости анализировать данные, чтобы выяснить, какой продукт был нажат.
- Это уменьшит размер отправляемых данных.
В вашей конкретной ситуации
Если вы только когда-либо намереваетесь иметь один элемент формы, в этом случае кнопка 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>
vs. <input>
, но как программиста я считаю, что более холодно работать с action=='add_to_cart'
, чем action=='Add to Cart'
. Кроме того, я ненавижу смешивать презентацию с логикой. Если однажды вы решите, что для кнопки имеет смысл сказать "Добавить" или если вы хотите использовать разные языки, вы можете сделать это свободно, не беспокоясь о своем внутреннем коде.