neeko
neeko

Reputation: 2000

delete uploaded image, upload new image and change database reference

<?php
$image = $_FILES['image'];
//name of new file selected
$imagename = $image['name'];
//name of file in database
$filename = $row['filename'];

//folder to move image
$TARGET_PATH = "../$university/img/users/$category/$username/";

//if imagename in DB is different to image just selected
if ($filename <> $imagename) {
    // *** Include the class
    include("resize-class.php");

    //if the filename in DB different from filename chosen
    //delete old image
    unlink("../$university/img/users/$oldcategory/$username/$filename");

    //create random number and add that to the beginning of new imagename
    $uniqueID = uniqid();
    $imagetitle = $imagename;
    $fileunique = $uniqueID;
    $fileunique .= $imagetitle;

    $filename = $fileunique;

    //upload new selected file
    $oldpath = $_FILES['image']['tmp_name'];

    // Lets attempt to move the file from its temporary directory to its new home
    if (move_uploaded_file($oldpath, $TARGET_PATH)) {
        // NOTE: This is where a lot of people make mistakes.
        // We are *not* putting the image into the database; we are putting a reference to the file's location on the server

        $imagename = $fileunique;

        $path = "../$university/img/users/$category/$usernameid/$imagename";

        // *** 1) Initialise / load image
        $resizeObj = new resize($path);
        if (exif_imagetype($path) == IMAGETYPE_JPEG) {
            $exif = exif_read_data($path);
            $ort = $exif['IFD0']['Orientation'];
            switch ($ort) {
                case 1: // nothing
                    break;

                case 2: // horizontal flip
                    $resizeObj->flipImage($public, 1);
                    break;

                case 3: // 180 rotate left
                    $resizeObj->rotateImage($public, 180);
                    break;

                case 4: // vertical flip
                    $resizeObj->flipImage($public, 2);
                    break;

                case 5: // vertical flip + 90 rotate right
                    $resizeObj->flipImage($public, 2);
                    $resizeObj->rotateImage($public, -90);
                    break;

                case 6: // 90 rotate right
                    $resizeObj->rotateImage($public, -90);
                    break;

                case 7: // horizontal flip + 90 rotate right
                    $resizeObj->flipImage($public, 1);
                    $resizeObj->rotateImage($public, -90);
                    break;

                case 8:    // 90 rotate left
                    $resizeObj->rotateImage($public, 90);
                    break;
            }
        }


        if (($resizeObj->width > 600) || ($resizeObj->height > 600)) {

            // *** 2) Resize image (options: exact, portrait, landscape, auto, crop)
            $resizeObj->resizeImage(400, 400, 'crop');

            // *** 3) Save image
            $resizeObj->saveImage($path, 95);
        }
        //change filename in database
        $query = "UPDATE people SET filename=? WHERE id=? AND username=?";
        $stmt = $conn->prepare($query);
        $stmt->bindParam(1, $filename);
        $stmt->bindParam(2, $id);
        $stmt->bindParam(3, $username);
        $stmt->execute();
    }
}
?>

I am trying to create a form where users can change an image that they have previously uploaded. I have posted my code above, it gets as far as 'unlinking' the old image but doesn't seem to do anything after that with no errors.

I am trying to get the code to:

Any ideas where I'm going wrong? Thanks for your help

Upvotes: 0

Views: 2756

Answers (1)

Tezd
Tezd

Reputation: 36

Here are some thoughts about code:

  1. as suggested by Aditya use something like sprintf('%s%s', uniqid(), $imagename)
  2. check $_FILES for any error (maybe file is too big)
  3. you are saving image ONLY if it has width or height more then 600 px(not sure if rotating will automatically save the image)
  4. check if you have enough rights to write into directory(maybe you need to create folders first)

Upvotes: 1

Related Questions