Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中创建取消链接按钮_Php - Fatal编程技术网

如何在PHP中创建取消链接按钮

如何在PHP中创建取消链接按钮,php,Php,我有一个PHP脚本,你可以上传文件。这些文件将被列出,并转换为下载链接。我最不需要的是每个列表项都有一个删除按钮。像这样 test.txt X (大X应该是删除按钮) 这是到目前为止我的代码 <?php if(isset($_FILES['file_array'])){ $name_array = $_FILES['file_array']['name']; $tmp_name_array = $_FILES['file_array']['tmp_name'];

我有一个PHP脚本,你可以上传文件。这些文件将被列出,并转换为下载链接。我最不需要的是每个列表项都有一个删除按钮。像这样

  • test.txt X
(大X应该是删除按钮)

这是到目前为止我的代码

<?php

  if(isset($_FILES['file_array'])){
    $name_array = $_FILES['file_array']['name'];
    $tmp_name_array = $_FILES['file_array']['tmp_name'];
    $type_array = $_FILES['file_array']['type'];
    $size_array = $_FILES['file_array']['size'];
    $error_array = $_FILES['file_array']['error'];
    for($i = 0; $i < count($tmp_name_array); $i++){
        if(move_uploaded_file($tmp_name_array[$i], "uploads/".$name_array[$i])){
        } else {
            echo "move_uploaded_file function failed for ".$name_array[$i]."<br>";
        }
    }
  }


   $thelist = "";
   if ($handle = opendir('uploads')) {
       while (false !== ($file = readdir($handle))) {
           if ($file != "." && $file != "..") {
              $thelist .= '<li><a download="'.$file.'"href="uploads/'.$file.'">'.$file.'</a></li>';
           }
      }
    closedir($handle);
  }
?>

<h1>List:</h1>
<ul><?php echo $thelist; ?></ul>

名单:
    我是PHP新手,所以我希望有人能用easy语言向我解释它是如何工作的

    我最不需要的是每个列表项都有一个删除按钮

    通过表单发布值:

    <form method="post" action="delete.php">
      <button type="submit" name="file_id" value="some_value">&times;</button>
    </form>
    

    您可以添加X链接以引用要删除的文件,即

    $thelist .= '<li><a download="'.$file.'"href="uploads/'.$file.'">'.$file.'  </a> <a href="delete.php?item='.$file.'"> X </a></li>';
    
    这是如何进行的基本想法。 但为了安全起见,您可以在参数上加密url文件名,即

    base64_encode($file)
    
    在“删除”页面上,您可以对其进行解码

    base64_decode($_GET["item"])
    

    要创建删除项目的请求,您可以执行以下操作:

    <form action="delete.php" method="POST">
      <input type="hidden" name="csrf_token" value="$csrf_token">
      <input type="hidden" name="file" value="$file">     
      <button type="submit">X</button>
    </form>
    
    
    X
    
    基本上,
    $csrf_令牌
    是一个安全的随机令牌,它绑定到会话,服务器应在处理删除请求之前验证该令牌。 (提到了关于CSRF安全问题@PeeHaa的更新。)
    (如果支持方法DELETE,可以使用它。)

    HTTP方法GET不建议用于具有这种效果的操作。相反,它应该只用于检索一些数据。我同意亚历杭德罗的观点。一种非常危险和不安全的方法。好的,谢谢,我理解。一开始它并没有真正起作用,但我将delete.php的位置更改为uploads目录。(当然,在代码中我更改了delete.php的路径。我可以进一步使用此代码。:@StijnWesterhof检查顶部的答案,我添加了X以删除文件。或者你需要它是一个按钮?它不仅容易受到CSRF攻击。它还容易受到目录遍历攻击,这使得此代码是一个非常糟糕的主意。@PeeHaa您建议使用哪一种?添加CSRF保护和目录遍历预防。这允许随机用户诱使用户删除随机文件,因为您刚刚引入了CSRF漏洞。
    base64_decode($_GET["item"])
    
    <form action="delete.php" method="POST">
      <input type="hidden" name="csrf_token" value="$csrf_token">
      <input type="hidden" name="file" value="$file">     
      <button type="submit">X</button>
    </form>