Edmund Dzakson
Edmund Dzakson

Reputation: 81

Image won't change when replaced

I have a piece of code to upload a picture and save it in a folder and the path in a databaseand show it on the webpage. Funny enough, upon uploading the picture for the first time, the image will show on the webpage and with change when I upload a new picture. But when I close the page, reopen it another day and decide to change the picture, the one of the webpage won't change even if i refresh the page but the one in the folder will change.

Here's my code

<?php
$sql2 = "SELECT Picture_HD FROM detailss WHERE Idn_nom = '$Indnum'";

require('connect.php');

$addr = "";
$addr = mysqli_query($conn, $sql2);

if ($addr) {
    $locat = $addr->fetch_row();
    $locat = (string)$locat[0];
} else {
    $locat = "Pictures/default1.png";
}

mysqli_close($conn);

echo "<div id = 'Img'>";

echo "<img src = '" . $locat . "' alt = 'Passport picture/Headshot' style = 'width:80px; height:80px;'/>";

echo "</div>";

?>

Upvotes: 1

Views: 4964

Answers (3)

jpaq
jpaq

Reputation: 49

The best way to do this is to delete the existing image right before uploading the new one with the same file name

// define variables used for file name from session variable username the directory and extension by exploding the file name from the post method from a form with a metadata type

//set new file name to username from session variable
$filename = $_SESSION['username']
// set directory of files
$dir = "img/";
// set extension variable to file extension after posted from form
$ext=strtolower(end(explode('.',$_FILES['importimg']['name'])));
// new file upload name with existing extension
$upload_file = $dir . $filename . "." . $ext;

// delete file

// find all files with the same name any extension using variable        defined above etc .txt, .php, .gif, .jpg, etc. then delete it

foreach (glob("img/$filename.*") as $deletefile) {
  // unlink is used to delete the file and delete the cache of the file
unlink($deletefile);
}

// upload image 
// upload file with type posted from metadata in form and upload it         as your new file name using upload_file variable
if (move_uploaded_file($_FILES['importimg']['tmp_name'], $upload_file)) {
// successful upload of file add code for msg or sql query etc name to users table and redirect to profile page
echo "Successfully uploaded your file.";
} else {
// upload error show message
echo "There was an error uploading your file.";
}

Enjoy

Upvotes: 0

J-C FOREST
J-C FOREST

Reputation: 321

Your browser is caching the image. If you want to prevent the browser to cache the image just add a random parameter at the end of the url.

echo "<img src = '" . $locat . "?t=" . time() . "' alt = 'Passport picture/Headshot' style = 'width:80px; height:80px;'/>";

Upvotes: 2

Eujinks
Eujinks

Reputation: 400

If your image is changing in your folder but you are seeing the old one on the webpage it's likely a caching issue, clear your browser cache (ctrl+f5 plus this is kinda broken so doesn't always work - so best to go into browser settings to do it, or open a private window after ctrl+f5) and if not the clear server level cache.

Upvotes: 0

Related Questions