09. december 2008 - 16:11
Der er
18 kommentarer og 1 løsning
Hvordan omdøbe billedfil efter $id ved upload til server?
Mit spørgsål lyder: Hvordan omdøber jeg en billedfil, som jeg har uploadet via en form, filen bliver uploadet til folderen "images" og tilhørende data skrives i MySql-db. Hvis nu $id bliver f.eks. 55 og der bliver uploadet en .jpg-fil, skal dette billede altså omdøbes til 55.jpg og dette nye navn skal så fremgå i rækken i mysql-db'en. Min kode ser pt. sådan her ud: <? if(isset($_POST['upload'])) { $target = "images/"; $target = $target . basename( $_FILES['userfile']['name']); $fileName = $_FILES['userfile']['name']; $tmpName = $_FILES['userfile']['tmp_name']; $fileType = $_FILES['userfile']['type']; $fileSize = $_FILES['userfile']['size']; $companyname = $_POST['companyname']; $department = $_POST['department']; $address1 = $_POST['address1']; $address2 = $_POST['address2']; $country = $_POST['country']; $contactname = $_POST['contactname']; $phone = $_POST['phone']; $fax = $_POST['fax']; $email = $_POST['email']; $website = $_POST['website']; $fileNameny = str_replace(" ","_",$fileName); $fp = fopen($tmpName, 'r'); $content = fread($fp, $fileSize); $content = addslashes($content); fclose($fp); if(!get_magic_quotes_gpc()) { $fileName = addslashes($fileName); } $tmpName = $_FILES['userfile']['tmp_name']; list($width, $height, $type, $attr) = getimagesize($tmpName); if($width>235 || $height>130) { die("Exceeded image dimension limits: width= 235px height= 130px."); } // Connects to your Database mysql_connect("ip-address", "user", "password") or die(mysql_error()) ; mysql_select_db("database") or die(mysql_error()) ; $query = "INSERT INTO tabel (name, type, size, companyname, department, address1, address2, country, contactname, phone, fax, email, website ) ". "VALUES ('$fileNameny', '$fileType', '$fileSize', '$companyname', '$department', '$address1', '$address2', '$country', '$contactname', '$phone', '$fax', '$email', '$website')"; mysql_query($query) or die('Error, query failed'); //Writes the photo to the server move_uploaded_file($_FILES['userfile']['tmp_name'], $target); // mysql_close($conn); echo "<br>Logo: <b>$fileNameny</b> uploaded <br> (type: $fileType - size: $fileSize) <br>Company name: <b>$companyname</b> <br>Department: <b>$department</b> <br>Address line 1: <b>$address1</b> <br>Address line 2: <b>$address2</b> <br>Country: <b>$country</b> <br>Contact name: <b>$contactname</b> <br>Phone: <b>$phone</b> <br>Fax: <b>$fax</b> <br>Email: <b>$email</b> <br>Website: <b>$website</b>"; } ?>
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
09. december 2008 - 17:18
#1
$target er det navn din fil/billede gemmes som, så den kan du jo bare ændre, inden du kalder move_uploaded_file()
09. december 2008 - 17:22
#2
$target er vel bestemmelsesfolderen på serveren? I dette tilfælde "images/" ?
09. december 2008 - 17:23
#3
I øvrigt er jeg ikke særlig skrap i php, så hvordan jeg ændrer og retter til, har jeg desværre ikke forstand til :-(
09. december 2008 - 18:13
#4
Se her: $target = "images/"; $target = $target . basename( $_FILES['userfile']['name']); Target er både images og filens navn. Så fortæl mig gerne med eksempler, hvad din fil skal hedde og jeg skal vise dig det.
09. december 2008 - 20:05
#5
Filnavn når det uploades: billed-eksempel.jpg Derefter bliver flere felter tilføjet og lagt ind i en række i db'en. $id (autoincrement og unik) $name (billedfilens navn) $type (filens type) $size (filens størrelse) og herefter flere felter... Det er så $name, som skal hedde det samme som $id + filtype (f.eks 55.jpg) $id (f.eks. 55) $type (image/jpeg) $name (55.jpg) $size (19876) og herefter flere felter...
09. december 2008 - 20:43
#6
Ret: $target = "images/"; $target = $target . basename( $_FILES['userfile']['name']); til: $target = "images/"; Og ret: move_uploaded_file($_FILES['userfile']['tmp_name'], $target); til: move_uploaded_file($_FILES['userfile']['tmp_name'], $target . mysql_insert_id() . '.' . strtolower( pathinfo( $_FILES['userfile']['name'], PATHINFO_EXTENSION ) ));
09. december 2008 - 21:04
#7
Mange tak, nu er halvdelen på plads, således, at filnavnet på serveren bliver navngivet efter $id - fint. Men i DB'en er $name stadig f.eks. billed-eksempel.jpg, og det skal være det samme som navnet på filen på serveren, altså ikke billed-eksempel.jpg, men f.eks. 55.jpg. ?
09. december 2008 - 21:12
#8
Det kan du ikke rigtigt få, for ID får du først efter du har indsat i db. Så skal du på en måde finde næste ID inden du indsætter og det kender jeg desværre ikke lige til.
09. december 2008 - 21:41
#9
Øv... måske en anden kan hjælpe mig lidt videre. Kan man ikke bruge LAST_INSERT_ID og så lægge 1 til værdien plus filtypen, så det ender med det samme som jeg ønsker? Jeg er ude i gætværk, og ved ikke hvordan jeg skal komme videre?
09. december 2008 - 21:47
#10
Du kan prøve at lave kaldet inden du indsætter: $last_id = mysql_result(mysql_query("SELECT LAST_INSERT_ID() FROM tabel"),0); og så bruge det i $filename og $target.
09. december 2008 - 22:40
#11
Hhmmm... det kan jeg ikke lige gennemskue nu.
10. december 2008 - 06:30
#12
Hvem har lavet din kode ?
10. december 2008 - 08:28
#13
Koden er lavet ud fra et script et sted på nettet - kan ikke huske hvor...
10. december 2008 - 08:33
#14
Så må jeg jo nok lave alt arbejdet for dig... Ret: $last_id = mysql_result(mysql_query("SELECT LAST_INSERT_ID() FROM tabel"),0); $target = "images/"; $target = $target . basename( $_FILES['userfile']['name']); $fileName = $_FILES['userfile']['name']; til: $ext = strtolower( pathinfo( $_FILES['userfile']['name'], PATHINFO_EXTENSION ) ); $target = "images/"; $fileName = $last_id . '.' . $ext; $target = $target . $fileName; Så tror jeg du kan bruge dit oprinde script.
10. december 2008 - 08:34
#15
Fejl, det skal være sådan: Ret: $target = "images/"; $target = $target . basename( $_FILES['userfile']['name']); $fileName = $_FILES['userfile']['name']; til: $last_id = mysql_result(mysql_query("SELECT LAST_INSERT_ID() FROM tabel"),0); $ext = strtolower( pathinfo( $_FILES['userfile']['name'], PATHINFO_EXTENSION ) ); $target = "images/"; $fileName = ($last_id + 1) . '.' . $ext; $target = $target . $fileName;
10. december 2008 - 09:08
#16
Efter at have ændret til ovenstående er $name i både DB og filnavn på serveren hver gang 1.jpg - extension skrives korrekt hver gang - altså hele tiden et et-tal: 1.filtype?
10. december 2008 - 10:43
#17
Prøv lige at kald SELECT LAST_INSERT_ID() FROM tabel i phpmyadmin.
10. december 2008 - 10:49
#18
Det har jeg gjort og jeg får resultatet "0" (nul) - det er selvfølgelig forklaring på, at 0+1 giver 1, men hvorfor mon det er sådan?
07. december 2009 - 18:45
#19
Fik aldrig det her til at virke, og er ikke aktuelt længere, så jeg lukker.
Vi tilbyder markedets bedste kurser inden for webudvikling