Avatar billede jd Nybegynder
21. august 2000 - 21:24 Der er 19 kommentarer og
2 løsninger

billeder i db?

Hejsa,

Er det ikke noget med at man kan gemme et billede direkte i en mysql db? -eller har jeg taget helt fejl?
Hvis ja, hvordan?
Hvis nej, sur røv! :o)

/Jon@z
Avatar billede mpj Nybegynder
21. august 2000 - 21:26 #1
nej... :o))))
Avatar billede jd Nybegynder
21. august 2000 - 21:31 #2
ja, det ved du jo ikke en skid om! :o))

/Jon@z
Avatar billede mpj Nybegynder
21. august 2000 - 21:35 #3
Æv.... Afsløret... *gg*
Avatar billede erikjacobsen Ekspert
21. august 2000 - 21:40 #4
Jo man kan. Lad mig lige finde det link jeg har til en artikel.
Avatar billede erikjacobsen Ekspert
21. august 2000 - 21:46 #5
Hmm, jeg kan ikke komme \"igennem\", men linket er http://www.phpbuilder.com/columns/florian19991014.php3
og hemmeligheden er at gemme billedet i en LONGBLOB.
Avatar billede bromer Nybegynder
21. august 2000 - 23:42 #6
Hmm, mener at jeg har et stykke kode liggende et eller andet sted....
Avatar billede jd Nybegynder
22. august 2000 - 16:58 #7
erik-> Takker... det er lige hvad jeg søger, men jeg kan ikke helt få det til at funke...
Jeg for fejlen:

Warning: fopen(\"\\\\php2\",\"r\") - Unknown error in d:\\apache\\htdocs\\web\\diverse\\billede_db\\store.php3 on line 23

Warning: Unable to find file identifier 0 in d:\\apache\\htdocs\\web\\diverse\\billede_db\\store.php3 on line 23

Og på linie 23 står der:

$data = addslashes(fread(fopen($form_data, \"r\"), filesize($form_data)));

NB: \"form_data\" er navnet på feltet hvor man har valgt filen/billedet!

Den gemmer alt undtagen selve billedet... -hvilket vel er billed-koden..

bromer-> det vil jeg da meget gerne se..!?

/Jon@z
Avatar billede erikjacobsen Ekspert
22. august 2000 - 22:05 #8
Det kan sagtens være noget med hvordan du har opsat din php3.ini - deri kan man skrive
hvilket katalog der skal være det temporære upload katalog. Kører du NT+ kan apache ikke
nødvendigvis skrive i roden....  Altså: koden er såmænd sikkert god nok, men apache/php har
forsøgt at skrive den uploadede fil i et katalog, hvor den ikke har lov. Men det er kuns en teori.
Avatar billede jd Nybegynder
23. august 2000 - 17:03 #9
erik-> ok... meget muligt! :o)
jeg har nu smidt det op på mit webhotel, og her gemmer den det fint! -men det virker stadig ikke helt, da den ikke kan vise billedet! :o(

Se http://delfs.dk/test/billede_db/getdata.php3 og evt. http://delfs.dk/test/billede_db/store.php3

Koden til getdata.php3 ser således ud:

if($id){

@MYSQL_CONNECT(\"******\",\"***\",\"****\");

    @mysql_select_db(\"********\");

    $query = \"select bin_data,filetype from binary_data where id=$id\";
    $result = @MYSQL_QUERY($query);
   
    $data = @MYSQL_RESULT($result,0,\"bin_data\");
    $type = @MYSQL_RESULT($result,0,\"filetype\");

    Header(\"Content-type: $type\");
    echo $data;
    echo \"<img src=\\\"getdata.php3?id=$id\\\">\";
    };

/Jon@z
Avatar billede erikjacobsen Ekspert
23. august 2000 - 20:17 #10
Hmm, hvad laver    echo \"<img src=\\\"getdata.php3?id=$id\\\">\";    ?? Har du et link så
jeg kan se hvad den rent faktisk leverer? Brug gerne min email - men kun et link til
et anstændigt billede ;-)
Avatar billede erikjacobsen Ekspert
23. august 2000 - 21:21 #11
Du sendte mig et link, som jeg kiggede på. Der så headeren sådan ud:

HTTP/1.1 200 OK
Date: Wed, 23 Aug 2000 19:16:38 GMT
Server: Apache/1.3.12 (Unix) mod_perl/1.24 PHP/4.0.1pl2
X-Powered-By: PHP/4.0.1pl2
Connection: close
Content-Type:

Dvs. Content-type er tom. På et normalt billede ser den sådan ud (med lidt andre felter også):

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Connection: close
Date: Wed, 23 Aug 2000 19:21:24 GMT
Content-Type: image/jpeg
Accept-Ranges: bytes
Last-Modified: Thu, 27 Jul 2000 21:01:47 GMT
ETag: \"801f97e0df8bf1:a1a\"
Content-Length: 3977


Er du sikker på, der står en filtype som image/jpeg  eller  image/gif  i feltet i databasen
Avatar billede jd Nybegynder
23. august 2000 - 21:24 #12
ja, det har jeg også lige skrevet til dig på mail! :o)

/Jon@z
Avatar billede erikjacobsen Ekspert
23. august 2000 - 21:51 #13
Gider du kigge efter i tabellen binary_data om indholdet er fornuftigt?
Avatar billede jd Nybegynder
24. august 2000 - 09:24 #14
det er det...:
| id | description | bin_data | filename | filesize | filetype |
| 1 | banner | en masse kode | banner250x60.gif | 1297 | image/gif |

/Jon@z
Avatar billede erikjacobsen Ekspert
24. august 2000 - 19:37 #15
Det ser jo ualmindeligt fornuftigt ud. Prøv alligevel at sætte    Header(\"Content-type: image/gif\");
Avatar billede jd Nybegynder
24. august 2000 - 20:37 #16
Hvis jeg sætter content-type til image/gif får jeg bare sådan et rødt kryds... altså som når billedet ikke findes.... :o(
Nogen idéer tilbage?

/Jon@z
Avatar billede erikjacobsen Ekspert
24. august 2000 - 20:42 #17
Nej, det vil jeg ikke påstå jeg har. Jeg kan ikke gennemskue hvad der galt.
Avatar billede jd Nybegynder
24. august 2000 - 20:46 #18
damned... men tak for hjælpen anyway.. du skal nok få del i pointene! -jeg håber bare lige på at der er andre der kan svare, eller har noget liggende...

/Jon@z
Avatar billede jaboo Nybegynder
28. august 2000 - 18:10 #19
formen der sender billedet:

        <FORM ACTION=\"<?=$GLOBALS[\"FileName\"];?>?id=<?=$GLOBALS[\"id\"];?>\" METHOD=\"post\" ENCTYPE=\"multipart/form-data\">
        <INPUT TYPE=\"hidden\" NAME=\"MAX_FILE_SIZE\" VALUE=\"10000\">
        <LI><B>Billede</B><BR>
        <INPUT TYPE=\"file\" NAME=\"userfile\" VALUE=\"\">
        <P>
        <INPUT TYPE=\"submit\" NAME=\"Action2\" VALUE=\"Upload\">
        </FORM>

scriptet der modtager:

<?
    if ($userfile != \"\" && $userfile_size <= 10000) {
        // $userfile        The temporary filename in which the uploaded file was stored on the server machine.
        // $userfile_name    The original name of the file on the sender\'s system.
        // $userfile_size    The size of the uploaded file in bytes.
        // $userfile_type    The mime type of the file if the browser provided this information. An example would be \"image/gif\".
        $fp = fopen($userfile, \"r\", 0);
        while (!feof($fp)) {
            $userfile_src .= fgets($fp, 100000);
        }
        fclose($fp);
        //unlink($userfile);
        $SQL = \"DELETE FROM pictures WHERE productid = \".$id;
        mysql_db_query(db_name, $SQL);
        $SQL = \"INSERT INTO pictures SET productid = \".$id.\", imgsrc = \'\".addslashes($userfile_src).\"\', imgtype = \'\".addslashes($userfile_type).\"\'\";
        mysql_db_query(db_name, $SQL);
    }
?>
Avatar billede doeleman Nybegynder
28. august 2000 - 19:45 #20
Jeg tror du roder lidt rundt i det.
Du kan ikke skrive html efter du har sendt en image-header i din getdata.php3.

Du skal almindeligvis bruge 3 filer. En til upload, en til at vise html (den der kalder billedet) og så en fil til at hente billedet ud af databasen.

Jeg bruger selv følgende:

index.php:
<?php
  mysql_connect($host,$username,$password) or die(\"Unable to connect to SQL server\");
  @mysql_select_db($db) or die(\"Unable to select database\");
  $result = mysql_query(\"SELECT * from Images\") or die(\"Can\'t Perform Query\");
  while($row = mysql_fetch_object($result)) {
      echo \"<IMG SRC=\\\"show.php?PicNum=$row->PicNum\\\">\";
  }
?>

show.php
<?php
  mysql_connect($host,$username,$password) or die(\"Unable to connect to SQL server\");
  @mysql_select_db($db) or die(\"Unable to select database\");
 
$sql = \"SELECT * FROM Images WHERE PicNum=$PicNum\";
$result = mysql_query(\"$sql\") or die(\"Can\'t perform query\");
$row = mysql_fetch_object($result);
Header(\"Content-type: image/jpeg\");
echo $row->Image;
?>

Læs evt. http://www.weberdev.com/ViewArticle.php3/ArticleID=3
Avatar billede jd Nybegynder
29. august 2000 - 20:07 #21
doeleman-> hehe... det ved jeg jo egenligt godt, men jeg var helt på herrens mark, da jeg ikke engang fik sådan et rødt kryds som når et billede ikke findes.... -derfor! :)
-men takket være noget fra \'eriks\' artikel og dit script har jeg nu endelig fået det til at funke! :)

/Jon@z
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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