2013-01-03 30 views
0

我需要你的建議。我從數據庫獲取數據到表:ID,名稱。 表格中有Actions:Delete,Enable,Block。當選擇行動刪除 時,我想,分別記錄將被刪除。 但是,我的腳本不起作用,並且總是刪除最後一條記錄,即使我選擇了另一條記錄 。我認爲問題在於,所有記錄的名稱和隱藏輸入 名稱是相似的。但我找不到方法,如何用不同的名字創建 。 歡迎任何建議。從表格中刪除錯誤的記錄

HTML:

<form method='post'> 
    <table border='1'> 
    <tr> 
    <th> ID </th> 
<th> Name </th> 
<th> Action </th> 
</tr> 

代碼:

$db = new PDO('mysql:host=localhost;dbname=****;charset=utf8', '**', '**'); 
$query = $db->query("SELECT ID,statusas,login,vardas,email FROM users"); 

while($row = $query->fetch(PDO::FETCH_BOTH)) { 
echo "<tr><input type='hidden' name='id' value='".$row[0]."'>"; 
echo "<td>".$row[0]."</td>"; 
//echo "<td>".$row[1]."</td>"; 
echo "<td>".$row[2]."</td>"; 
//echo "<td>".$row[3]."</td>"; 
// echo "<td>".$row[4]."</td>"; 
echo "<td><select name='action'> 
      <option value='choose'>Choose..</option> 
      <option value='delete'> Delete </option> 
      <option value='enable'> Enable </option> 
      <option value='block'> Block</option> 
     </select></td>"; 
    echo "</tr>"; 
} 
echo "<br><input type='submit' name='submit'></table></form>"; 

if($_POST['submit']) { 
    if ($_POST['action']== 'delete') { 
    echo $_POST['id']; // delete query, but now I am just checking if I get a proper ID. 
    } 
} 
else { 
echo "bad"; 
} 

Table

+0

我的猜測是你需要用自己的形式來包裝每一行。在當前狀態下,所有行都使用相同的格式,因此只需使用'name =「id」'最後一個元素進行刪除即可。 – Supericy

+0

好的,將嘗試:) –

+0

@Supericy:不是必須的,只需要使name ='action [$ row [0]]'並在循環中檢查它。 –

回答

2

您正在使用形式的每一行相同name屬性,所以它們被覆蓋,它的使用最後一個。

你可以做的是自動換行的每一行以自己的形式,或者你可以做這樣的事情,而且只有1個提交按鈕,執行上的每一行的動作:

// remove hidden id element 

... 

echo "<td><select name='action[" . $row[0] . "]'>" 

... 
// remove submit button in the loop, but add it after the while loop 
... 

if (isset($_POST['action'])) 
{ 
    foreach ($_POST['action'] as $id => $action) 
    { 
     if ($action !== 'choose') 
     { 
      // do action on the id; 
      echo $id . " -> " . $action . "<br>"; 
     } 
    } 
} 
+0

工作正常,因爲我想:)非常感謝! –

0

你把每一個ID的形式,這導致CGI送東西是這樣的:ID = 1, id = 2,id = 3等。然後PHP只讀取最後一個ID並刪除它。

要修復它,給每一行自己的形式。

while($row = $query->fetch(PDO::FETCH_BOTH)) { 
echo "<form method='post'>"; 
echo "<tr><input type='hidden' name='id' value='".$row[0]."'>"; 
echo "<td>".$row[0]."</td>"; 
//echo "<td>".$row[1]."</td>"; 
echo "<td>".$row[2]."</td>"; 
//echo "<td>".$row[3]."</td>"; 
// echo "<td>".$row[4]."</td>"; 
echo "<td><select name='action'> 
      <option value='choose'>Choose..</option> 
      <option value='delete'> Delete </option> 
      <option value='enable'> Enable </option> 
      <option value='block'> Block</option> 
     </select></td>"; 
    echo "</tr>"; 
    echo "</form>"; 
} 
echo "<br><input type='submit' name='submit'></table>"; 
+0

好吧,讓我試試:) –

+0

是的,現在可以,但現在它爲所有記錄提供按鈕,我只需要一個。有想法,該如何實現?謝謝 –

+0

感謝您的幫助,我欣賞 –