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

Form Processing: empty TD tags generated with foreach loop

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

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

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

这是我的 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 信息旁边添加数量编号。

老实说,我已经很多年没有使用 table 了,所以它可能是我遗漏或错误的超级简单的东西。或者这可能是我总体上构建整个事物的方式。

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

这是表格的项目部分:

<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]"/>

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

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

当您对这个数组进行 foreach 时,它会显示一个值或另一个值,但不会同时显示这两个值。

所以(我认为)使用 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].