26. april 2002 - 13:29Der er
33 kommentarer og 1 løsning
Upload billede til MySQL
Jeg har forsøgt at læse de lignende tidligere stillede spørgsmål igennem, men da de ikke helt passer på mig og jeg er ret ny kan jeg finde hoved eller hale i det, så jeg håber en kan lave et forholdsvis komplet system.
Jeg skal have en simpel form, men et indput felt, en gennemse knap (skal virker 100%) og en "upload billede" knap. Billedet skal så puttes ind i en database (som jeg har kontakt til), i en tabel "Person" og i attributten "billede". Jeg tror denne attribut skal være en blob???? Har jeg ret?? Jeg er egentlig ligeglad med hvilken type billedet har, det skal bare have en max størrelse på fx 30 kb. Det skal med i formen.
Formen og php-koden der indsætter billedet i MySQL skal være i samme fil!
Jeg er i tvivl om det er det rigtige at gemme billedet i databasen eller om bare skulle tage at gemme det på web-serveren.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
hvis "folket" med det er det nemmeste at opbevare billeder på filsystemet, så laver vi opgaven om det, med alt hvad det indebærer. F.eks. at lave reference fra databasen til det rigtige billede og hvilke problemstillinger der eller ligger i det.
umiddelbart synes jeg det vil være mest styr på billederne i en database, så med mindre der er overvæld af argumenter mod dette, foretrækker jeg database
Jeg tror sådan set bare folk mener det med billleder på filer, fordi de ikke kan finde ud af det andet. Jeg har aldrig set et fornuftigt argument for ikke bare at putte det i databasen (ud over at det kan være en smule dyrere at hente ud...)
er det nødvendigt med filtype, width og height?? Hvis jeg som betingeler til folk siger at det skal være en bestemt højde og bredde eller vil det blive strukket ud.
er det ét billede pr indlæg, så smæk dem bare i samme tabel. Ja, du kan li'så godt have de 3 felter - de bliver udfyldt automatisk. Nå, hvor er min indtastningsform....
uploadscript.php indeholder så ca dette - du har flere felter formentlig..
<?php
mysql_connect("blabla","blabal","blabla") or die("Ingen forbindelse"); mysql_select_db("bopbopbop") or die("Ingen database");
$filename=$_FILES['billede']['tmp_name'];
print "$filename<br>";
if (is_uploaded_file($filename)) { $data = addslashes(fread(fopen($filename,"r"),filesize($filename))); $a=getimagesize($filename); $width=$a[0]; $height=$a[1]; $type=addslashes($_FILES['billede']['type']);
mysql_query("INSERT INTO billeder (beskrivelse,billede,width,height,filetype) values ('Et billede','$data','$width','$height','$type')") or die(mysql_error());
Nu får billedet så en id. Så vi skal trække billede ud med en
<img src="getbillede.php?id=2">
f.x. Lad os derfor starte med getbillede.php
<? mysql_connect("blabla","blabla","blabla") or die("Ingen forbindelse"); mysql_select_db("opbopbop") or die("Ingen database");
$code=addslashes($_GET['id]);
$result=@mysql_query("select billede,filetype from billeder where code='$code'"); $billede=@mysql_result($result,0,"billede"); $type =@mysql_result($result,0,"filetype");
Hvordan finder vi så id, osv. Jo, det kan du gøre sådan ca. som her, hvor du også sætter størrelse på billedet. Det skal der jo være i hvert eneste <img>-tag
$res=mysql_query("select code,width,height from billeder") or die(mysql_error()); while ($row=mysql_fetch_array($res)) { print "<img src=\"getbillede.php?id=$row[id]\" width=\"$row[width]\" height=\"$row[height]\">"; } mysql_free_result($res);
det virker sikkert, når jeg lige prøver nok, men der er et par små ting jeg ikke forstår: "print" - hedder det det i php? ("select billede,filetype from billeder where code='$code'") - du har da ikke lavet en sttribut der hedder "code" "addslashes" - hvad gør den?
Og som én skrev, hvad med den dejlige gennemseknap? Lav et svar, så skal du have de velfortjente point
Du skal vide at på den server jeg bruger, er min global_register=off, som du jo ved vil sige at jeg skal bruge HTTP_POST_VARS og alle de andre, når jeg skal skal sende variable rundt mellem mine sider. Det skal jeg vel også bruge her
glem det, nu begynder det at virke. I starten skal det være $filename=$HTTP_POST_FILES['billede']['tmp_name']; istedet for $filename=$_FILES['billede']['tmp_name'];
Nu virker det næsten. Dog kunne jeg godt tænke mig at slå det hele sammen til én fil. Dvs. jeg gerne lige nu vil have getbillede.php over på den samme side som der hvor billedet sættes ind. Jeg forsøgt følgende:
Her kommer billedet
<? $res=mysql_query("select billede,width,height,personnr from Person Where personnr='10'") or die(mysql_error()); while ($row=mysql_fetch_array($res)) { print "<img src=\"$row[billede]\" width=\"$row[width]\" height=\"$row[height]\">"; } mysql_free_result($res); ?>
men som du sikkert hurtig kan se, så virker dette ikke. Fordi den opfatter billedet som binærer tal eller sådan noget. I getbillede.php laver du noget med en header, content og så siger du print billede. Kan man ikke modificere min så det kan stå i én
Nu virker den næsten. Men jeg har et uforklarligt problem. Når jeg uploader et billede der fylder fx 16 kb, så kan jeg se i mit administrationsprogram til databasen at størrelsen af hele tabellen kun forøges med 1,2 kb. Og det hænger også sammen med at når jeg får vist billedet, så viser den kun ca den øverst 1/10 af billedet.
Jeg synes da jeg sad og prøvede forskellige ting at den ikke ville lægge noget jpg ind i databasen. Kan det være rigtig er var det bare mig??
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.