我有一个html表,显示我的数据库中的所有条目,所以每个条目都有一行。
每行还有一个按钮。
单击按钮时,我想编辑与按下的按钮关联的行的值,并获取与该特定行相关的所有值。
<html>
<body>
<?php
$user="user";
$password="password";
$database="database";
$username=$_SESSION['username'];
mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT * FROM table";
$result=mysql_query($query);
$num=mysql_numrows($result);
?>
<form id="view_admin" method="post">
<table id="my_table" class= "sample" >
<tr>
<td align="center"><strong><font face="Arial, Helvetica, sans-serif">Id</font></strong></td>
<td align="center"><strong><font face="Arial, Helvetica, sans-serif">Column1</font></strong></td>
<td align="center"><strong><font face="Arial, Helvetica, sans-serif">Status</font></td>
<td align="center"><strong><font face="Arial, Helvetica, sans-serif">Edit Status</font></td>
</tr>
<?php
$i=0;
while ($i < $num) {
$f0=mysql_result($result,$i,"id");
$f1=mysql_result($result,$i,"column1");
$f2=mysql_result($result,$i,"status");
?>
<tr>
<td align="center"><font face="Arial, Helvetica, sans-serif"><?php echo $f0; ?></font></td>
<td align="center"><font face="Arial, Helvetica, sans-serif"><?php echo $f1; ?></font></td>
<td align="center"><font face="Arial, Helvetica, sans-serif"><?php echo $f2; ?></font></td>
<td align="center"><input type="submit" name="approved" value="approve"> <input type="submit" name="refused" value="refuse"> </td>
</tr>
<?php
if (isset($_POST['approved'])) {
$query_update = "UPDATE main SET status='APPROVED' WHERE id ='$f0'";
$result_update=mysql_query($query_update);}
else if (isset($_POST['refused'])) {
$query_update = "UPDATE main SET status='REFUSED' WHERE id ='$f0'";
$result_update=mysql_query($query_update);
}
$i++;
}
mysql_close();
?>
</table>
</form>
</body>
</html>
现在,当我按下按钮时,所有行都会更新。
如何解决我的问题?
答案 0 :(得分:4)
您可以在每个按钮集周围放置一个表单,并添加一个包含要更新的字段ID的隐藏字段。
您还需要删除包装表格的表单标记。
现在只有一个ID和按下的按钮将被提交。
在表格中:
<form id="view_admin" method="post">
<input type="hidden" name="f0" value="<?php echo $f0; ?>">
<input type="submit" name="approved" value="approve">
<input type="submit" name="refused" value="refuse">
</form>
稍后在php中:
$f0_submitted = (int) $_POST['f0'];
$query_update = "UPDATE main SET status='APPROVED' WHERE id ='$f0_submitted'";
答案 1 :(得分:0)
您可以为每一行使用一个表单标记,并为每一行包含一个隐藏字段“id”。提交表单时,您只需在MySQL查询中使用“id”更新当前行的值即可。
UPDATE table SET ... WHERE id = $_POST['id']
答案 2 :(得分:0)
首先,我认为您应该检查使用面向对象的MySQL命令。你这样做是痛苦的。
检查ORM数据库层或至少使用mysqli。 http://www.php.net/manual/en/mysqli.quickstart.statements.php
您更新每一行的原因是因为您有一个大表单,其中包含一组具有相同名称的按钮。所以点击其中任何一个就像点击所有这些。每个循环都是条件语句。
相反,如果你想在PHP中坚持这样做,我会根据行的id来提交提交名称。然后,当页面发布并再次加载时,如果发布的值等于当前行ID,请进行更新。
<form...>
<input type='hidden' name='form_submitted' value='true' />
<?php
while(...)
{
echo "<tr><td><input type='submit' name='update_{$row_id}' value='Update' /></td></tr>";
if(!empty($_POST['form_submitted']) && isset($_POST['update_'.$row_id])) ...do update;
}
>?
如果您只想要一个大表单,可以使用此路由,或者您可以为每行创建一个表单,其中隐藏的类型和值对应于行ID。