Miért nem változik meg a kép a kíirásban a kép amikor sikeres a feltöltés és még a címen az a kép érhető el?
<?php
if(isset($_POST['submit'])) {
$target = "tmp/profilpicture/".$user['Username'].".";
$file_name = $_FILES['file']['name'];
$tmp_dir = $_FILES['file']['tmp_name'];
if(!preg_match('/(gif|jpe?g|png)$/i', $file_name))
{
echo "Rossz fajltipus!";
}
else
{
move_uploaded_file($tmp_dir, $target . "user.jpg");
$feltoltve = true;
}
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form enctype="multipart/form-data" action="" method="post" />
<input type="hidden" name="MAX_FILE_SIZE" value="8000000" />
<label for="file"> Válassz egy képet!</label><input id="file" type="file" name="file" />
<input type="submit" name="submit" value="Feltöltés!" />Max. 800KByte<br />
<?php
if($feltoltve) {
$utvonal = $target . $file_name;
echo "Profilképedet megváltozott, sikeresen feltöltve!";
}
?>
<?
$conn = mysql_connect("host", "juzer", "pass");
mysql_query("UPDATE `datebase`.`Users_login` SET `profil.img` = 'tmp/profilpicture/".$user['Username'].".user.jpg' WHERE `Users_login`.`Id` =".$user['Id']."");
?>
Ez a teljes kód, az útolsó pedig mindig, hozzáadja az adott sorba az adott kép elérhetőségét.
Amikor feltölt egy képet a felhasználó akkor nem változik meg az adatlapján mindig az elözőt adja ki. Viszont ha letöltöm az FTP szerverröl akkor már az újat tölti le. Ez, hogy van?
Mi lehet a probléma?
Vagy más megoldás kellene?
elöre is köszi!
Ez egy olyan dolog,hogy a böngésződ ha azonos néven kapja meg a képfájlt,akkor nem fogja újra letölteni. Tehát a megoldás az,ha a kép neve mindig változik,amikor feltöltöd. Erre számos megoldás létezik.
Én úgy oldottam meg,hogy tárolom a kép verziószámát és lekérdezésnél kepnev.jpg?v=verziószám -al hivatkozok a képre.
jó, jó...
és ez a verziószám hozzáadása, hogyan?
Amit Drone007 az is jó, de amúgy
'UPDATE images SET mező1=érték1,mező2=érték2,valtozat=valtozat+1 WHERE ID='.$kep_id
így a változat dologgal sem működik a dolog :(
és ez a hash-es módszer, hogyan is működik igazából?
Egyrészt: képet biztonsági okokból MINDIG úgy kell tárhelyen elhelyezni, hogy feltöltéskor átfuttatunk rajta egy átméretezést. Ennek olyan praktikus okai is vannak, hogy a feltöltött kép ne zabálja le a tárterület nagy részét, másrészt felesleges 10Mp-es képeket tárolni webes megjelenítésre, egy 800x800-as is bőven elég, plusz esetleg egy extra thumbnail, hogy kis méretben ne kelljen a nagyot betölteni.
Szóval, a feltöltéskor kiterjesztéstől függően átnyomod egy egy átméretezésen (ld: ImageCopyResampled() függvény), amit egy előre legyártott forrásképbe töltesz (ld: ImageCreateFromGif/Jpeg/Png() függvények). A forrásfájl (kép) nevét pedig egy időbélyeg alapján készíted el.
Pl: $destinationImage = "/uploads/".md5(time()).".".$fileExtension;
A $destionationImage változót pedig szépen eltárolod az adattáblában.
Esetleg cifrázhatod azzal, hogy két képet készítesz a feltöltéskor. Egy bélyegképet (pl 150pixel méretben), és egy nagyot (pl 800pixel méretben), és a két fájlt más-más mappákban helyezed el, ugyanazon a néven.
Pl.: $bigImage = "/uploads/".md5(time()).".".$fileExtension;
$thumbImage = "/uploads/thumb/".md5(time()).".".$fileExtension;
Erre elég sok variáció létezik, de a lényeg, hogy az újonnan feltöltött képnek minden feltöltéskor új nevet is generálj, így a böngésző mindenképpen újra fogja tölteni.
Az adattábla módosítása előtt a régi bejegyzést ki kell olvasni, és a régi képe(ke)t törölni kell!
Sok sikert!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!