2015-12-12 90 views
-1
<?php 
if(isset($_POST['delete_dayOff'])) { 
$DeleteQuery = "DELETE FROM dayoff WHERE id = '$_POST[hidden]'"; 
mysqli_query($db,$DeleteQuery); 
}; 

// display records 

$select_employee = "SELECT * FROM dayoff"; 
$result = $db->query($select_employee); 
?> 
<table> 
<div id="Day-off Employees"> 
<?php 
    echo "<table><caption>Day-off Employees</caption><tr> 
    <th>Employee First Name</th> 
    <th>Employee Last Name</th> 
    <th>Day-Off</th> 

    </tr>"; 

    echo "<form action=dayoff.php method=post>"; 

    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     echo "<tr>"; 

     echo "<td>" . $row["employeefname"]. "</td>"; 
     echo "<td>" . $row["employeelname"]. "</td>"; 
     echo "<td>" . $row["date"]. "</td>"; 


echo "<td>" . "<input type=hidden name=hidden value=" . $row["id"]. " </td>"; 
echo "<td>" . "<input type=submit name=delete_dayOff value=delete >" . " </td>"; 
echo "</tr>"; 
} 

echo "</form"; 


echo "</table>"; 


?> 

我在另一個頁面上使用相同的確切腳本,它的工作完美。 id是自動編號主鍵int,在mysql中不爲null。刪除按鈕正在刪除Mysql中的最後一個插入的行

如果我按刪除,它總是刪除mysql中最後插入的行或最新的行。

如果我回顯隱藏按鈕的內容,這是正確的,但如果我按刪除按鈕,它會刪除錯誤的行,爲什麼?

+0

對不起任何缺少HTML標記,我只是複製你需要看你的'while'循環內 – Lynob

+0

地方您的表單標籤,你真的應該引用您輸入的一部分。這已被認爲有不利影響。也看看你的HTML源代碼。你也可以在這裏打開SQL注入。 –

+1

您的$ _POST [hidden]不會在您的$ $ DeleteQuery中正確評估。您應該將其更改爲'$ DeleteQuery =「DELETE FROM dayoff WHERE id ='」。 (int)$ _POST ['hidden']。 「'」;'。這也是確保int中的id以防止SQL注入的一種方法。 –

回答

2

這是因爲您只有一個表單,但您希望能夠刪除單個行。你應該有儘可能多的形式,你有行。

而不是把你的表單標籤放在你的while循環之外,你應該把它們放在裏面,這樣,你會有很多形式。

只有一種形式的麻煩是你用相同的名字命名了隱藏字段,所以它將採用最後一個。

while($row = $result->fetch_assoc()) { 
    echo "<tr>"; 
    ... 
    echo '<td><form ...><input hidden...><input type="submit"...></form></td>'; 
    ... 
} 
+0

和另一個標籤呢? –

+0

哦是的抱歉,我忘記了結束標籤,我編輯了我的答案 – jiboulex

+0

實際上在我的代碼中,我試着把它放進去,並沒有工作,它是你的答案和安德魯斯的組合,它修復了它 – Lynob

0

$_POST[hidden]應該是$_POST['hidden'];

$DeleteQuery = "DELETE FROM dayoff WHERE id = '$_POST['hidden']'"; 
+0

我認爲$ _POST ['hidden']不會被評估。你應該在它周圍加上大括號,比如'$ DeleteQuery =「DELETE FROM dayoff WHERE id ='{$ _POST ['hidden']}'」;' –