我要在输入字段旁边添加“删除文件”按钮,并且要分别删除文件夹注释中的每个文件。 但是 foreach始终删除最后一个文件。如何解决? 为什么foreach总是选择数组中的最后一个文件?
<form method="post" action="file_operation.php" id="delete_form">
<?php
$scan = scandir('notes/');
foreach($scan as $file)
{
if (!is_dir("notes/$file"))
{
?>
<?php //echo $file.'<br>'; ?>
<div class="col-md-6">
<input type="text" name="file_name" placeholder="" value="<?php echo $file; ?>">
<input type="submit" value="Delete File" name="delete_file">
</div>
<?
}
}
?>
</form>
文件操作源
if(isset($_POST['delete_file']))
{
$file_name=$_POST['file_name'];
$folder="notes/";
#$ext=".txt";
$ext='';
$file_name=$folder."".$file_name."".$ext;
echo "file ".$file_name." deleted";
#exit();
unlink($file_name);
}
答案 0 :(得分:1)
您有很多同名输入。提交表单时,$_POST['file_name']
的值将是名为file_name
的最后一个输入的值。这就是为什么它总是删除最后一个文件的原因。
我建议使用按钮代替输入。这样,您可以为按钮分配一个值,以便可以轻松获取$_POST
中单击的按钮的值。
<?php echo $file ?>
<button type="submit" name="delete_file" value="<?php echo $file ?>">
Delete File
</button>
然后在您的提交处理程序中:
if(isset($_POST['delete_file']))
{
// now the submit button has a value of the file name to delete
$file_name = $_POST['delete_file'];
// ...
我还建议验证文件名,以确保确实删除了该文件名。实际上,某人可以发布他们想要的任何值,并有可能删除不应删除的内容。