2015-12-12 46 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']}'”;' –