如何以PHP格式分组多个表单输入以进行发送

时间:2013-01-10 00:53:49

标签: php forms input

我有一个非常简单的产品形式。每个产品都有一个复选框和数量字段,可以重复创建一个数据数组,如下所示:

<form action="process.php" method="post">
<input type="checkbox" name="product[]" value="product 1" />
<input type="text" name="quantity[]" />

<input type="checkbox" name="product[]" value="product 2" />
<input type="text" name="quantity[]" />

<input type="submit" />
</form>

然后我在php中按照以下方式处理这个表单:

//php script to retrieve data
$product    = isset($_POST['product'])  ? implode(', ', $_POST['product'])  : 'Not selected'; 
$quantity   = isset($_POST['quantity']) ? implode(', ', $_POST['quantity']) : 'Not mentioned'; 

$messageToSend = <<<END

Products:  $product - $quantity

END;

输出结果例如:产品:产品1,产品2 - 10,

但我想要实现的是以下输出: 产品:产品1 - x 10,产品2 - x 2

基本上我想弄清楚的是在检索数据后如何在php脚本中拆分和分组每个产品的数据。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

  1. 这看起来并不完全是php。
  2. 您只需要一起遍历两个列表:

    foreach ($quantity as $key => $quant) {
        echo $product[$key].' - x'.$quant;
    }
    
  3. 这是一般性的想法,但正如评论中所提到的那样,单独做这件事并不是真正的解决方案。

    要记住的一些事情:

    1. 如果未选中复选框,则复选框不会传递值,因此您获得的$ product数组的大小不会与您想要的$ quantity数组的键值相对应。 (尝试以不同的方式命名您的复选框,即产品[1])。 - 谢谢tmuguet
    2. 如果没有选中任何复选框,您将无法获得数组,因此将其传递给foreach将生成您提到的错误。

答案 1 :(得分:0)

试试这个:

<?php 
foreach($_POST['product'] as $key => $product){
   $quantity = isset($_POST['quantity'][$key])? $_POST['quantity'][$key]:'Not selected';
   $message[] = $product.' - x'.$quantity;
}
echo implode(',', $message);
?>