2011-11-11 26 views
0

イメージアップロードフォームがあり、正常に動作します。データベースから特定のイメージを削除する[simple 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

削除するSQLクエリの直前にある '$ imagename'が正しいかどうかを確認し、それぞれの画像に正しいことを確認してください。 – Chaim

答えて

1

問題は、すべてを同じフォームの中に入れてしまうことです。フォームに同じ名前の複数のフィールドがある場合、フォームのうちの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

私はチャイムが正しいと思います。 –

+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(); 
        } 
       } 
      ?> 
関連する問題