2017-04-26 49 views
0

我正在讓一個系統在一個表格中顯示系統中的頁面,而其中一個列是操作列給予人們刪除頁面的選項。我這樣做:PHP表單當在表格中顯示時刪除mySQLi中的記錄然後在表格中

listpages.php

<?php 
$sql = "SELECT * FROM Pages"; 
$result = $conn->query($sql); 
if ($result) { 
    while($row = $result->fetch_assoc()) { 
     $pages[] = array_map('htmlspecialchars', $row); 
    } 
} 
// PHP is finished now, here's the HTML 
?> 
     <form method="post" action="utils/delpage.php"> 
     <table> 
     <thead> 
      <tr> 
       <th>Page Name</th> 
       <th>Page Type</th> 
       <th>Registered on</th> 
       <th>Actions</th> 
      </tr> 
     </thead> 
     <tbody> 
     <?php foreach($pages as $page):?> 
      <tr> 
      <input type="hidden" name="targetid" value="<?= $page['id'] ?>"></input> 
      <td><?= $page['pagename'] ?></td> 
      <td><?= $page['pagetype'] ?></td> 
      <td><?= $page['regdate'] ?></td> 
      <td><input type="submit" value="delete" class="red-text material-icons tooltipped" data-tooltip="Delete"><td> 
      </tr> 
     <?php endforeach ?> 
     </tbody> 
     </table> 
     </form> 

delpage.php

<?php 

include ('../../php/db.php'); 


$id = $_POST['targetid']; 
$target = htmlentities($id); 

$stmt = $conn->prepare("DELETE FROM Pages WHERE id = (?)"); 
$stmt->bind_param("i", $page); 

$page = $target; 
$stmt->execute(); 


?> 

這部分的工作:我得到的垃圾桶圖標我設置爲刪除記錄。問題是,當我點擊它時,它總是刪除最後一條記錄,而不是它被刪除的記錄。這是一個問題,而不是它真的應該如何工作。我不明白爲什麼它會這樣做,因爲ID正在以與其他信息相同的方式「顯示」。我搜索了一個答案,但沒有任何工作,我沒有看到許多選擇,但創建一個問題。任何幫助?

在此先感謝

+0

剛剛看過的代碼@ user2860957 – MucaP

回答

3

如果這是一個大單,那麼你將有多個字段都命名爲目標ID。這是一個問題,瀏覽器正在發送最後一個字段的值。嘗試下面的小形式。每個表格都可以通過計算它們而擁有自己的名字。

從上面的表格中刪除它在循環中的位置。

<?php foreach($pages as $page): 
?> 
<tr> 
<form method="post" action="utils/delpage.php"> 
    <input type="hidden" name="targetid" value="<?= $page['id'] ?>"></input> 
    <td><?= $page['pagename'] ?></td> 
    <td><?= $page['pagetype'] ?></td> 
    <td><?= $page['regdate'] ?></td> 
    <td><input type="submit" value="delete" class="red-text material-icons tooltipped" data-tooltip="Delete"><td> 
     </tr> 
</form> 
<?php endforeach ?> 

下面是使用相同的名稱和由PHP收到的值輸入一個簡單的例子:

<form method="post" action="#"> 
    <input name="a" value="1"> 
    <input name="a" value="2"> 
    <button type="submit" value="delete">Always prints second.</button> 
</form> 

<form method="post" action="#"> 
    <input name="a" value="1"> 
    <button type="submit" value="delete">Returns 1</button> 
</form> 
    <form method="post" action="#"> 
    <input name="a" value="2"> 
    <button type="submit" value="delete">Returns 2</button> 
</form> 


<?php 
if (isset($_POST['a'])) { 
    echo $_POST['a']; 
} else { 
    echo 'page loaded'; 
} 
+0

是的!謝謝,它像一個魅力! – MucaP

+0

謝謝你接受我的回答。這是一個很好的問題。 – geeves

1

有錯誤在你delpage.php,要傳遞錯誤的變量到SQL查詢ID參數。請致電bindParam

試試這個:

delpage.php

<?php 

    include ('../../php/db.php'); 

    $id = $_POST['targetid']; 
    $target = htmlentities($id); 

    $stmt = $conn->prepare("DELETE FROM Pages WHERE id = :id"); 
    $stmt->bindParam(":id", $target); 

    $page = $target; 
    $stmt->execute(); 

?> 
相關問題