【问题标题】:Processing form data dynamically populated from a database处理从数据库动态填充的表单数据
【发布时间】:2012-08-28 08:08:35
【问题描述】:

我有一个看起来像的表单,我希望能够收集单元格值以进行表单处理:

<form method ="post" action="sendmail.php">
<table>
<h4>Orders</h4>
<tr>
<th>Order Number</th>
<th>Order Date</th>
<th>Ordered By</th>
<th>Supplier</th>
<th>Total Price</th>
<th>Requested By</th>
<th>Status</th>
<th>Send Notification</th>
</tr>
<?php
while($row=mysql_fetch_array($result)){
echo "</td><td>";
echo $row['Orderno'];
echo "</td><td>";
echo $row['Orderdate'];
echo "</td><td>";
echo $row['Orderedby'];
echo "</td><td>";
echo $row['Supplier'];
echo "</td><td>&#163; ";
echo $row['totalprice'];
echo "</td><td>";
echo $row['requestedby'];
echo "</td><td>";
echo ' <select name="status">
<option></option>
<option>Approved</option>
<option>Pending</option>
<option>Dissaproved</option>
</select>';
echo "</td><td>";
echo '<input type="submit" value="Send Email" />';

echo "</td></tr>";
}
echo "</table>";
?>
</form>

我的问题是如何检索每个单元格中的值以用于表单处理?使用这些值,我将创建一个电子邮件模板来向某人发送电子邮件。例如$to = $_POST['requestedby']; 之类的东西,我尝试使用POST 无济于事。

【问题讨论】:

  • 为什么不直接邮寄而不是显示表格?我在这里看不到用例。请详细说明。 (有关如何从 PHP 发送邮件,请参阅 php.net/mail
  • 需要显示表格,以便订单可以在界面上被批准、拒绝或标记为待处理。我希望使用选择名称作为每封电子邮件的项目,总共会有三封电子邮件。这将简单地 POST 电子邮件正文中所有单元格的值。
  • 您始终可以为每个字段使用隐藏输入:echo $row['Orderno'] . '&lt;input type="hidden" name="Orderno" value="' . $row['Orderno'] . '"/&gt;';
  • 另外,您的第一个&lt;/td&gt; 应该是&lt;tr&gt;

标签: php html forms html-table


【解决方案1】:

我可能更改了您的逻辑,因为 HTML 无效。此外,由于只有一个表单,因此不必制作多个提交按钮:

编辑:如果你真的想要每行一个按钮,你将不得不在一行中创建一个,这只有在嵌套表中才有可能(&lt;tr&gt; 不允许在其中使用&lt;form&gt; )。我认为这太复杂了。

因此,我保留了一个独特的表单和提交按钮,并在每一行添加了一个复选框,以便您选择一个(或多个)订单来发送电子邮件。

<form method="post" action="sendmail.php">
    <h4>Orders</h4>

    <table>
        <tr>
            <th>&nbsp;</th>
            <th>Order Number</th>
            <th>Order Date</th>
            <th>Ordered By</th>
            <th>Supplier</th>
            <th>Total Price</th>
            <th>Requested By</th>
            <th>Status</th>
        </tr>
    <?php
    $i = 0;

    while ($row = mysql_fetch_assoc($result))
    {
        echo '<tr>';

        echo '<td><input type="checkbox" name="order_selected['.$i.']"/></td>';
        echo '<td><input type="text" name="order_no['.$i.']" value="' . $row['Orderno'] . '"/></td>';
        echo '<td><input type="text" name="order_date['.$i.']" value="' . $row['Orderdate'] . '"/></td>';
        echo '<td><input type="text" name="order_ordered_by['.$i.']" value="' . $row['Orderedby'] . '"/></td>';
        echo '<td><input type="text" name="order_supplier['.$i.']" value="' . $row['Supplier'] . '"/></td>';
        echo '<td><input type="text" name="order_total_price['.$i.']" value="' . $row['totalprice'] . '"/></td>';
        echo '<td><input type="text" name="order_requested_by['.$i.']" value="' . $row['requestedby'] . '"/></td>';

        echo '<td>';
        echo '<select name="order_status[]">';
        echo '<option></option>';
        echo '<option>Approved</option>';
        echo '<option>Pending</option>';
        echo '<option>Dissaproved</option>';
        echo '</select>';
        echo '</td>';

        echo '</tr>';

        $i++;
    }
    ?>
    </table>

    <p>
        <input type="submit" value="Send email(s)" />
    </p>
</form>

之后,在 PHP 中,您可以使用以下命令检索所有这些信息:

if(isset($_POST['order_selected']))
{
    $keys = array_keys($_POST['order_selected']);

    foreach($keys as $key)
    {
        $to = $_POST['order_requested_by'][$key];

        // sendmail
    }
}

【讨论】:

  • 感谢您的解决方案,我对此进行了测试,它有效!我的问题是我如何让它适用于各个表行。目前正在发布所有表格数据。谢谢
  • 我尝试为每一行制作一个表格,但它太复杂了。查看我的编辑。
  • 非常感谢 AsKaiser,这非常有效,我现在明白了将来这样做的逻辑。
【解决方案2】:

我通常用这种方式

<table border="1">
 <tr>
   <th>Order Number</th>
   <th>Order Date</th>
   <th>Ordered By</th>
   <th>Supplier</th>
   <th>Total Price</th>
   <th>Requested By</th>
   <th>Send Notification</th>
 </tr>
 <?php 
   while($row=mysql_fetch_array($result)){ 
   $Orderno = $row['Orderno'];
 ?>
 <tr>
   <td><?php echo $row['Orderno']; ?></td>
   <td><?php echo $row['Orderdate']; ?></td>
   <td><?php echo $row['Orderedby']; ?></td>
   <td><?php echo $row['Supplier']; ?> </td>
   <td><?php echo $row['totalprice']; ?></td>
   <td><?php echo $row['requestedby']; ?></td>
   <td>
    <a href="sendmail.php?id=<?php echo $Orderno; ?>&stt=Approved">Approved"</a>
    <a href="sendmail.php?id=<?php echo $Orderno; ?>&stt=Pending">Pending"</a>
    <a href="sendmail.php?id=<?php echo $Orderno; ?>&stt=Dissaproved">Dissaproved"</a>
   </td> 
 </tr>
 <?php } ?>
</table>

sendmail.php 我只是做了一些修改

$Orderno = $_GET["id"];
$status  = $_GET["stt"];

//send_notification($Orderno,$status);
//you can put your process code here (like branching maybe)
// if($status=="Aproved"){ } 
// else if($status=="Pending"){ } 
// else if($status=="Dissaproved"){ } 

【讨论】:

    【解决方案3】:

    你的第一个问题是你没有将你从数据库中取出的变量存储在任何地方,你只是在打印它们,所以当你点击发送电子邮件时,你发送到 sendmail.php 的唯一内容是选择名称=“状态”。

    将您的结果存储到普通变量中,以便您可以在所有页面中使用它们,如下所示:

    <?php
    while($row=mysql_fetch_array($result)){
    $Oderno = $row['Orderno'];
    $Orderdate = $row['Orderdate'];
    $Orderedby = $row['Orderedby'];
    $Supplier = $row['Supplier'];
    $totalprice = $row['totalprice'];
    $requestedby = $row['requestedby'];
    } 
    ?>
    

    然后像这样继续填写您的表格:

    <?php
    echo "</td><td>";
    echo $Orderno;
    echo "</td><td>";
    echo $Orderdate;
    echo "</td><td>";
    echo $Orderedby;
    echo "</td><td>";
    echo $Supplier;
    echo "</td><td>&#163; ";
    echo $totalprice;
    echo "</td><td>";
    echo $requestedby;
    echo "</td><td>";
    echo ' <select name="status">
    <option></option>
    <option>Approved</option>
    <option>Pending</option>
    <option>Dissaproved</option>
    </select>';
    echo "</td><td>";
    echo '<input type="submit" value="Send Email" />';
    echo "</td></tr>";
    echo "</table>";
    ?>
    

    现在您可以在表单中存储变量,请执行以下操作:

    <input type="hidden" name="Orderno" value="<?php echo $Orderno; ?>" >
    <input type="hidden" name="Orderdate" value="<?php echo $Orderdate; ?>" >
    <input type="hidden" name="Orderedby" value="<?php echo $Orderedby; ?>" >
    <input type="hidden" name="Supplier" value="<?php echo $Supplier; ?>" >
    <input type="hidden" name="totalprice" value="<?php echo $totalprice; ?>" >
    <input type="hidden" name="requestedby" value="<?php echo $requestedby; ?>" >
    </form>
    

    我相信在这些输入之前有提交按钮不是问题,但如果它只是在提交按钮之前写最后一位,你会很好。

    希望这有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      相关资源
      最近更新 更多