【问题标题】:Can't make delete button using $_GET method无法使用 $_GET 方法制作删除按钮
【发布时间】:2026-01-09 11:05:01
【问题描述】:

我的第一个学习任务是编写脚本。任务如下:创建一个用于上传文件的webform,文件上传后它们显示在html表的同一页面上。这是我的第一个任务,我的首要任务就是让它发挥作用。所以我创建了一个表单和函数来扫描上传文件夹中的文件,然后将它们放入数组中。之后数组用于构建 html 表的 cucle 中。请帮助我建立正确的删除按钮,因为我无法让它工作。我的代码在这里:

<?php
if ($_GET['action']=='delete' && isset($_GET['file'])) {
        unlink($dir.$filelist[$i]);
        echo "File ".$filelist[$i]. " has been removed";
}
 
 
//table with files
echo"<table border=1 cellpading=5 cellspasing=0>
<tr><th>#</th><th>Filename</th><th>Path</th><th>File extenstion</th><TH>File Size<th>Remove file?</th></tr>";
for ($i=0; $i <count($fileslist) ; $i++) {
        echo "<tr>";
        echo"<td>$i</td><td>". $fileslist[$i]."</td>";
        echo "<td><a href=".$dir.$fileslist[$i].">".$fileslist[$i]."</a></td>";
        echo "<td>".$ext=pathinfo(($dir.$fileslist[$i]), PATHINFO_EXTENSION)."</td>";
        echo "<td>".$size= filesize_get($dir.$fileslist[$i])."</td>";
        echo "<td> <a href=\"upload.php?action=delete&file=".$filelist[$i].">Delete </a></td>";
        echo "<tr>";
}
echo"</tabe>";

得到以下错误:

注意:未定义索引:第 32 行 D:\PHP(1)\xampp\htdocs\upload.php 中的操作

注意:未定义变量:第 47 行 D:\PHP(1)\xampp\htdocs\upload.php 中的文件列表

【问题讨论】:

  • 查看您的第一行,在删除上下文中,您使用的是 $i,此时尚未定义,因此无法按预期工作

标签: php html html-table http-get


【解决方案1】:

替换

echo "<td> <a href=\"upload.php?action=delete&file=".$filelist[$i].">Delete </a></td>";

通过

echo "<td> <a href=\"upload.php?action=delete&file=".$fileslist[$i].">Delete </a></td>";

你只是缺少文件列表中的 s

【讨论】:

    【解决方案2】:

    我认为您应该从字面上理解该错误消息。您提供的代码示例中未定义您的变量 $filelist

    您的第一个错误也被抛出,因为您尝试检查$_GET['action'] == 'deleted',即使该参数未通过 GET 传递。在进行比较之前,您应该始终检查参数是否存在:

    if (isset($_GET['action']) && $_GET['action']=='delete' && isset($_GET['file'])) {
    

    【讨论】:

      【解决方案3】:

      1- 当 $i 尚未定义时,您正在删除第 $i 项

      2- 如上述答案所述

      为防止变量和函数名称出现错误,您可以使用支持代码完成的文本编辑器。例如,可以提供帮助的非常轻便的工具是Geany。即使在 linux 和 windows 上的大型项目中,我仍然使用它。它不会占用大量 RAM 和 CPU,也不会花时间打开。

      在 AND (&&) 条件块中,条件是从左到右读取的,一旦出现不正确的情况,块就会中断,因此您更有可能希望先测试关键内容,以免遇到麻烦在街区更远的地方。

      【讨论】: