我有以下HTML表单:
<form action='delete.php' method='POST'>
<table>
<div class = '.table'>
<?php
$dir = '../uploads/store/';
$newdir = ereg_replace('\.','',$dir);
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if (!preg_match('/^(\.(htaccess|\.)?|index\.html)/',$file)) {
echo "<tr><td><font color = 'white'><a href='$newdir$file'>$file</a></font></td>";
echo "<td><input type='submit' value ='Delete'></td></tr>";
echo "<input align='right' type='hidden' value='$file' name='file'>";
}
}
closedir($dh);
}
}
?>
</div>
</table>
</form>
指向以下PHP脚本的链接:
<?php
session_start();
$file = $_POST['file'];
$dir = '../uploads/store/';
$file = $dir . $file;
opendir($dir);
if(unlink($file)) {
echo "File sucessfully deleted";
$_SESSION['username'] = 'guitarman0831';
header('Refresh: 2;url=http://www.ohjustthatguy.com/uploads/uploads.html');
} else {
echo "Error: File could not be deleted";
$_SESSION['username'] = 'guitarman0831';
header('Refresh: 2;url=http://www.ohjustthatguy.com/uploads/uploads.html');
}
?>
但是,当在HTML表单中按下删除按钮时,将删除要删除的项目上方的项目。
希望这是有道理的。
注意:我不打算使用这些脚本来保证安全性,我稍后会继续处理。现在只有我使用这项服务。
答案 0 :(得分:2)
您的HTML表单需要使用各种提交按钮传递$file
的值,而不是使用隐藏字段。
问题是,当您提交表单时,所有隐藏字段都会POST到delete.php。然后,由于您尚未使用PHP友好的HTML数组变量语法,因此PHP仅使用最后一个来设置$_POST['file']
的值。如果您在var_dump
中执行$_POST
delete.php
,则会看到POSTed输入是什么。
使用当前标记最简单的方法就是将每个提交按钮命名为file
并将$ file作为其value
传递。即你可以这样做:
<button name="file" value="example.txt" type="submit">Delete</button>
或者,您可以使用单选按钮或其他标记。