2011-11-11 137 views
0

我有一個圖像上傳表單,它工作正常。從數據庫中刪除特定圖像[簡單的php/mySql]

但在同樣的形式下面,我想要某種圖像列表,我可以通過點擊其X按鈕來刪除特定的圖像。 我編寫了代碼,它可以工作,但它總是刪除列表中的第一個圖像,無論我點擊哪個X.

<form method="post"> 
      <ul> 
       <?php 

       $host = "127.0.0.1"; //database location 
       $user = ""; //database username 
       $pass = ""; //database password 
       $db_name = ""; //database name 

       if(!$link = mysql_connect($host, $user, $pass)) { 
        echo "<p>error: ".mysql_error()."</p>"; 
       } else { 
        mysql_select_db($db_name); 
       } 

       $selectAll = "SELECT image_name FROM home_images"; 
       $doIt = mysql_query($selectAll); 

       // if(isset($_POST['delete'])) { 
       //  mysql_query("DELETE FROM home_images WHERE image_name = "); 
       // } 

       ?> 
       <?php while($result = mysql_fetch_array($doIt)) : ?> 

        <li style="display:inline; margin-right:10px"> 
         <img src="<?php bloginfo('url') ?>/wp-content/uploads/<?php echo $result[0]; ?>" height=50 width=60 /> 
         <input type="hidden" value="<?php echo $result[0]; ?>" name="imagename" /> 
         <input type="submit" value="X" name="delete" /> 
        </li> 

       <?php endwhile; ?> 

       <?php 

        if(isset($_POST['delete'])) { 
         $imagename = $_POST['imagename']; 
         $deleter = "DELETE FROM home_images WHERE image_name = '$imagename'"; 
         if(mysql_query($deleter)) { 
          echo "Successful!"; 
          echo $imagename; 
         } else { 
          echo mysql_error(); 
         } 
        } 
       ?> 



      </ul> 
      </form> 

我在做什麼錯在這裏?

+0

嘗試檢查'$ imagename'是否正確刪除SQL查詢並確保它是正確的每個圖片。 – Chaim

回答

1

問題是你把所有內容都放在同一個表單中。當表單有多個相同名稱的字段時,它只發送其中的一個。

創建一個獨立的形式,爲每個刪除按鈕:

<?php while($result = mysql_fetch_array($doIt)) : ?> 
    <li style="display:inline; margin-right:10px"> 
     <form method="post"> 
      <img src="<?php bloginfo('url') ?>/wp-content/uploads/<?php echo $result[0]; ?>" height=50 width=60 /> 
      <input type="hidden" value="<?php echo $result[0]; ?>" name="imagename" /> 
      <input type="submit" value="X" name="delete" /> 
     </form> 
    </li> 
<?php endwhile; ?> 

順便說一句,你有一個SQL查詢一個巨大的安全問題。始終清理傳入的數據。

+0

在OP的情況下,它會刪除最後一張圖片而不是第一張圖片是否合理,因爲PHP不會僅保留具有相同名稱的多個輸入的最後一個值? – Chaim

+0

我認爲Chaim是對的。 –

+0

謝謝,正是我所需要的。 我同意這是很糟糕的安全智慧,但這只是簡單的測試,我堅持了一段時間。 –

1

如果你想要一個非javascript的解決方案,你可以做Juhana建議的多種形式的東西。或者,如果您想要一張表格,那麼您可以在每張圖片下添加一個單選按鈕(或者選擇多個複選框),然後用一個提交按鈕刪除您的選擇。

  <?php while($result = mysql_fetch_array($doIt)) : ?> 

       <li style="display:inline; margin-right:10px"> 
        <img src="<?php bloginfo('url') ?>/wp-content/uploads/<?php echo $result[0]; ?>" height=50 width=60 /> 
        <div <!--some kind of formatting here i suppose-->> 
        <input type="radio" value="<?php echo $result[0]; ?>" name="imagename" /> 
        </div> 
       </li> 

      <?php endwhile; ?> 

      <?php 

       if(isset($_POST['delete'])) { 
        $imagename = $_POST['imagename']; 
        $deleter = "DELETE FROM home_images WHERE image_name = '$imagename'"; 
        if(mysql_query($deleter)) { 
         echo "Successful!"; 
         echo $imagename; 
        } else { 
         echo mysql_error(); 
        } 
       } 
      ?>