Simpelt fotoalbum med billedupload

Tags:    php
Skrevet af Bruger #285 @ 29.04.2003

Introduktion


For at bruge dette system, skal der være PHP (med GD-Lib) og MySQL på serveren.

Denne artikel vil handle om, hvordan man lavet et billedupload-system, hvor billeder bliver lagt op på serveren. Hvis de er for store, så bliver de resizet. Disse thumbnails vil så blive vist på en side, der bliver genereret ud fra nogle data i en tabel (disse data ligger vi ind, når vi uploader billedet). Når man trykker på et thumbnail, bliver det store billede vist i et nyt browser vindue.

Det kan virke meget mærkeligt, at jeg vælger at bruge MySQL database til dette system. Dog har jeg valgt det, da mange sikkert vil vælge at udbygge systemet.

Da min filosofi, når man skal lære noget, er, at det hele ikke skal serveres på et sølvfad, kommer der i denne artikel ikke 15 siders blandet html og php-kode. Der vil selvfølgelig komme noget php-kode, bare rolig…

Well, let the code begin…


Tabellen i databasen


Det, vi skal bruge databasen til, er at lave det automatiske fotoalbum. Der skal være følgende felter i denne tabel (vi kalder fx tabellen ”billeder”):

id (skal være et auto increasing, unik felt af typen int)
billede (skal være et felt, der indeholder navnet på billedet – dvs. et tekst felt)
tid (dette felt skal bruges, så man kan se, hvornår billedet blev uploadet)

Man kan senere udbygge dette system, så der kan komme forskellige kategorier, måske censur, så kun folk, der er logget ind kan se billederne – man kan også lave sådan, at man kan se, hvem der har uploadet billedet osv. En ideel udvidelse ville være, hvis man lavede sådan, at man kunne lave en beskrivelse til hvert billede.


Sider i dette system


I dette system skal vi bruge nogle sider:
billeder.php (her vil der komme en oversigt over de små billeder)
billeder-upload.php (her vil der være en form, hvor man kan vælge det billede, man vil uploade)
billeder-upload-verify.php (denne side sørger for at uploade billedet)


billeder-upload.php


For at uploade et billede skal man bruge en form. Denne form kunne se sådan ud:

Fold kodeboks ind/udKode 
Læg mærke til: enctype="multipart/form-data" i formen!


billeder-upload-verify.php


Denne side sørger for at uploade det valgte billede. Når man har valgt et billede på siden billeder-upload.php og trykker på knappen, bliver man sendt til denne side. Det valgte billede bliver samtidig lagt ind i en midlertidig mappe på serveren (her bliver den midlertidige fil slettet, når scriptet er færdig med at køre). Det, denne side skal sørge for, er altså at flytte den midlertidige fil over i et bibliotek i dine biblioteker. Når man skal det, så skal man have ændret rettighederne på den mappe, som man flytter billederne over i. Dette gøres nemmeste med et FTP-program. Rettighederne på mappen, hvor man vil flytte billederne over i, skal være 777!

Som sagt skulle billedet resizes, hvis det var for stort. Xyborx har lavet en funktion, der kan gøre det. Den hedder ”mageresize”, og kan findes på http://www.xyborx.dk/image.php Der kan dog være et par funktioner, der ikke virker – det kommer an på sin version af det installerede GD-Lib. Det drejer sig om (du kan evt. bruge denne funktion til at checke det med: http://www.php.net/manual/en/function.function-exists.php):
imagecreatetruecolor (brug i stedet imagecreate – men kun, hvis der er problemer)
imagecopyresampled (brug i stedet imagecopyresized – men kun, hvis der er problemer)

Når vi som sagt har valgt et billede på forrige side, og kommer til denne side, så er der nogle variabler:
Billedets originale navn: $_FILES["fil"]["name"]
Den midlertidige fils navn på serveren: $_FILES["fil"]["tmp_name"]
Filens størrelse i bytes $_FILES["fil"]["size"] (kan bruges, hvis det billede man uploader fx maks må fylde 100 kB).

Selve koden til filen (her skal der ikke være nogle HTML-koder i – overhovedet!):
Fold kodeboks ind/udKode 


billeder.php


Dette er nok den nemmeste side. Den skal laves lige som alt muligt andet – fx tagwall. Vi skal hente nogle informationer fra en database, og derefter vise dem:

Fold kodeboks ind/udKode 


Afsluttende bemærkning


Princippet med at uploade andre filer er akkurat magen til dette. Jeg har lavet dette skelet på denne måde, så man nemt kan udvide det med fx billedbeskrivelse.

Der kan tit være mange problemer i forbindelse med at uploade filer. En stor del af disse problemer er, at rettighederne på det bibliotek, man prøver at uploade til ikke er sat rigtigt. De skal være 777!

Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (55)

User
Bruger #285 @ 30.04.03 10:39
Skriv endelig nogle kommentarer - ris, ros og/eller rettelser...
User
Bruger #285 @ 30.04.03 12:49
Har set, at der nogle steder er sådanne tegn:
” - det skal være " (anførselstegn)!
User
Bruger #2330 @ 01.05.03 14:55
Doesn't work...
User
Bruger #285 @ 01.05.03 15:34
Hvordan virker det ikke? Melder et fejl?
User
Bruger #2330 @ 01.05.03 18:00
Billeder.php melder fejl i linje 12, Parse Error
User
Bruger #285 @ 01.05.03 21:34
Kan ikke se nogle fejl... Har du udskiftet ” med " ?
User
Bruger #2330 @ 03.05.03 11:36
Jep
User
Bruger #3344 @ 08.05.03 18:44
hmm pga. 1 er bare forde skal lige skrive en komentar men... kan du ikke rette den guide?
User
Bruger #2737 @ 10.05.03 00:45
Så fik jeg endelig min server op igen (sry for nedetiden). Jeg har rettet en del i image.php så den nu bla. selv finder ud af det med imagecreatetruecolor/imagecreate samt imagecopyresampled/imagecopyresize.

Og så vil jeg da lige sige tak for at nogen benytter mit script :D Det er altid en fornøjelse at se at andre kan bruge det man udgiver ;)

(btw.. mit nick er med stort X både først og sidst ;P)
User
Bruger #4019 @ 02.06.03 16:34
Jeg er absolut ikke en kodehaj, men er på udkig efter denne funktionalitet...

Har kigget på http://gallery.menalto.com/ men kan ikke få det til at virke, bla.a. fordi jeg ikke kan slå safe-mode fra hos min udbyder !!!

Mvh
ThujaKing
User
Bruger #4019 @ 02.06.03 16:35
Glemte jo lige mit spørgsmål...

Hvordan får jeg et gallery op og køre når jeg ikke har en s... forstand på at kode ???

Mvh
ThujaKing
User
Bruger #285 @ 02.06.03 17:42
Start med at lave noget mindre indtil du lærer det. "Man skal kunne kravle før man kan gå..."
User
Bruger #4071 @ 12.06.03 18:32
hvorfor virker mit ikke? http://www.sunestefani.dk/photo/billeder.php

hilsen sune
User
Bruger #4227 @ 19.07.03 14:19
Jeg får samme fejl meddelse som sune, hvad er der galt her?
User
Bruger #3884 @ 23.07.03 12:36
bruger i copy'n paste ?
User
Bruger #4017 @ 19.08.03 15:07
skod lort, prøv at lave noget som også virker?
User
Bruger #285 @ 25.08.03 14:42
Husk at ” skal være " (anførselstegn)!
User
Bruger #4039 @ 03.10.03 19:41
god artikkel men xyborx siden er nede.. skal man ikke bruge de funktioner?
User
Bruger #4039 @ 19.10.03 20:36
bare lige en kommentar til sune og Martin. Har i sat <? ?> udenom koderne for det ser lidt ud som om de mangler
User
Bruger #2737 @ 25.10.03 22:30
Jeg er ked at min server har været nede i noget tid, og den vil ikke køre særligt stabilt foreløbigt.
www.xyborx.dk/image.php skulle dog virke nu. Hvis nogen har mulighed for at lægge det op på en mere stabil server, skal I være velkomne.
NB: Ustabiliteten skyldes ikke en dårlig server/forbindelse, men at jeg skal spare på strømmen. Serveren er derfor lukket om natten og formiddagen, når jeg ikke selv bruger den.
User
Bruger #4482 @ 26.10.03 11:45
Jeg Kan ikke få det til at virke den skiver at der er en "unexpected T_VARIABLE" i linje 74. Min linje 74 ser således ud "$fra = $_FILES['fil']['tmp_name'];"
Nogle der kan sige mig hvad fejlen er???
User
Bruger #285 @ 23.12.03 18:31
/*************************************************************\\
* Image resizer, version 2.0 - Mar9,2003 *
* Returns true on success, false if there are errors *
* If destination file is specified, resized picture will be *
* saved with the specified name. Else, it is shown to browser *
* Version 2: Now scales both up and down, still preserving *
* aspect ratio, and it accepts not only jpeg, but *
* also png and possibly bmp *
}*************************************************************{
* Created by XyborX (www.xyborx.dk) *
* Feel free to use, modify and distribute, without profit. *
* I cannot be held liable for any damage this script might do *
\\*************************************************************/
function imageresize($sourcefile,$maxwidth,$maxheight,$destinationfile=false)
{
$types=Array();
$types[1]='gif';
$types[2]='jpeg';
$types[3]='png';
$types[6]='wbmp';
list($width,$height,$type)=getimagesize($sourcefile);
$type_name=$types[$type];
$imagecreatefromtype='imagecreatefrom'.$type_name;
$imagetype='image'.$type_name;
if(!function_exists($imagecreatefromtype) || !function_exists($imagetype))
{
return false;
}
if($img_src=$imagecreatefromtype($sourcefile))
{
$ratio_height=$maxheight/$height;
$ratio_width=$maxwidth/$width;
$ratio=min($ratio_width,$ratio_height);
$newwidth=$width*$ratio;
$newheight=$height*$ratio;
// $img_dst=imagecreatetruecolor($newwidth,$newheight);
$img_dst=imagecreate($newwidth,$newheight);

// imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
if($destinationfile==false)
{
//header("Content-type: image/jpeg");
$imagetype($img_dst);
}
else
$imagetype($img_dst,$destinationfile);
imagedestroy($img_dst);
return true;
}
else
{
return false;
}
}
User
Bruger #285 @ 23.12.03 18:32
Det er den funktion, jeg har brugt :) Der findes sikkert en nyere, men jeg blev gjort opmærksom på, af Martin Slot, at den angivne URL returnerede 404, så derfor poster jeg nu på hans opfordring denne funktion, som sagt, lavet af XyborX :)

Tak for det, Martin :)
User
Bruger #5497 @ 25.03.04 21:59
Jeg prøver at lave en tabel i min mysql data base med denne her: CREATE TABLE `billeder` (

`id` INT NOT NULL AUTO_INCREMENT,
`billed` TEXT NOT NULL ,
`tid` VARCHAR NOT NULL ,
UNIQUE (
`id`
)
)

Men jeg får bare:

MySQL said:


You have an error in your SQL syntax near 'NOT NULL, UNIQUE (`id`))' at line 1

tilbage i nakken!? hvad er der galt?
User
Bruger #5426 @ 15.04.04 20:50
jeg får følgende fejl:
Parse error: parse error, expecting `','' or `';'' in /customers/bjerglundpedersen.dk/bjerglundpedersen.dk/httpd.www/emil/galleri/billeder.php on line 25


og linje 25 er:

<a href="" . $destinationLarge . $billede . "">

hvad er der galt???

User
Bruger #5282 @ 05.06.04 00:22
Jeg har et problem. Den kan ikke finde ud af at resize når det er et .gif billede.

Der dukker ikke noget op i mappen. Det fungerer fint når det er .jpg eller .jpeg!
Hjælp please!

PS: Du lægger ud med at sige at du ikke bare vil give en masse kode som vi bare kan copy/paste, men det er lige netop det du gør.
Desuden er artiklen ekstremt dårligt forklaret på området hvor man skal kæde din kode og XyborXs kode sammen. Det ødelægger faktisk det hele. Jeg måtte rette en helvedes tid i den før den bare gad at tage .jpg billeder!
User
Bruger #5800 @ 25.06.04 01:40
nøøj, hvor folk kan brokke sig, er jeg virkelig den eneste php-noob som fik det til at virker i først forsøg, (uden xyborxs kode) :-)

Rigtigt god artikel, der manglede bare et link til download GD-lib 2.
User
Bruger #2597 @ 13.07.04 01:51
Så fik jeg det til at virke, det tog lang tid, fordi der er nogle fejl, men jeg syndes at det er en dårlig kvalitet de små billeder er.

kan ses her www.skovsbyggeforretning.dk/index.php?link=billeder
User
Bruger #2597 @ 13.07.04 01:53
Så fik jeg det til at virke, det tog lang tid, fordi der er nogle fejl, men jeg syndes at det er en dårlig kvalitet de små billeder er.

kan ses her www.skovsbyggeforretning.dk/index.php?link=billeder
User
Bruger #3884 @ 03.10.04 12:36
//Her ligges oplysningerne ind databasen – huske at connecte til den!
$query = "INSERT INTO billeder (billede, tid) VALUES ('$billede', '$tid')";
mysql_query($query);
}
Hvor kommer variablen $billede ind i koden ?
kan ikke finde den variable i billeder-upload-verify, ud over i billeder.php
User
Bruger #5947 @ 20.01.05 07:07
Jeg kan heller ikke se hvor variablen $billede bliver sat? Lige pludselig bliver den bare smidt ind i MySQL'en, uden at den er blevet defineret?
User
Bruger #7308 @ 05.03.05 07:28
Grunden til at der står unexpected } er fordi personen der lavede artiklen har sjusket lidt :P Der skal være ; efter forskellige steder. Kan heller ikke få mit til at virke helt *-)
User
Bruger #7308 @ 05.03.05 09:10
Grunden til at der står unexpected } er fordi personen der lavede artiklen har sjusket lidt :P Der skal være ; efter forskellige steder. Kan heller ikke få mit til at virke helt *-)
User
Bruger #5733 @ 03.04.05 17:20
Hejsa jeg synes at folk skulle lade være med at brokke sig sådan....NÅ !!!!

Jeg har et enkelt spørgsmål.

Når serveren forsøger at køre billeder-upload-veryfy.php så kommer der en Fatal error på linie 26 som siger :Call to undefined function: imageresize() hvordan kan det nu være ?? og hvad skal jeg gøre for at afhjælpe dette.

vh Cruiser79
User
Bruger #5733 @ 03.04.05 17:29
fandt lige ud af hvad imageresize er :-) men hvordan bruger jeg den skal der laves en fil ekstra eller skal koden lægges ind i billeder-upload-verify.php ??

vh Cruiser79
User
Bruger #5733 @ 03.04.05 17:53
fandt lige ud af hvad imageresize er :-) men hvordan bruger jeg den skal der laves en fil ekstra eller skal koden lægges ind i billeder-upload-verify.php ??

vh Cruiser79
User
Bruger #5733 @ 03.04.05 18:09
fandt lige ud af hvad imageresize er :-) men hvordan bruger jeg den skal der laves en fil ekstra eller skal koden lægges ind i billeder-upload-verify.php ??

vh Cruiser79
User
Bruger #7479 @ 06.04.05 17:12
Jeg har lavet en upload funktion, men den virker ikke :'(

Hvad gør jeg forkert :
http://luuhls.frac.dk/Profil/Test%20af%20upload/billeder-upload.php
User
Bruger #6336 @ 10.05.05 09:03
I har ret i der måske er lidt fejl her og dér, men hvis i nu stillede konkrete spørgsmål, og SELV skrev koden i stedet for copy paste, så havde i ikke fået de syntax fejl!
5 Herfra.. har hjulpet mig meget!
User
Bruger #6336 @ 10.05.05 18:31
CREATE TABLE `billeder` (
`id` INT( 3 ) NOT NULL AUTO_INCREMENT ,
`billede` TEXT NOT NULL ,
`tid` VARCHAR( 10 ) NOT NULL ,
UNIQUE (
`id`
)
);

virker for mig
User
Bruger #6336 @ 10.05.05 19:30
$fra = $_FILES['fil']['tmp_name'];

Øhm, hvor kommer $_FILES['fil']['tmp_name'] fra?????
User
Bruger #6336 @ 11.05.05 13:51
Fik det til at virke.. ;)
Er allerede igang med at udbygge det!
User
Bruger #7308 @ 26.06.05 08:43
Hvorfor er de små billeder i så dårlig en kvalitet? Det er dog ringe...
User
Bruger #7500 @ 11.10.05 16:52
Hej og tak.

Ny kan jeg endeligt oploade filer til min ftp: der var nu en del fejl men det gør det jo også lidt spændende.
User
Bruger #2477 @ 16.10.05 14:03
Hej....

JEg har prøvet at lagt scripte på min egen server, men de lave ikke det lille billede..
Og script virker på mit surftown hotel..

Skal jeg installer noget eller er det bare en ting jeg skal til i apache eller php?
User
Bruger #2477 @ 16.10.05 14:36
Hej....

JEg har prøvet at lagt scripte på min egen server, men de lave ikke det lille billede..
Og script virker på mit surftown hotel..

Skal jeg installer noget eller er det bare en ting jeg skal til i apache eller php?
User
Bruger #7326 @ 06.02.06 13:49
Jeg får disse fejl :/

Warning: move_uploaded_file(../upload/billeder/large/1139230101_569245jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in c:\\wamp\\www\\billeder\\billeder-upload-verify.php on line 21

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'c:/wamp/tmp\\phpCB7.tmp' to '../upload/billeder/large/1139230101_569245jpg' in c:\\wamp\\www\\billeder\\billeder-upload-verify.php on line 21

Warning: getimagesize(../upload/billeder/large/1139230101_569245jpg) [function.getimagesize]: failed to open stream: No such file or directory in c:\\wamp\\www\\billeder\\config.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at c:\\wamp\\www\\billeder\\billeder-upload-verify.php:21) in c:\\wamp\\www\\billeder\\billeder-upload-verify.php on line 34
User
Bruger #7326 @ 06.02.06 13:53
glem lige mit indlæg lidt, glemte at lave mapperne :o
User
Bruger #10006 @ 08.07.06 14:14
Kan ikke få det til at virke :(
User
Bruger #7326 @ 15.08.06 03:24
Jeg har fået det til at virke og synes dette er en god artiktel

og jeg vil forslå at man bruger

$img_dst=imagecreatetruecolor($newwidth,$newheight);
// $img_dst=imagecreate($newwidth,$newheight);

i stedet for

// $img_dst=imagecreatetruecolor($newwidth,$newheight);
$img_dst=imagecreate($newwidth,$newheight);

i imageresize functionen da tumbsne bliver MEGET pænere ved det
User
Bruger #8468 @ 20.09.06 14:04
hgnghnhgn:lol::lol::lol::lol:;);):D;):bounce::bounce::bounce::bounce::bounce::bounce:
User
Bruger #11524 @ 27.10.07 23:04
god artikel.. dog med rimelige væsenlige mangler/fejl
User
Bruger #11220 @ 25.01.08 21:49
hvorfor får jeg fejlen Fatal error: Function name must be a string in /customers/wizzo.dk/wizzo.dk/httpd.www/upload/billeder-upload-verify.php on line 29 ?
User
Bruger #14369 @ 12.11.08 09:53
Jeg får også følgende fejl:

Fatal error: Call to undefined function: imageresize() in /hsphere/local/home/viggosmo/soederberg-webdesign.dk/testIdesign/billeder-upload-verify.php on line 26

Ved ikke hvorfor?
User
Bruger #14369 @ 12.11.08 10:03
Jeg får også følgende fejl:

Fatal error: Call to undefined function: imageresize() in /hsphere/local/home/viggosmo/soederberg-webdesign.dk/testIdesign/billeder-upload-verify.php on line 26

Ved ikke hvorfor?
Du skal være logget ind for at skrive en kommentar.
t