2011-11-11 61 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(); 
        } 
       } 
      ?>