处理从数据库动态填充的表单数据

时间:2012-09-03 15:10:01

标签: php html forms html-table

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

<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无效。

3 个答案:

答案 0 :(得分: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>

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

希望这有帮助!

答案 1 :(得分:3)

我可能已经改变了你的逻辑,因为HTML无效。此外,没有必要制作几个提交按钮,因为只有一个表单:

编辑:如果你真的想要每行一个按钮,那么你必须在行中创建一个按钮,这只能用于嵌套表(<tr>不允许{{1 }} 在里面)。我认为这太复杂了。

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

<form>

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

<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>

答案 2 :(得分:0)

usualy我用这种方式

<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>

on 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"){ }