Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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
Javascript 使用php和sweet alert 2删除文件_Javascript_Php_File_Unlink_Sweetalert2 - Fatal编程技术网

Javascript 使用php和sweet alert 2删除文件

Javascript 使用php和sweet alert 2删除文件,javascript,php,file,unlink,sweetalert2,Javascript,Php,File,Unlink,Sweetalert2,我有这个脚本,在文件夹中显示alla图像,并且在所有缩略图下有一个删除按钮/链接。 我单击此删除按钮/链接以显示Sweet alert 2确认框,如果我单击OK(Ja,Radera!),将调用unlink.php文件并删除图像。但我的问题是,当我点击删除按钮/链接时,错误的图像被删除。谁能看出来有什么问题吗。多谢各位 <div id="thumbs_gallery"> //----------PART ONE START - SHOW ALL IMAGES I

我有这个脚本,在文件夹中显示alla图像,并且在所有缩略图下有一个删除按钮/链接。 我单击此删除按钮/链接以显示Sweet alert 2确认框,如果我单击OK(Ja,Radera!),将调用unlink.php文件并删除图像。但我的问题是,当我点击删除按钮/链接时,错误的图像被删除。谁能看出来有什么问题吗。多谢各位

<div id="thumbs_gallery">
            //----------PART ONE START - SHOW ALL IMAGES IN FOLDER----------//
            <?php
                $directory = 'images/';
                $thumbsdir = 'images/thumbs';
                $allowed_types = array('jpg', 'JPG', 'JPEG', 'jpeg', 'gif', 'PNG', 'png');
                $fileNames = $files = $file_parts = array();
                $ext = '';
                $title = '$file';
                $i = 0;

                $toMatch = "{$directory}*.{".implode(',', $allowed_types).'}';
                $fileNames = glob($toMatch, GLOB_NOSORT | GLOB_BRACE);  

                    foreach($fileNames as $file) {
                        $f = explode('/', $file);
                        $fileName = end($f);
                        $files[$fileName] = filemtime($file);
                    }

                    arsort($files);

                    foreach(array_keys($files) as $file)
                    {
                        $file_parts = explode('.',$file);
                        $ext = strtolower(array_pop($file_parts));

                        $title = implode('.',$file_parts);
                        $title = htmlspecialchars($title);
                //----------PART ONE END----------//

                //----------PART TWO START - SHOW THUMBNAILS AND DELETE BUTTON/LINK----------//
                echo '
                <div class="thumbs_gallery_img" style="background:url('.$thumbsdir.'/'.$file.') no-repeat 50% 50%;"> //Show thumbnails
                <a href="'.$directory.''.$file.'" title="'.$title.'">'.$title.'</a> // Link to big image
                <div class="unlink"><i class="fas fa-trash-alt fa-2x"></i><a href="unlink.php?filename='.$file.'"></a></div> //Delete button/link
                </div>';
                //----------PART TWO END----------//

                //----------PART TRHEE START - PREVENT DEFAULT ON DELETE BUTTON/LINK AND RUN SWEET ALERT 2, AND THE UNLINK.PHP FILE.----------//
                echo '<script>
                $(".unlink a").on("click", function(e) {
                // Do not run the unlink.php file on link click.
                e.preventDefault();
                    // Run the Sweet Alert 2 code.
                    swal({
                    title: "Radera denna bild?",
                    text: "Klicka på Ja om du vill radera denna bild.",
                    type: "warning",
                    showCancelButton: true,
                    confirmButtonColor: "#d33",
                    cancelButtonColor: "#3085d6",
                    confirmButtonText: "Ja, Radera!",
                    cancelButtonText: "Nej, Avbryt!",
                    }).then((result) => {
                if (result.value) {
                // If confirm run the unlink.php file.
                    window.location.href ="unlink.php?filename='.$file.'";
                } else if (
                    result.dismiss === swal.DismissReason.cancel
                ) {
                // If cancel do nothing (stay on same page).
                }
                })
                })
                </script>';

                $i++;               
                }
            ?>
            //----------PART THREE END----------//
        </div>

       //THIS IS THE CODE IN THE unlink.php file:
   <?php
    $img_to_delete = $_GET['filename'];

    unlink('images/thumbs/'.$img_to_delete);
    unlink('images/'.$img_to_delete);
    header('location: dropzone.php');
    ?>

//----------第一部分开始-显示文件夹中的所有图像----------//

问题

您有许多重复的js函数
swal({})
绑定到一个选择器
。取消链接a
。您正在为每个可以删除的文件添加一个重复的sweet alert函数,因为它们都绑定到同一个选择器。当您单击任何删除链接时,会执行第一个选择器。该函数中引用的任何文件都会被删除

解决方案

而不是在用于生成链接的
foreach
循环中复制此sweet alert函数。您可以向每个带有文件名的链接添加一个数据标记,然后让一个js函数负责处理删除。大概是这样的:

foreach (array_keys($files) as $file) {
   //add whatever filename modifications here
   echo '<a href="#" class="unlink" data-file="'.$file.'">Delete</a>';
}

<script>
  $("a.unlink").on("click", function(e) {
     // Run the Sweet Alert 2 code.
     swal({
       title: "Radera denna bild?",
       text: "Klicka på Ja om du vill radera denna bild.",
       type: "warning",
       showCancelButton: true,
       confirmButtonColor: "#d33",
       cancelButtonColor: "#3085d6",
       confirmButtonText: "Ja, Radera!",
       cancelButtonText: "Nej, Avbryt!",
     }).then((result) => {
        if (result.value) {
           // If confirm run the unlink.php file.
           window.location.href ="unlink.php?filename="+$(this).data('file');
        } else if (
           result.dismiss === swal.DismissReason.cancel
        ) {
            // If cancel do nothing (stay on same page).
        }
     })
 })</script>
foreach(数组_键($files)作为$file){
//在此处添加任何文件名修改
回声';
}
$(“a.unlink”)。单击(“click”,函数(e){
//运行Sweet Alert 2代码。
游泳({
标题:“Radera denna bild?”,
文本:“Klicka påJa om du vill radera denna bild.”,
键入:“警告”,
showCancelButton:true,
confirmButtonColor:#d33“,
取消按钮颜色:“3085d6”,
confirmButtonText:“是啊,拉德拉!”,
cancelButtonText:“Nej,Avbryt!”,
})。然后((结果)=>{
if(result.value){
//如果确认,请运行unlink.php文件。
window.location.href=“unlink.php?filename=“+$(this.data('file');
}否则如果(
result.dismise===swal.DismissReason.cancel
) {
//如果取消,则不执行任何操作(停留在同一页上)。
}
})
})

echo$img\u删除-显示什么和变量转储都取消链接?还可以查看HTML源代码。注意:
$title='$file'将不起作用。删除引号。该变量不适用于单引号。请使用GET请求删除。。。。坏主意49美元:$img_to_delete;从unlink.php?filename='.$file.$title='$file'获取文件名;这确实有效。埃帕斯卡雷罗:是的,我开始明白这一点,但这就是我现在所拥有的。谢谢大家,谢谢大家。我想对它稍作修改,但现在它可以正常工作了。:)