0

我有一个显示数据库中所有条目的 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>

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

我该如何解决我的问题?

4

3 回答 3

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'";
于 2012-11-23T00:45:10.133 回答
0

您可以为每一行使用一个表单标签,并为每一行包含一个隐藏字段“id”。提交表单时,您可以通过在 MySQL 查询中使用“id”来更新当前行的值。

UPDATE table SET ... WHERE id = $_POST['id']
于 2012-11-23T00:50:23.387 回答
0

首先,我认为您应该检查使用面向对象的 MySQL 命令。你这样做是痛苦的。

查看 ORM DB 层或至少使用 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。

于 2012-11-23T00:53:06.740 回答