Smarteste måde at uploade billede og gemme img url i database?

Tags:    php mysql

<< < 123 > >>
I min database har jeg også nogle billeder - eller det vil sige jeg har billede-URLs gemt i databasen, og billederne er jo så i en mappe.

Jeg kunne rigtig godt tænke mig muligheden for at lave et billed-upload som oploader billedet til "mappen" - samt gemmer denne billedeURL i databasen i forbindelse med opdatering.

Men hvordan gøres dette nemmest/ smartest?
Umiddelbart tænker jeg jo, at det var nemt hvis billedet fik et bestemt navn som passer til det id det er uploadet til, sådan at billedet blot overskrides hvis der uploades et nyt. Ellers kan jeg jo få mange billeder efterhånden til at ligge og fylde på serveren.

Jeg har altså en database med heste.
Jeg har så en side hvor man kan opdatere en hest i databasen - og det er her jeg gerne vil have bygget en upload funktion ind.

Er der nogen som kan hjælpe mig med hvordan jeg skal gøre?
Eller henvise til en god artikel som passer til mine behov?



29 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato

skim
http://www.udvikleren.dk/forum/38894/slette-img-foerste-upload-nyt-billede-efter
http://www.udvikleren.dk/forum/38819/aendre-et-billede-som-bliver-uploadet-inden-det-biver-sendt-retur/
bruger denne class
http://www.verot.net/php_class_upload.htm

prøv også at læse jakobdo's guide om upload
http://www.eksperten.dk/guide/1200


når upload først virker som du vil have det, kan du tilføje database insert/update
upload delen er klart det sværeste, at tilføje sql er "bare" at læse coden og forstå den, og finde der hvor du har alle data til sql, og alt er gået godt, og lave en insert/update


Er det bare mig som der er blind, eller er der ingen steder hvor vi åbner til databasen??

kig i processupload.php
linje 98 - 102 (linje 96-100 i den code du viser)
/*
// Insert info into database table!
mysql_query("INSERT INTO myImageTable (ImageName, ThumbName, ImgPath)
VALUES ($DestRandImageName, $thumb_DestRandImageName, 'uploads/')");
*/
han laver ikke selve database connection delen, men viser bare hvor man kunne indsætte sql
men der skal du jo bare i toppen af filen includere din Connect.php, så har du en connection
sql'en skal også tilpasses til dit formål





måske du skulle prøve at kigge på denne
http://www.saaraan.com/2012/05/ajax-image-upload-with-progressbar-with-jquery-and-php
der er anvendt AJAX, hvilke giver brugerne en bedre oplevelse, da de kan arbejde vidre med det sammen, og ikke skal vente på serverside.

men ellers er her 3 google forslag
https://www.google.dk/search?q=php+ajax+upload+image
https://www.google.dk/search?q=php+upload+image
https://www.google.dk/search?q=php+upload+image+tutorial



Indlæg senest redigeret d. 15.07.2013 00:07 af Bruger #16075

Hvordan håndtere man at der bliver uploaded flere billeder af samme hest.

dette er en udfordring, hvis der kun må være et billed pr hest, kan du læse istedet fo at skimme "Slette img første / upload nyt billede efter" som jeg linkede til tidligere

Kan man lave noget kode som løber igennem databasen og tjekker hvilke filer i mappen "Billeder" som der er i brug/ findes i databasen - og så sletter alle de billeder som ikke bruges i databasen?

ikke umildbart, men man kan lave en glob, der kigger en hel mappe igennem, og det array ska lså sammenlignes med db
den rigtige måde er når du sletter et billed fra db, også sletter den fysiske fil


Jeg mener den henter Billede og BilledeT (thumbnail) - hvad skal ImgPath bruges til? Er den info ikke i "billede"?
Vil den ikke skrive hele URL i "Billede" og "BilledeT"??

svaret er Nej, Billede og BilledeT indeholder kun filnavnet dvs hest001.jpg og thumbnail_hest001.jpg, så du skal gemme stien i db hvis de er forskællige fra billed til billed, hvis der ens for alle biller, kan du hardcode stien i php


Mht. at få det lagt ind i databasen, så har jeg forsøgt med:

står der det i din sql som du forvendter ?? dvs har alle variabler en værdi

BilledeT=' $th
hvad laver mellemrummet mellem ' og $ ??




linje 17-20
Fold kodeboks ind/udKode 

hvorfor har du udkommenteret din sql ?? så bliver den aldrig udført :)

alt mellem /* og */ er kommentar i PHP prøv at fjerne linje 17 og linje 20


hedder BilledeT altid det sammen som Billede bare med tilføjelse af thunb ?? dvs altid altid samme navn og extension som Billede, så er der ikke nogle grund ti lat gemmen navnet på BilledeT i databasen, den kan du også bare hardcode

ca sådan
$Billede = $row['Billede'];
$BilledeT = "thunb_".$Billede;




Indlæg senest redigeret d. 15.07.2013 18:18 af Bruger #16075
Tak, er ved at læse på den fra første link.

Er det bare mig som der er blind, eller er der ingen steder hvor vi åbner til databasen??
Fold kodeboks ind/udPHP kode 


Og hvor/ hvordan får jeg den til at gemme den det rigtige sted i databasen?
Den skal jo gerne gemme billedeURL ved netop den hest (hid) som jeg opdatere...



Jeg har nu lavet en testside og fået upload til at virke.
Så er der lidt jeg overvejer inden jeg begynder at flette den ind på min side.

Hvordan håndtere man at der bliver uploaded flere billeder af samme hest.
Jeg mener hvis man uploader billede 001 til en hest. En måned senere vil man skifte billedet ud og uploader billede 002 osv.
Kan man lave noget kode som løber igennem databasen og tjekker hvilke filer i mappen "Billeder" som der er i brug/ findes i databasen - og så sletter alle de billeder som ikke bruges i databasen?

Eller hvordan vedligeholder man det bedst?

Mht. at få det lagt ind i databasen, så har jeg forsøgt med:
Fold kodeboks ind/udPHP kode 


Men det virker ikke.
Men er der ikke også et felt for meget?
Jeg mener den henter Billede og BilledeT (thumbnail) - hvad skal ImgPath bruges til? Er den info ikke i "billede"?
Vil den ikke skrive hele URL i "Billede" og "BilledeT"??

Har også forsøgt med denne uden held:
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 15.07.2013 12:59 af Bruger #17644
Jeg synes der står det der skal stå, og den viser jo fint billedet jeg har uploadet.

Fold kodeboks ind/udPHP kode 


Nu tænker jeg så om jeg skal læse det som om at man kun kan gøre det ene eller det andet?:

"At this point we have succesfully resized and created thumbnail image
We can render image to user's browser or store information in the database
For demo, we are going to output results on browser."

Så begge muligheder er vist, men den ene er "slået fra"?
Hvor ser jeg det? og hvordan skifter jeg i så fald til den anden?



BilledeT har jeg faktisk kun lavet fordi den var med i den guide jeg har brugt. Men ja den laver det samme navn bare med thumb foran.

Jeg tænkte godt om det var det med /* så det har jeg forsøgt at fjerne - men så får jeg bare en blank side og ingen fejlmeldinger så aner ikke hvori fejlen er....



hvad står der i din index.php
dette ??
<form action="upload.php" method="post" enctype="multipart/form-data" id="UploadForm">

hvis der står det får du en fejl: filen findes ikke :) den hedder processupload.php

så der skal stå
<form action="processupload.php" method="post" enctype="multipart/form-data" id="UploadForm">

hvis du aflæser din hid med GET, hvilke der står i din SQL, skal din hid med som parameter i ovenstående linje
<form action="processupload.php?hid=2" method="post" enctype="multipart/form-data" id="UploadForm">

jeg vil dog anbefale du aflæser den med POST, som alt det andet, det kræver bare du i din form har et shjult input felt

jeg har taget deres eks ned og rettet lidt til og lagt det her
http://udvikleren.olsensweb.dk/40104/ajax-upload-with-progressbar_new.zip




I min index står der:
Fold kodeboks ind/udPHP kode 


Jeg har bare lige lavet hid her midlertidigt mens jeg bare tester. Det skal selvfølgelig rettes. Men vil da lige overveje om den skal hentes med POST istedet.

Vil lige kigge på dit eksempel...

Update:
Har nu prøvet ud fra dit eksempel at skrive:
Fold kodeboks ind/udPHP kode 

Det giver en helt blank side - skriver ingen fejl.
Den uploader ikke billedet og skriver det ikke i databasen.

(før uploadede det billedet som det skulle, men skrev ikke noget i databasen).

Update igen:

Nu har jeg skrevet:
Fold kodeboks ind/udPHP kode 


Og så uploader den fint billedet, men skriver denne fejl:
Other Post Variables:Array
(
)

UPDATE Databasen SET Billede='billeder/photo_mg_4982-564.jpg' WHERE hid = ''Der er sket en fejl. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)



Indlæg senest redigeret d. 16.07.2013 12:26 af Bruger #17644
<< < 123 > >>
t