使用按钮更新表中的特定行

时间:2012-11-23 00:29:00

标签: javascript php mysql html-table

我有一个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>

现在,当我按下按钮时,所有行都会更新。

如何解决我的问题?

3 个答案:

答案 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。