/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Lægge et billede i en database...
Fra : Rander


Dato : 23-06-07 00:57


Jeg fatter ikke en brik af det her...

Jeg har en tabel i mysql med to felter - et ID-felt og et image-felt af
typen BLOB.

I min php har jeg en variabel $image, og hvis jeg laver en

imagegif ($image, "file.gif");

får jeg en fin gif-fil på lige knap 6.000 bytes. Men hvordan fa... får
jeg lige stoppet det i en database i stedet?

Jeg prøver med

$imagetoDB = addslashes ($image);

mysql_query ("INSERT INTO `table` (ID, image) VALUES ('$ID',
'$imagetoDB')") or die (mysql_error ());

Det giver ikke en fejl, men det sætter kun 14 bytes ind i image-feltet.

Så at se om det var noget i min kode eller mysql-opsætningen prøvede jeg
så for sjov med

$handle = fopen ("file.gif", "r");
$imagetoDB = addslashes (fread ($handle, filesize ($image));
fclose ($handle);
      
mysql_query ("INSERT INTO `table` (ID, image) VALUES ('$ID',
'$imagetoDB')") or die (mysql_error ());

og det virker fint - den sætter det hele ind! Så hvad er det lige der
går galt med at prøve at smide den direkte ind?

--
Lars Rander ** Pil ikke ved min adresse ** :(){ :&:& };:
http://rander.dk
Hvis zebraerne løb den modsatte vej, ville løverne blive trampet ihjel.
(Mikal Rode)

 
 
Peter Brodersen (23-06-2007)
Kommentar
Fra : Peter Brodersen


Dato : 23-06-07 02:54

On Sat, 23 Jun 2007 01:56:31 +0200, Rander <ldNOSPAM@rander.dk> wrote:

>I min php har jeg en variabel $image, og hvis jeg laver en
>
>imagegif ($image, "file.gif");
>
>får jeg en fin gif-fil på lige knap 6.000 bytes. Men hvordan fa... får
>jeg lige stoppet det i en database i stedet?
>
>Jeg prøver med
>
>$imagetoDB = addslashes ($image);

Du kan prøve at printe din variabel $image. Sandsynligvis indeholder
den i den kontekst blot tekststrengen "Resource id #4" eller et
lignende nummer - det passer i hvert fald med de 14 tegn.

$image er en PHP-ressource for den aktuelle afvikling af dit script og
altså ikke den binære billedefil. Det er heller ikke en ressource, du
kan gemme i en database og så hive frem igen i en anden afvikling.

imagegif() kan outputte til en fil eller direkte. Hvis du vil fange
outputtet til en variabel, kan du lege med output buffers - fx noget i
stil med:

ob_start();
imagegif($image);
$imagedata = ob_get_contents();
$imagetoDB = mysql_real_escape_string($image);
mysql_query ("INSERT INTO `table` (ID, image) VALUES ('$ID',
'$imagetoDB')") or die (mysql_error ());

--
- Peter Brodersen
Kendt fra Internet

Rander (23-06-2007)
Kommentar
Fra : Rander


Dato : 23-06-07 11:51

Peter Brodersen skrev noget i denne stil, den 23-06-2007 03:53:
>> $imagetoDB = addslashes ($image);
> Du kan prøve at printe din variabel $image. Sandsynligvis indeholder
> den i den kontekst blot tekststrengen "Resource id #4" eller et
> lignende nummer - det passer i hvert fald med de 14 tegn.

Lige præcis! Den snød mig så også, for da den skrev det troede jeg at
$image blev returneret som et array, men print_r havde heller ikke den
store effekt...

[...]

> ob_start();
> imagegif($image);
> $imagedata = ob_get_contents();
> $imagetoDB = mysql_real_escape_string($image);
> mysql_query ("INSERT INTO `table` (ID, image) VALUES ('$ID',
> '$imagetoDB')") or die (mysql_error ());

Og DET er noget der virker! Mange tak!

--
Lars Rander ** Pil ikke ved min adresse ** :(){ :&:& };:
http://rander.dk
Sex er arveligt. Hvis ens forældre ikke havde det, er det sandsynligt,
man heller ikke selv får det. (Joseph Fischer)

Martin (23-06-2007)
Kommentar
Fra : Martin


Dato : 23-06-07 14:41

Peter Brodersen wrote:
> ob_start();
> imagegif($image);
> $imagedata = ob_get_contents();

Husk lige at lukke ob igen :)

ob_start();
imagegif($image);
$imagedata = ob_get_flush();

Eller

ob_start();
imagegif($image);
$imagedata = ob_get_contents();
ob_end_flush();

Ellers bliver alt andet output også buffed :)




> $imagetoDB = mysql_real_escape_string($image);
> mysql_query ("INSERT INTO `table` (ID, image) VALUES ('$ID',
> '$imagetoDB')") or die (mysql_error ());
>

Peter Brodersen (23-06-2007)
Kommentar
Fra : Peter Brodersen


Dato : 23-06-07 14:49

On Sat, 23 Jun 2007 15:41:29 +0200, Martin <news@natten-i.dk> wrote:

>> $imagedata = ob_get_contents();
>
>Husk lige at lukke ob igen :)
>
>ob_start();
>imagegif($image);
>$imagedata = ob_get_flush();

Du har fuldstændigt ret. Det var faktisk netop ob_get_flush(), jeg
ville have henvist til... men det er selvfølgelig let nok at påstå
bagefter :)

--
- Peter Brodersen
Kendt fra Internet

Martin (23-06-2007)
Kommentar
Fra : Martin


Dato : 23-06-07 14:52

Peter Brodersen wrote:
> Du har fuldstændigt ret. Det var faktisk netop ob_get_flush(), jeg
> ville have henvist til... men det er selvfølgelig let nok at påstå
> bagefter :)
>

Tror på dig Peter :)

Rander (24-06-2007)
Kommentar
Fra : Rander


Dato : 24-06-07 01:37

Martin skrev noget i denne stil, den 23-06-2007 15:41:
> Peter Brodersen wrote:
>> ob_start();
>> imagegif($image);
>> $imagedata = ob_get_contents();
> Husk lige at lukke ob igen :)
[...]
> ob_end_flush();
> Ellers bliver alt andet output også buffed :)

Jeg brugte nu
ob_end_clean ();
da den ellers outputtede filindholdet binært til browseren - ikke pænt!

--
Lars Rander ** Pil ikke ved min adresse ** :(){ :&:& };:
http://rander.dk
Det er ingen kunst at forføre en pige, men en lykke at finde én,
der er værd at forføre. (Kierkegaard)

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste