Avatar billede hanklitvej Nybegynder
27. januar 2006 - 14:18 Der er 28 kommentarer og
1 løsning

Upload billeder til mysql

Hej.

Jeg er igang med at lade mine brugere uploade billeder til deres annoncer på mit site, men jeg kan ikke få det til at fungere som jeg gerne vil.
Billederne skal ind og ligge sammen med annoncerne i samme tabel i min mysql database.

Koden til billederne består hovedsageligt af 2 ting, en simpel form type=file, og så selve koden hvor billedet bliver gemt i databasen, disse 2 ting ligger ikke i samme fil, og det skal de ikke.

Hvis jeg placerer dem i samme fil virker det som det skal, billedet kommer ind i databasen, men grunden jeg skal have dem i en anden fil er at jeg bruger et system hvor alle mine sider som brugerene ser skal være af samme design, så har ikke mulighed for at kontakte mysql derfra.

formen følger med andre informationer som bliver uploaded, men feltet "image" i databasen er tomt.

Nogen som kan hjælpe?
Avatar billede ljm21 Praktikant
27. januar 2006 - 14:20 #1
Du skulle måske vise lidt kode....?
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 14:31 #2
Formen er en normal form,

Koden som uploader er

if(isset($_FILES["image"]["tmp_name"])){
$fra = $_FILES["image"]["tmp_name"];
$til = "temp/" . $_FILES["image"]["name"];
copy($fra, $til);
$file = fopen($til, "r");
$image = fread($file, filesize($til));
$image = addslashes($image);
mysql_query("INSERT INTO `mors_articles` (image) VALUES ('$image')");
closedir($file);
unlink($til);
}
mysql_close();


Jeg har sat en mappe som temp, med 777...

Jeg tror problemet ligger i at $_FILES["image"]["tmp_name"] af en eller anden grund ikke får noget input i filen hvor jeg uploader.
Avatar billede ljm21 Praktikant
27. januar 2006 - 14:34 #3
Har du sat:
enctype='multipart/form-data'
på din form?

Lars
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 14:37 #4
<form method="POST" action="opret_annonce/opret_annonce.php" enctype="multipart/form-data">

Det er starten af formen.
Avatar billede horsmark Nybegynder
27. januar 2006 - 14:58 #5
prøv istedet for copy($fra, $til); -> move_uploaded_file($fra, $til)
Avatar billede horsmark Nybegynder
27. januar 2006 - 14:59 #6
ellers kan du checke hvad der er sendt med sådan her:

var_dump($_FILES)
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 16:03 #7
var_dump($_FILES) giver mig følgende output:

array(1) { ["image"]=> array(5) { ["name"]=> string(6) "01.jpg" ["type"]=> string(11) "image/pjpeg" ["tmp_name"]=> string(28) "/home/virtual/_tmp/php6x7ooB" ["error"]=> int(0) ["size"]=> int(15337) } }


Hvad kan jeg se ud fra det?
Avatar billede cybermike Nybegynder
27. januar 2006 - 17:29 #8
Måden du indsætter data med ser meget rigtigt ud, hvordan henter du dem igen?
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 17:50 #9
Henter dem har ikke noget med problemet at gøre, der kommer intet i databasen.
Avatar billede horsmark Nybegynder
27. januar 2006 - 18:04 #10
mysql_query("INSERT INTO `mors_articles` (image) VALUES ('$image')") or die( mysql_error());

prøv denne
Avatar billede horsmark Nybegynder
27. januar 2006 - 18:05 #11
eller en var_dump($image). Hvis den er null så bliver der intet gemt :-)
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 18:43 #12
mysql_error() gav intet, men var_dump($image) kom med billedets "kode", som er den der skal ind i databasen.
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 18:45 #13
vent, denne gang kom det med i databasen...
undersøger lige hvad det kan skyldes...
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 18:47 #14
nej, der kom ikke noget med i databasen alligevel, så på en forkert række.
Avatar billede horsmark Nybegynder
27. januar 2006 - 18:52 #15
er din billedekollonne i db´en en blob ?
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 19:03 #16
blob?
Avatar billede horsmark Nybegynder
27. januar 2006 - 19:13 #17
øhh ja dvs nu fylder et billede jo forholdsvist uhyggeligt meget så check lige at du har sat kollonnetypen til "blob" eller "longblob".

læs mere her:

http://dev.mysql.com/doc/refman/5.0/en/data-types.html
Avatar billede horsmark Nybegynder
27. januar 2006 - 19:13 #18
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 19:17 #19
Ja, den er "longtext"
Avatar billede horsmark Nybegynder
27. januar 2006 - 19:28 #20
hmm prøv for sjov skyld at ændre den til blob jf nedenstående

"BLOB columns are treated as binary strings (byte strings). TEXT columns are treated as non-binary strings (character strings)."
Avatar billede horsmark Nybegynder
27. januar 2006 - 19:32 #21
foriøvrigt står der også noget mere omkring håndtering af binære filer vs. text filer her:
http://dk.php.net/manual/en/function.fread.php
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 19:33 #22
Warning: copy(): Unable to access in /home/virtual/morsloppen.dk/public_html/opret_annonce/opret_annonce.php on line 75

Warning: unlink(temp/): Is a directory in /home/virtual/morsloppen.dk/public_html/opret_annonce/opret_annonce.php on line 90



----------------------------------------------------------
Har ændret en lille smule, og får nu denne fejl, tallene nedenfor er linietal.
----------------------------------------------------------


72  $fra = $_FILES["image"]["tmp_name"];
73  $til = "temp/" . $_FILES["image"]["name"];
74  copy($fra, $til);
75  $file = fopen($til, "r");
76  $image = fread($file, filesize($til));
77  $image = addslashes($image);
78
79
80
81  mysql_query("INSERT INTO mors_articles
82  (image,article_cat,article_subject,pris,billede,telefon,article_name,article_article,83  article_breaks,article_datestamp)
  values ('$image','$article_cat','$article_subject','$pris','$billede','$telefon','$article_name','$article_article','$article_breaks','".time()."')")or die( mysql_error());
84 
85 
86
87  mysql_close();
88 
89  closedir($file);
90  unlink($til);
Avatar billede horsmark Nybegynder
27. januar 2006 - 19:39 #23
det er fordi du skal bruge move_uploaded_file
http://dk.php.net/manual/en/function.move-uploaded-file.php
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 19:43 #24
det fjernede den ene fejl, nu har jeg kun Warning: unlink(temp/): Is a directory in /home/virtual/morsloppen.dk/public_html/opret_annonce/opret_annonce.php on line 89.

Der er stadig ikke noget i databasen.
Avatar billede horsmark Nybegynder
27. januar 2006 - 20:25 #25
1. check at den rent faktsik uploader filen (udkommenter unlink)
2. hvis ja lav din db kollonne om til longblob
Avatar billede olebole Juniormester
27. januar 2006 - 20:37 #26
<ole>

Hvorfor dog gøre DB'en ekstremt tung og langsom? Lad billederne ligge som filer i en mappe - og gem så sti/navn i et tekst-felt i DB'en. Det performer _voldsomt_ meget bedre ... hvorfor stort set ingen lagrer billeder i DB  :)

/mvh
</bole>
Avatar billede hanklitvej Nybegynder
27. januar 2006 - 21:04 #27
Jeg har billederne i databasen af mine grunde, det er ikke et photo album, der hentes kun enkelte billeder, og så har jeg mere plads i databasen..


Jeg har selv løst problemerne nu, med hjælp fra hvad horsmark har sagt. horsmark post et svar hvis du vil have dine 200 point som tak for hjælpen og tiden :=)
Avatar billede horsmark Nybegynder
28. januar 2006 - 07:05 #28
allrighty her er et svar godt du fik det løst ~ og lyt nu også til olebole :-)
Avatar billede hanklitvej Nybegynder
28. januar 2006 - 12:26 #29
tak for hjælpen alle som har skrevet her :D
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester