Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_File_Delete File_Unlink - Fatal编程技术网

PHP在读取文件后取消链接

PHP在读取文件后取消链接,php,file,delete-file,unlink,Php,File,Delete File,Unlink,我读取文件夹中的文件 现在我想让每个文件都有一个“编辑”、“开始”和“删除”按钮 问题是,当我单击“删除”时,PHP将删除最后读取的文件,而不是单击“删除”的文件 我知道这是While循环,它没有给unlink函数提供任何信息,但是我没有正确理解它 谢谢你的帮助!:) 忽略上面代码中的一些语法错误,您可以将文件名($replacer)放入delete submit按钮的值中,如下所示: <input type='submit' name='delete' value='" . $repla

我读取文件夹中的文件

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

问题是,当我单击“删除”时,PHP将删除最后读取的文件,而不是单击“删除”的文件

我知道这是While循环,它没有给unlink函数提供任何信息,但是我没有正确理解它

谢谢你的帮助!:)


忽略上面代码中的一些语法错误,您可以将文件名($replacer)放入delete submit按钮的值中,如下所示:

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

这会将$replacer的值发送到您想要的位置

但是,理想情况下,将一个隐藏的表单字段和名称放在其中会更有意义,如下所示:

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

并将表单处理器改为查找$\u POST['filename']

那么,根据您的编码风格,您必须按照以下方式进行编码:

<?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);
}   

感谢您的快速响应,但这只是更改按钮名称,不会影响删除顺序。如果我现在按下按钮,readwhile循环的最后一个文件将被删除。例如,我得到了5个文件,如1、2、3、4、5,我按下了3上的按钮,文件“5”被删除。请查看我编辑的回复(对不起,我在火车上移动,有时很难正确获取这些文件)。我还想指出您的代码存在安全问题。考虑用户可以提交任意值的HTTP请求,用于<代码> $* POST [删除] <代码> >代码> $POST [ RealyDele] ] < /代码>。如果工作目录是
/var/www
,那么
真的删除
。/../some/important/file
将调用
取消与
/var/www/rezepte/../some/important/file.txt的链接。您需要对从
删除
真正删除
中读取的内容进行清理。e、 g.如果您只期望整数值,如果其中包含其他字符,则失败。还有,你允许任何用户删除任何文件吗?哦,你说得对,你。我只编写了一个小的php/html/css webapp来调用我的raspberry pi上的python函数。所以只有我作为一个用户。无论如何,谢谢你:)
<?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);
}