从数据库中删除特定图像[simple php / mySql]

时间:2011-11-11 09:22:16

标签: 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>

我在这里做错了什么?

2 个答案:

答案 0 :(得分: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查询存在巨大的安全问题。始终清理传入的数据。

答案 1 :(得分: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();
                    }
                }
            ?>