表单未从数据表提交正确的值
Form not submitting correct value from datatable
看起来很简单,但可能是我忽略了这里的一些东西。
(document).ready(function(){
$('#data').dataTable();
}
if (isset ($_POST ['deleteUser']))
{
echo "<p>Received the form data</p>";
echo $_POST['hidden'];
}
<form action="" method="post">
<table id="data">
<thead>
<tr>
<td>First Name</td>
<td>Delete Name</td>
<td>Email</td>
<td></td>
</tr>
</thead>
<tbody>
<?php
$cursor=$collection->find ();
foreach ( $cursor as $document ) {
?>
<tr>
<td class='First_Name'>
<?php echo $document [ "First_Name"]; ?>
</td>
<td class='Last_Name'>
<?php echo $document [ "Last_Name"]; ?>
</td>
<td class='Email'>
<?php echo $document [ "Email"]; ?>
</td>
<td>
<input type="hidden" name=hidden value='<?php echo $document ["First_Name"]; ?>'>
<input type="submit" value="Delete" name="deleteUser">
</td>
</tr>
<?php }?>
</tbody>
</table>
</form>
这里我试图将值从 table 发送到同一页面上的 php 代码。
当我点击删除时,它总是发送最后一行的名字。
单击按钮时导致表单仅提交最后一行的原因是什么?
如何为单击删除按钮的行传递隐藏标签的值?
仅供参考:我已经为 table 启用了 DataTable。
您的表单位于错误的位置,因此您只有一个包含所有用户的表单。试试这个,它会为每个用户提供一个表单。
<table id="data">
<thead>
<tr>
<td>First Name</td>
<td>Delete Name</td>
<td>Email</td>
<td></td>
</tr>
</thead>
<tbody>
<?php
$cursor=$collection->find ();
foreach ( $cursor as $document ) {
?>
<form action="" method="post">
<tr>
<td class='First_Name'>
<?php echo $document [ "First_Name"]; ?>
</td>
<td class='Last_Name'>
<?php echo $document [ "Last_Name"]; ?>
</td>
<td class='Email'>
<?php echo $document [ "Email"]; ?>
</td>
<td>
<input type="hidden" name=hidden value='<?php echo $document ["First_Name"]; ?>'>
<input type="submit" value="Delete" name="deleteUser">
</td>
</tr>
</form>
<?php }?>
</tbody>
</table>
另请注意,按名字删除用户听起来很危险。我会按 id
或 email
删除。
您当前脚本的功能示例,因此您有 abc123.php
并作为 GET
和 ?a=1&a=2&a=3&a=4&a=5
提交给它。您不会得到 1
、2
、3
、4
和 5
,因为它们都具有相同的名称。每次迭代都会覆盖之前的迭代,因此如果 print_r($_GET);
是 运行 Array ( [a] => 5 )
将被输出。
看起来很简单,但可能是我忽略了这里的一些东西。
(document).ready(function(){
$('#data').dataTable();
}
if (isset ($_POST ['deleteUser']))
{
echo "<p>Received the form data</p>";
echo $_POST['hidden'];
}
<form action="" method="post">
<table id="data">
<thead>
<tr>
<td>First Name</td>
<td>Delete Name</td>
<td>Email</td>
<td></td>
</tr>
</thead>
<tbody>
<?php
$cursor=$collection->find ();
foreach ( $cursor as $document ) {
?>
<tr>
<td class='First_Name'>
<?php echo $document [ "First_Name"]; ?>
</td>
<td class='Last_Name'>
<?php echo $document [ "Last_Name"]; ?>
</td>
<td class='Email'>
<?php echo $document [ "Email"]; ?>
</td>
<td>
<input type="hidden" name=hidden value='<?php echo $document ["First_Name"]; ?>'>
<input type="submit" value="Delete" name="deleteUser">
</td>
</tr>
<?php }?>
</tbody>
</table>
</form>
这里我试图将值从 table 发送到同一页面上的 php 代码。
当我点击删除时,它总是发送最后一行的名字。
单击按钮时导致表单仅提交最后一行的原因是什么?
如何为单击删除按钮的行传递隐藏标签的值?
仅供参考:我已经为 table 启用了 DataTable。
您的表单位于错误的位置,因此您只有一个包含所有用户的表单。试试这个,它会为每个用户提供一个表单。
<table id="data">
<thead>
<tr>
<td>First Name</td>
<td>Delete Name</td>
<td>Email</td>
<td></td>
</tr>
</thead>
<tbody>
<?php
$cursor=$collection->find ();
foreach ( $cursor as $document ) {
?>
<form action="" method="post">
<tr>
<td class='First_Name'>
<?php echo $document [ "First_Name"]; ?>
</td>
<td class='Last_Name'>
<?php echo $document [ "Last_Name"]; ?>
</td>
<td class='Email'>
<?php echo $document [ "Email"]; ?>
</td>
<td>
<input type="hidden" name=hidden value='<?php echo $document ["First_Name"]; ?>'>
<input type="submit" value="Delete" name="deleteUser">
</td>
</tr>
</form>
<?php }?>
</tbody>
</table>
另请注意,按名字删除用户听起来很危险。我会按 id
或 email
删除。
您当前脚本的功能示例,因此您有 abc123.php
并作为 GET
和 ?a=1&a=2&a=3&a=4&a=5
提交给它。您不会得到 1
、2
、3
、4
和 5
,因为它们都具有相同的名称。每次迭代都会覆盖之前的迭代,因此如果 print_r($_GET);
是 运行 Array ( [a] => 5 )
将被输出。