每当我点击提交时,始终会发布已提取的电子邮件的最后一个值。 我该怎么做才能发布当前的电子邮件,以及如何使用每个表格行中选定的状态发布当前的电子邮件值
<form action="" method="post">
<table>
<tbody>
<?php
while($row=mysqli_fetch_assoc($query))
{
echo '
<tr>
<td style="text-align:center;">
<select name="statuss">
<option selected="selected" disabled="disabled">Select Status</option>
<option value="1">Submitted</option>
<option value="2">Accepted</option>
<option value="3">Questionnaire</option>
<option value="4">Interview</option>
</select>
<input type="text" name="email" value="'.$row['email'].'">
<input type="submit" value="Update" name="submit" class="btn btn-primary">
</td>
</tr>';
}
?>
</tbody>
</table>
</form>
<?php
if(isset($_POST['submit']))
{
$email=(isset($_POST['email']) ? $_POST['email'] : '');
$statuss=(isset($_POST['statuss']) ? $_POST['statuss'] : '');
$sql="update status SET personal_stylist = '$statuss' where email='$email'";
$query=mysqli_query($connection, $sql);
}
?>
答案 0 :(得分:3)
在代码的许多其他问题中(每次编辑都会大幅改变,因此很难跟上),从逻辑上讲,form
无法知道您直观的意图是哪些值发布。
简化,你有这个结构:
<form>
<table>
<row>a bunch of fields</row>
<row>a bunch of fields</row>
<row>a bunch of fields</row>
</table>
</form>
但是,每个row
都有相同的字段。因此,当表单发布时,它无法知道您在提交表单时正在查看哪些字段。它所能做的就是将它们全部打包成一个表格POST。当它这样做时,每次遇到同名的字段时,新字段都会覆盖前一个字段。
将<form>
移至行内。再次简化,结构将更像这样:
<table>
<row>
<form>a bunch of fields</form>
</row>
<row>
<form>a bunch of fields</form>
</row>
<row>
<form>a bunch of fields</form>
</row>
</table>
更具体地说,让<form>
成为<td>
的后代:
while($row=mysqli_fetch_assoc($query))
{
echo '
<tr>
<td style="text-align:center;">
<form>
your form
</form>
</td>
</tr>';
}