簡體   English   中英

處理從數據庫動態填充的表單數據

[英]Processing form data dynamically populated from a database

我有一個看起來像的表單,我希望能夠收集單元格值以進行表單處理:

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

好吧,您的第一個問題是您沒有將要從數據庫中取出的變量存儲在任何地方,只是在打印它們,因此,當您單擊“發送電子郵件”時,發送到sendmail.php的唯一內容就是select name = “狀態”。

將結果存儲到普通變量中,以便可以在所有頁面中使用它們,如下所示:

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

我相信在這些輸入之前使用“提交”按鈕不是問題,但如果只是在“提交”按鈕之前寫最后一點,那會很好。

希望這對您有所幫助!

由於HTML無效,我可能已更改了您的邏輯。 另外,不必創建多個提交按鈕,因為只有一種形式:

編輯:如果您確實希望每行一個按鈕,則必須在行中制作一個,這僅適用於嵌套表( <tr>不允許其中的<form> )。 我認為這太復雜了。

因此,我保留了一個唯一的表單並提交按鈕,並在每行中添加了一個復選框,以便您選擇一個(或多個)訂單來發送電子郵件。

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

通常我用這種方式

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM