【问题标题】:Multiple submissions from one page来自一页的多个提交
【发布时间】:2012-03-14 09:21:18
【问题描述】:

我试图允许用户删除某个目录中的某个图像。我需要他们先指定一个目录,然后再指定他们要删除的图像。

我已经能够完成我认为最困难的部分,将他们的图库选择结果显示在一个下拉列表中,其中仅填充了他们选择的图库中这些图像的名称。

我的问题是我似乎无法获得第二个表单的提交按钮来触发 if 语句,该语句将删除文件并从表中删除该行。我认为这里有人可能会仔细阅读我的代码并告诉我我缺少什么:(

非常感谢!

    <form action ='' name="form1"  method='POST'  enctype="multipart/form-data">
<p>Select Gallery: <select name="gal"  style="color:black;">
    <option value="" style="color:black;"><?php echo $gal; ?></option>
    <option value="graphicdesign/logos" style="color:black;">GD logos</option>
    <option value="graphicdesign/webdesign" style="color:black;">GD website design</option>
    <option value="graphicdesign/advertisements" style="color:black;">GD Advertisements</option>
    <option value="fineart/nature" style="color:black;">FA Nature</option>
    <option value="fineart/people" style="color:black;">FA People</option>
    <option value="fineart/landscapes" style="color:black;">FA Landscapes</option>
    <option value="photography/misc" style="color:black;">PG Misc</option>
    <option value="photography/nature" style="color:black;">PG Nature</option>
    <option value="photography/people" style="color:black;">PG People</option>
</select></p>
<input type="submit" value="Set Galery" style="color:black;"></p>

            <?php 

$connect = mysql_select_db("cynthie") or die("couln't find db on 2 :(");
$metaData = mysql_query("SELECT `name`, `path_full`, `path_thumb`, `galId`  FROM `images`") or die("couln't find table :(");
$gal = $_POST['gal'];

                    if (isset($_POST['gal'])) 
                    {

                    echo '<form action ="" method="POST"  enctype="multipart/form-data"><p>Select Image: <select name="toDelete" style="color:black;"><p><option style="color:black;">select img</option></p>';
                    while ($displayData = mysql_fetch_assoc($metaData)) 
                    {
                        $names = $displayData['name'];
                        $path_full = $displayData['path_full'];
                        $path_thumb = $displayData['path_thumb'];
                        $galDb = $displayData['galId'];

                        if ($galDb != $gal)
                        {}
                        else
                        {
                            echo '<p><option style="color:black;">'.$names.'</option></p>';
                        }

                    }

                    echo    '</select><p><input type="submit" value="Delete" style="color:black;"></p></form>';

     $connect = mysql_select_db("cynthie") or die("couln't find db on 4 :(");
     $delete = mysql_query("SELECT `id` FROM images WHERE name='$toDelete'") or die("couln't find table on line 81 :(");
    $toDelete = $_POST['toDelete'];     

                    if (isset($_POST['toDelete']))
                        {
                        unlink($path_full);
                        unlink($path_thumb);
                        mysql_query("DELETE FROM images WHERE `id`=$delete");
                        unset($delete);
                        echo '<p>removed!</p>';
                        }
                    else
                    {}

                        }




            ?>

【问题讨论】:

  • 这对 SQL 注入攻击开放! "DELETE FROM images WHERE id=$delete" 其中$delete = $_POST['toDelete']
  • 如果它出现在受保护的区域,例如管理面板,我应该担心吗?解决方案是通过在单独的页面上编写一个函数并在此处调用它吗?还是跳到另一个处理删除然后返回的页面?
  • 即便如此,您也应该担心,因为那样的话您所拥有的唯一保护就是页面没有链接到任何地方。人们不知道该页面存在这一事实并不意味着他们不会找到它。这是通过默默无闻的安全。解决方案是正确转义查询中的参数(或使用准备好的语句);如果您不知道这意味着什么,那么您可能需要多了解一些 SQL(例如,参见 unixwiz.net/techtips/sql-injection.html
  • 我很感激,我会使用它,但除了我在此处发布的内容之外,此页面的开头还会启动一个会话执行检查,它将引导您进入登录屏幕。确实应该只有一个人可以访问此页面。

标签: php forms post submit


【解决方案1】:

您的toDelete 支票位于gal 支票内,因此您需要发送$_POST['gal']$_POST['toDelete']。我在您的第二个表单中没有看到gal,所以只需添加&lt;input type="hidden" name="gal" value="{$_POST['gal']}" /&gt;

【讨论】:

  • 如果这回答了您的问题,请将其标记为已接受 - 这样人们一眼就知道您的问题已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多