使用复选框删除多个文件


Deleting multiple files using a checkbox

我试过浏览这里的其他帖子,但一直未能找到解决我特定问题的方法。

问题:选中一个或多个复选框并提交后,图像不会发生任何变化,所有表单元素都会消失。

目标:我希望所选图像在提交到$_POST阵列时被删除。此外,我希望其余的文件被重命名(像数组移位一样)例如:如果我有6个图像,Image-3和Image-5要删除,那么图像6应该被重命名为图像5,等等。

这是我当前的代码:

PHP:

if($_POST['delete_img']){   
            if ($images){
                if (!empty($_POST['delete'])){
                    $delete = $_POST['delete'];
                    print_r($delete);
                    for ($i =(count($delete) - 1); $i >= 0; $i--){
                        // Determine the images to be deleted
                        $images_to_delete = "profiles/".$user_id."/".$user_id."-".$delete($i).".jpg";
                        // Delete the images
                        echo "Deleting image: " . $i;
                        recursiveDelete($images_to_delete);
                        for ($j = $delete($i); $j < $images; $j++){
                            echo "checkpoint";
                            // Rename the files
                            rename("profiles/".$user_id."/".$user_id."-".$j+1 . ".jpg");
                            // Decrement the images number for the db 
                            $new_images_num = $images-1;
                            // Update the database
                            $image_info = array($new_image_num,$user_id);
                            $result = pg_execute($conn, "update_images", $image_info);
                        }
                    }
                }   
                else{
                    $error .= "You must select an image to delete.";
                }
            }   
            else{
                echo "There are no images to delete";
            }   
        }

HTML:

<form id="uploadform" enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <div id="profile_images">
        <?php
            echo $profile_images;
        ?>
    </div>
    <br/>
    <strong> Select image to upload: </strong>
    <input name="uploadfile" type="file" id="uploadfile" />
    <input type="submit" value="Upload" name="upload" />
    <input type="submit" value="Delete" name="delete_img" />
    <input type="submit" value="Save" name="save" />
</form>

我认为这就是您想要做的,即1)删除任何选定的文件,然后将所有名称重置为递增。您将不得不更改目录名和命名约定:

function getFileList($dir)
    {
        // Filter out the inevitable dots..
        $filter     =   array(".","..");
        // Scan the target directory
        $fileList   =   scandir($dir);
        // Just return false if folder empty
        if(empty($fileList))
            return  false;
        // Return filtered array
        return array_values(array_diff($fileList,$filter));
    }
$dir    =   __DIR__.'/testimg';
if(!empty($_POST['delete'])) {
        foreach($_POST['delete'] as $i => $dVal) {
                if(!empty($_POST['delete'][$i])) {
                        $fName  =   $dir.'/user'.$i.".jpg";
                        if(is_file($fName)) {
                                if(unlink($fName))
                                    echo 'Deleted: '.$fName;
                            }
                    }
            }
        // See if any files remain in folder
        $files  =   getFileList($dir);
        // Rename any files in the folder
        if($files) {  
                if(count($files) > 0) {
                        $i = 1;
                        foreach($files as $name) {
                                if(rename($dir."/".$name, $dir.'/user'.$i.".jpg"))
                                    $i++;
                            }
                    }
            }
    }
// Check one last time 
$files  =   getFileList($dir);
?>
<form id="uploadform" enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <div id="profile_images">
<?php   
if($files) {
        $i = 1;
        foreach($files as $key => $value) {
                if(is_file($img = $dir."/".$value)) {
                        echo '<img src="'.str_replace(__DIR__,"",$img).'" style="max-height: 100px;" />IMAGE '.$i.'<input type="checkbox" name="delete['.$i.']" />';
                        $i++;
                    }
            }
    }
?>
    </div>
    <br/>
    <strong> Select image to upload: </strong>
    <input name="uploadfile" type="file" id="uploadfile" />
    <input type="submit" value="Upload" name="upload" />
    <input type="submit" value="Delete" name="delete_img" />
    <input type="submit" value="Save" name="save" />
</form>