2012-11-23 28 views
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> 

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

我该如何解决我的问题?

回答

3

您可以在每个按钮组周围放置一个表格,并添加一个隐藏字段,其中包含要更新的字段的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以后:

+0

非常感谢。它完美的工作! – user1836941

0

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

UPDATE table SET ... WHERE id = $_POST['id'] 
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; 
} 
>? 

你可以走这条路,如果你只是想一个大单,或者你可以带隐藏类型和值对应于行号的每一行做一个形式。

+0

这没有意义:Javascript不能与表格交互,所以OP肯定会需要php。请注意,没有服务器端技术就没有ajax。 – jeroen

+0

@ jeroen - 我想你误解了我写的内容。我说你的Javascript会使用AJAX来调用AJAX脚本。这将是PHP。几乎每一个网站都以这种方式工作。我已经建立了这样的一百个网站。我对倒票表示不满。我不认为你明白我在说什么。人们总是使用AJAX与数据库进行交互。当然,您必须在AJAX中调用PHP构建某种模型。 – Ryan

+0

您的文本中有其他建议:'相反,如果您想坚持在PHP中执行此操作'。除此之外,我认为对于OP来说正常运作是非常具有挑战性的。添加Ajax以获得更好的用户体验将是下一步,但不在此问题的范围之内。无论如何,我的downvote是建议使用JavaScript和沟渠PHP。如果您可以根据您的评论更改文字,我会将其删除。 – jeroen