Обработка данных формы динамически заполняется из базы данных

У меня есть форма, которая выглядит, я хотел бы иметь возможность собирать значения ячеек для обработки формы:

<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>£ "; 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 безрезультатно. Благодарю вас.

Возможно, я изменил вашу логику, поскольку HTML недействителен. Кроме того, не нужно было создавать несколько кнопок отправки, потому что существует только одна форма:

EDIT: если вам действительно нужна одна кнопка в строке, вам нужно будет сделать ее в строке, что возможно только с вложенными таблицами ( <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 } } 

Ну, вы первая проблема в том, что вы не храните переменные, которые вы вынимаете из своей базы данных в любом месте, вы просто печатаете их, поэтому, когда вы нажимаете «Отправить электронную почту», единственное, что вы отправляете на sendmail.php, – это имя select = "положение дел".

Сохраните результаты в обычных переменных, чтобы их можно было найти на всех ваших страницах:

 <?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 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>"; ?> В <?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> 

Я считаю, что кнопка отправки перед этими входами не проблема, но если она просто напишет последний бит перед кнопкой отправки, и вы будете хороши.

Надеюсь, это помогло!

обычно я использую этот путь

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