簡體   English   中英

PHP Mysql - 刪除按鈕繼續刪除最新行

[英]PHP Mysql - Delete button keeps on deleting latest row

當我遇到故障時,我總能在StackOverflow上找到答案,但這一次,雖然我確定修復很容易,但我似乎無法做到正確!

基本上,我正在嘗試在從我的mysql數據庫中提取的每一行旁邊添加一個“刪除”按鈕。 如果需要,用戶應該能夠刪除特定帖子。

當我點擊刪除按鈕時,它總是被刪除的最新行。 所以我猜每行傳遞的值有問題:看起來它們被最新的一個覆蓋了。

下面是我的代碼:

<?php  
$table = query("SELECT post, postid FROM post_list WHERE id = ? ORDER BY 
time DESC LIMIT 15", $_SESSION["id"]);
foreach ($table as $row) 
{ 
      $post = $row["post"];
      $postid = $row["postid"];  
      echo ("<table>");
      echo ("<tr>");
      echo("<td>" . $post . "</td>");
      echo("</td>")?>            
      <div id="posteraser">
       <form action='' method='post'>
          <input type='hidden' name='postid' value='<?php echo $postid?>'>
          <input type='submit' name='posteraser'>Delete</input>
       </form>
      </div>       
     <?php 
     echo ("</td>");
     echo ("</tr>");
     echo ("</table>");
     echo '<hr>';
}  
?>

在同一頁面下方,有刪除按鈕代碼:

<?php
if(isset($_POST['posteraser']))
{
    $sql = query("DELETE FROM post_list WHERE postid = '$postid' ");       
    redirect ('home.php');
}
?>

任何幫助/提示將不勝感激! 非常感謝 !

你必須在這里傳遞$_POST['postid']

if(isset($_POST['posteraser'])){
   $postid = $_POST['postid'];
   $sql = query("DELETE FROM post_list WHERE postid = '$postid' ");       
   redirect ('home.php');
}

作為程序方式

$sql = query("DELETE FROM post_list WHERE postid = ? ",$postid);  

開發人員應始終了解他們使用PHP代碼創建的HTML代碼。
這是必不可少的。

事實上,HTML代碼是我們努力的結果。 不是很好的圖片可以在瀏覽器窗口中看到 - 這是瀏覽器的工作 - 但是HTML代碼。

所以,如果你懶得看到生成的代碼,你會發現可以歸結為的東西

<input type='hidden' name='postid' value='1'>
<input type='hidden' name='postid' value='3'>
<input type='hidden' name='postid' value='4'>
<input type='hidden' name='postid' value='5'>
<input type='hidden' name='postid' value='9'>

你有什么問題為什么你只有最后的價值?

說到解決方案,您有兩種選擇

  • 為每一行創建一個單獨的表單
  • 用id標記刪除按鈕。

     <input type='submit' name='posteraser[<?php echo $postid?>]'>Delete</input> 

    例如

讓我們從select語句中檢查邏輯。 您正在選擇postid並將其分配給隱藏元素,當您按下刪除按鈕時,隱藏ID將被發送到服務器。 所以在for循環下創建表單是

<div id="posteraser">
<form action='' method='post'>
  <input type='hidden' name='postid' value='<?php echo $postid?>'>
  <input type='submit' name='posteraser'>Delete</input>
</form>
</div>

但是隱藏元素為每一行創建了相同的名稱。 所以當你按刪除按鈕。 第一個隱藏的ID被發送到服務器。 這個隱藏的id已經是你的select語句中最新的了。

那么它的解決方案是什么..要么你應該發送postid通過將它附加到你的網址,以便你可以識別按下哪個刪除按鈕。 或創建一個邏輯,只發送按下刪除的id。

這看起來不對:

echo ("<tr>");
echo("<td>" . $post . "</td>");
echo("</td>")?>     

尾隨</td>不應該在那里。 還有別的嗎?

另外,你沒有顯示postid如何進入$_SESSION['id']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM