2016-12-28 100 views
1

我读取文件夹中的文件。PHP读取后取消链接文件

现在我想让每个文件都带有“编辑”,“开始”和“删除”按钮。

的问题是,当我点击“删除”,PHP将删除最后一个文件的读取,在那里我点击“删除”

据我所知,这是While循环而不是文件,不提供任何信息到取消链接功能,但我不明白。

感谢您的帮助! ?:)

<?php 
if ($handle = opendir('rezepte/')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      #Entfernt der Datei das ".txt" 
      $replacer = str_replace(".txt","",$entry); 
      echo " 
       <div class='eintrag'>$replacer</div><br> 
       <a href='$replacer.txt'>edit</a> 
       <a href='$replacer'> start</a> 

       <form method='post'> 
        <input type='submit' name='delete' value='delete'/> 
       </form>";  
     }  
    } 
    closedir($handle); 
} 

if(isset($_POST['delete'])) { 
    echo " 
     <div class='warning'>"; 
    echo $replacer; 
    echo "Do you really want to delete?> 
     <form method='post'> 
      <input type='submit' name='really_delete' value='delete it'/> 
     </form> 

     <form method='post'> 
      <input type='submit' name='not_delete' value='cancel'/> 
     </form></div>"; 
} 

if(isset($_POST['really_delete'])) { 
    unlink("rezepte/".$replacer.".txt"); 
} 

if(isset($_POST['not_delete'])) { 
} 

>

+0

我也对你的代码指出一个安全问题。考虑一个用户可以提交一个HTTP请求,其中包含$ _POST ['delete']'和$ _POST ['really_delete']'的任意值。如果工作目录是'/ var/www',则'../../ some/important/file'的'really_delete'值将会通过'/var/www/rezepte/../../调用'unlink'。/some/important/file.txt',即'/ var/some/important/file.txt'。您需要清理从“delete”和“really_delete”中读取的内容。例如如果您只希望整数值,如果它们中包含其他字符则失败。另外,你是否允许任何用户删除任何文件? – joshden

+0

哦,你是对的,坦克你。我只写了一个小的php/html/css web应用程序在我的覆盆子pi上调用python函数。所以只有我作为一个用户。无论如何,谢谢:) – Doodles

回答

0

那么,根据你的编码风格,你必须像编码如下:

<?php 

if(isset($_POST['delete'])) { 
    $replacer = $_POST['delete']; 
    echo " 
     <div class='warning'>"; 
    echo $replacer; 
    echo "Do you really want to delete?> 
     <form method='post'> 
      <input type='submit' name='really_delete' value='$replacer'/> 
     </form> 

     <form method='post'> 
      <input type='submit' name='not_delete' value='cancel'/> 
     </form></div>"; 
} 

if(isset($_POST['really_delete'])) { 
    $replacer = $_POST['really_delete']; 
    unlink("rezepte/".$replacer.".txt"); 
} 

if(isset($_POST['not_delete'])) { 
} 

if ($handle = opendir('rezepte/')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      #Entfernt der Datei das ".txt" 
      $replacer = str_replace(".txt","",$entry); 
      echo " 
       <div class='eintrag'>$replacer</div><br> 
       <a href='$replacer.txt'>edit</a> 
       <a href='$replacer'> start</a> 

       <form method='post'> 
        <input type='submit' name='delete' value='$replacer'/> 
       </form>";  
     }  
    } 
    closedir($handle); 
} 
+0

不错,工作! :) – Doodles

1

忽视一些在上面的代码中的语法错误,你可以将文件名($替代品)插入值删除提交按钮,像这样:

<input type='submit' name='delete' value='" . $replacer . "'/> 

哪一个会将$ replacer的值发送给你想要的地方。

理想的情况下,虽然,它会更有意义,把隐藏的表单字段的名称中它像这样:

'<input type="hidden" name="filename" value="' . $replacer . '"/>' 

,改变你的形式处理器寻找$ _POST [“名”]代替。

+0

感谢您的快速响应,但只是改变按钮的名称,并不影响删除顺序。如果现在按下按钮,read while循环的最后一个文件被删除。例如,我得到了5个文件,如1,2,3,4,5,我按下3上的按钮,文件“5”被删除。 – Doodles

+0

请参阅我编辑的回复(对不起,我在火车上的移动设备上,有时难以获得这些回复) –