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