2012-11-23 30 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