表单处理:使用foreach循环生成的空TD标签

时间:2019-10-29 15:27:11

标签: php html form-processing

我正在尝试处理一个非常简单的租金报价表格,基本上是填写表格,然后将数据发送到电子邮件中。

我的问题是项目部分的格式如何。现在,我正在尝试一个表,并使用foreach循环填充它。主要问题是由于某种原因,它会生成空的td标签。

这是输出,我添加了一些边框,以便您可以看到正在生成的空单元格:

enter image description here

这是我的php代码的部分,我正在其中进行处理(如果您想查看整个代码,请告诉我):

<?php
 if(isset($_POST['submit']))
 {
$name = strip_tags($_POST['renter_name']);
$email = strip_tags($_POST['renter_email']);
$message = strip_tags($_POST['renter_message']);
$subject = "Quote Request";
$rentalItems = ($_POST['item']);

// $items  = implode(',', $_POST['item']);

$msg  = "<html><body style='font-family:Arial,sans-serif;'>";
$msg .= "<p><strong>Sent by:</strong> ".$name."</p>";
$msg .= "<p><strong>Items:</strong></p>";

$msg .="<table name='rental_items' style='border-collapse:collapse; border: 1px solid black;';> 
                <thead style='text-align:left;'>
                    <tr>
                        <th sytle='padding-right: 5px;'>Item Name and ID</th>
                        <th>Quantity</th>
                    </tr>    
                </thead>
                <tbody>";
                    foreach($rentalItems as $item) { 
                        $msg .="<tr>
                            <td style='border: 1px solid black;'>". $item['name'] ."</td>
                            <td style='border: 1px solid black;'>".$item['quantity']."</td>
                        </tr>";
                     } 
       $msg .= "</tbody>
</table>";   

$msg .= "<p><strong>Message:</strong> ".$message."</p>";
$msg .= "</body></html>";

当前,我在循环中运行一行和两个单元格。但是由于某种原因,它会将每个td视为自己的行。

最终,我希望该数量编号与名称和ID信息一起显示。

老实说,我已经多年没有使用表格了,所以可能是我遗失或出错的超级简单的东西。也许这就是我通常如何构造整个事情。

任何建议或帮助将不胜感激。同样,如果您需要更多信息,请告诉我。

这是表单的项目部分:

<input type="checkbox" name="item[][name]" value="Name: <?php the_title();?> <?php echo "<br>"?> ID: <?php echo get_post_meta($post->ID, 'id_number', true); ?>" id="<?php the_title(); ?>"/>
<label for="<?php the_title(); ?>"><img src="<?php the_post_thumbnail_url(); ?>" alt="<?php the_title(); ?>" class="form-image" /></label>
<input type="text" name="item[][quantity]"/>

1 个答案:

答案 0 :(得分:1)

在对数据使用item[][name]item[][quantity]时,最终将得到包含不同值的备用数组元素...

Array(0 => ("name" =>"somename"), 
         1 => ("quantity" =>1))

遍历此数组时,它将显示一个值或另一个值,但不一起显示两个值。

所以(我认为)使用for循环并以2的步长来使用它会更容易。

for($i = 0; $i < count($rentalItems); $i+=2) { 
    $msg .="<tr>
               <td style='border: 1px solid black;'>". $rentalItems[$i]['name'] ."</td>
               <td style='border: 1px solid black;'>".$rentalItems[$i+1]['quantity']."</td>
            </tr>";
} 

或者-将数组重命名为item[name][]item[quantity][],以便将数据分开,但是您可以使用$item['name'][0]$item['quantity'][0]