Avatar billede Slettet bruger
23. oktober 2007 - 10:15 Der er 41 kommentarer og
1 løsning

Billeder fra MySQL til php side

Hej Eksperter
Jeg sidder og er igang med at lave en lille .php side hvor man kan uploade nogle billeder i en MySWL database, og så skal jeg have min .php side til at gå ind i databasen og hente alle billederne ud, problemet er at jeg bare ikke rigtig ved hvordan og hvorledes det skal gøres :)

Jeg fandt en lille script, som skulle kunne gøre det, men det virker sgu ikke, det ser sådan her ud:

<?php
header("Content-type: image/jpeg");
$id = $_GET['id'];
include('info.php');
$conn = mysql_connect($sqlhost, $sqluser, $sqlpass);
mysql_select_db($sqldb);
$resultat = mysql_query("SELECT * FROM $sqltabel WHERE id = $id");
while ($raekke = mysql_fetch_array($resultat))
{
echo $raekke['billede'];
}
?>

Det er godt nok noget som har været brugt sammen med noglet flash, så ved ikke om det kan være derfor.

Når jeg prøver at kører scriptet, kommer følgende fejlmeddelses:

Warning: Cannot modify header information - headers already sent by (output started at /customers/cphplayers.com/cphplayers.com/httpd.www/have/index.php:9) in /customers/cphplayers.com/cphplayers.com/httpd.www/have/index.php on line 10

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /customers/cphplayers.com/cphplayers.com/httpd.www/have/index.php on line 16

'<?php' tag starter på linje 9 og '?>' slutter på linje 20

Hvis der er nogle som har nogle idéer til hvordan jeg kan få det til at virke må i meget gerne lige smide et svar

Håber det er til at forstå :)
Avatar billede Slettet bruger
23. oktober 2007 - 10:24 #1
Fandt selv ud af første fejl, der udkommenterede jeg bare følgende linje: header("Content-type: image/jpeg");

Men den siger stadig denne fejl: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /customers/cphplayers.com/cphplayers.com/httpd.www/have/index.php on line 16
Avatar billede mcardle Nybegynder
23. oktober 2007 - 10:33 #2
$con = mysql_connect("localhost","Brugernavn(skift)","Kodeord(Skift)");
$db = mysql_select_db("din_db(skift)");

$getPictures = mysql_query("SELECT * FROM din_tabel(skift)") or die(mysql_error());
while($showPictures = mysql_fetch_array($getPictures)){
  echo $showPictures["række_i_db'en(skift)"];
}

mysql_close();

Prøv denne her.
//mcardle
Avatar billede mcardle Nybegynder
23. oktober 2007 - 10:34 #3
Du skal ikke skrive header("Content-type: image/jpeg");
Avatar billede dkfire Nybegynder
23. oktober 2007 - 10:37 #4
Hvad har du før <?php  ?
Du skal have header("Content-type: image/jpeg"); hvis du vil vise dine billeder, hvis de er gemt i mysql databasen. Dog gælder dette script kun hvis du har lagt jpeg billeder i databasen.

Anden fejl skyldes sikkert at din query ikke er kørt rigtigt. Prøv:
$resultat = mysql_query("SELECT * FROM $sqltabel WHERE id = $id") or die(mysql_error());
Avatar billede Slettet bruger
23. oktober 2007 - 11:09 #5
echo $showPictures["række_i_db'en(skift)"]; forstår jeg ikke lige,
"række_i_db'en(skift)" hvad skal jeg skrive der?? skal der stå id eller $id eller hvad?
Avatar billede mcardle Nybegynder
23. oktober 2007 - 11:20 #6
$showPictures er din variabel, det der er inde i den er navnet på din key i array'et, dvs. navnet på den række i databasen. Det kan være den bare hedder billeder.

//mcardle
Avatar billede Slettet bruger
23. oktober 2007 - 11:21 #7
dkfire, jeg har ikke noget foran <?php, ikke andet en det sædvanlige doctype og <head> tag. Den brokker sig hvis jeg ikke fjerne header("Content-type: image/jpeg");
Avatar billede Slettet bruger
23. oktober 2007 - 11:24 #8
mcardle, altså lige for at skære det helt ud i pap :)
Jeg har i min tabel lavet en 'id' og 'billede' række, så jeg skal bare skrive billede istedet for "række_i_db'en(skift)" ?
Avatar billede mcardle Nybegynder
23. oktober 2007 - 11:30 #9
Hehe, ja... Så ville det blive:

$con = mysql_connect("localhost","perevers","1234");
$db = mysql_select_db("perevers_dk");

$getPictures = mysql_query("SELECT * FROM billeder") or die(mysql_error());
while($showPictures = mysql_fetch_array($getPictures)){
  echo $showPictures["billede"];
}

mysql_close();

Ja, du skal bare skrive billede i stedet for række_i_db'en(skift) :o)
Avatar billede dkfire Nybegynder
23. oktober 2007 - 12:02 #10
Altså det er klart den brokker sig over header("Content-type: image/jpeg");
Du må ikke have noget som helst html kode frø din header("Content-type: image/jpeg");.
En header() finktion skal være det første som bliver sendt til browseren.

Hvordan har du gemt billederne i din database ??
Avatar billede Slettet bruger
23. oktober 2007 - 12:09 #11
okay, så har jeg prøvet det, men det virker sgu ikke, den laver bare en masse bogstaver og tegn:
&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;"&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;0100&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;w&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;*&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;X&#65533;&#65533;@B&#65533;&#65533;&#65533;&#65533;

bare mange flere linjer.

Jeg har indtil videre uploadet 2 jpg billeder så det skulle jo geren virke, men hvad gør jeg galt ? :)
Avatar billede Slettet bruger
23. oktober 2007 - 12:13 #12
kan det have noget at gøre med min tabel, jeg har jo som sagt lavet 2 rækker i min tabel, den ene er en 'id' række som har auto_increment og er primær. den anden række er 'billede' rækken, hvor datatypen er: Blob
Avatar billede mcardle Nybegynder
23. oktober 2007 - 12:20 #13
Jeg må indrømme jeg har aldrig lagt billeder i min database, da det sløver den, hvis man har mange billeder.

Du kan jo bare lægge et link til dit billede ind i databasen og så udskrive det i et <img>-tag.

//mcardle
Avatar billede mcardle Nybegynder
23. oktober 2007 - 12:22 #14
Og du skal stadig ikke have header("Content-type: image/jpeg") på.

//mcardle
Avatar billede Slettet bruger
23. oktober 2007 - 12:23 #15
det der er smart ved at ligge billedet ind i databasen og bare få dem "printet" på skærmen ved hjælp af et script er jo at så kan man bare ligge flere billeder ind i databasen og så bliver de automatisk vist
Avatar billede mcardle Nybegynder
23. oktober 2007 - 12:26 #16
Det er jo det samme man gør, bare med linksne i stedetfor.

Der kan du også printe dem direkte ud og bestemme hvor mange der skal komme og du kan skrive tekst til dem.

Du kan helt de samme ting, du bruger bare ikke plads og resourcer på at hente mange kb hele tiden.

:o)
Avatar billede michael_stim Ekspert
23. oktober 2007 - 12:28 #17
Headeren skal på hvis man henter et billede fra basen. Ellers bliver det til de mærkelige tegn.
Men som mcardle siger, så ville jeg lægge navnet i basen og billedet i en mappe.
Avatar billede michael_stim Ekspert
23. oktober 2007 - 12:29 #18
Men content typen skal være af samme type som billedet er gemt som ;o)
Avatar billede michael_stim Ekspert
23. oktober 2007 - 12:47 #19
Og så tror jeg det er et objekt du skal fetche.

mysql_fetch_object($getPictures)){
Avatar billede dkfire Nybegynder
23. oktober 2007 - 12:57 #20
michael_stim: det er sådan set ligemeget hvad perevers bruger af de forskellige fetche, tror mere problemet ligger i at kode ikke rigtig henter noget fra databasen.

perevers: prøv at vise HELE filen. Ved du hvad id'erne er for de 2 billeder som du har lagt op ?


mcardle: perevers skal bruge header() når han/hende henter rene billeder ud af databasen. Eller fortolker en browser ikke data'erne som billeder.
Avatar billede Slettet bruger
23. oktober 2007 - 12:57 #21
mcardle, det du beskriver, lyder som en smart og nem metode, men den metode kender jeg ikke, har aldrig prøvet det på den måde.

michael_stim, skrev mysql_fetch_object og det fjernede alle de underlige tegn. men hvor henne i filen er det at headeren skal skrives?, for når jeg skriver den inde i <?php - ?> laver den fejl
Avatar billede Slettet bruger
23. oktober 2007 - 13:05 #22
michael_stim, fejlen den skriver når jeg har min header inde i mit php tag er:

Warning: Cannot modify header information - headers already sent by (output started at /customers/cphplayers.com/cphplayers.com/httpd.www/have/index.php:10) in /customers/cphplayers.com/cphplayers.com/httpd.www/have/index.php on line 11

og det er header("Content-type: image/jpeg"); der ligger i linje 11
Avatar billede mcardle Nybegynder
23. oktober 2007 - 13:05 #23
headeren skal stå som det aller første.

Ved godt, at man skal have en header, med header("Content-type: image/fil-type"), men troede kun det skulle bruges til GD-Lib.

Anyway, så skal den være i toppen, altså headeren.
Avatar billede mcardle Nybegynder
23. oktober 2007 - 13:06 #24
header skal være før <DOCTYPE> og alt andet.
Avatar billede michael_stim Ekspert
23. oktober 2007 - 13:07 #25
headeren skla stå før du skriver noget som helst til skærmen og før du laver enter osv.
Avatar billede Slettet bruger
23. oktober 2007 - 13:07 #26
dkfire, ja, billedernes id'er er 1 og 3, hvordan viser jeg hele filen?
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:09 #27
Du viser bare ALT kode som din index.php fil indeholder.
Avatar billede Slettet bruger
23. oktober 2007 - 13:10 #28
michael_stim, har smidt header'en helt i toppen i dens eget php tag, nu er der ikke nogen fejl, men nu skriver den bare www adressen til hjemmesiden og mappen filen ligger i, altså: http://www.hjemmeside.com/mappe/
Avatar billede Slettet bruger
23. oktober 2007 - 13:12 #29
dkfire:

<?php
header("Content-type: image/jpeg");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ålens have</title>
</head>

<body>

<?php

$con = mysql_connect("localhost","cphplayers_com","vsa3eGEm");
$db = mysql_select_db("cphplayers_com");

$getPictures = mysql_query("SELECT * FROM galleri") or die(mysql_error());
while($showPictures = mysql_fetch_object($getPictures)){
  echo $showPictures["billede"];
}
mysql_close();
?>
</body>
</html>

og billederne har som sagt id'erne 1 og 3
Avatar billede mcardle Nybegynder
23. oktober 2007 - 13:17 #30
Du må hellere lave dine adgangskoder om nu.
Avatar billede mcardle Nybegynder
23. oktober 2007 - 13:18 #31
Inde i din while skriver du:

echo $showPictures->billede;

i stedet for.
Avatar billede pidgeot Nybegynder
23. oktober 2007 - 13:20 #32
Du kan ikke outputte billeddata inline i HTML. Hvis billedet ligger i databasen, skal du bruge en selvstændig fil der modtager billedets ID, og KUN skriver den ud, sammen med header() der sætter Content-Type.
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:25 #33
pidgeot: det var lidt det jeg frygtede der blev gjort.

perevers: Prøv denne kode for hele din fil:

<?php
header("Content-type: image/jpeg");

$con = mysql_connect("localhost","cphplayers_com","vsa3eGEm");
$db = mysql_select_db("cphplayers_com");

$getPictures = mysql_query("SELECT * FROM galleri WHERE id=1") or die(mysql_error());
while($showPictures = mysql_fetch_assoc($getPictures)){
  echo $showPictures["billede"];
}
mysql_close();
?>
Avatar billede Slettet bruger
23. oktober 2007 - 13:26 #34
mcardle: er gjort, opdaget det jo først efter jeg havde trykket 'SEND' irriterende man ikke kan edit :).
Men jeg echo'er jo også i min while loop: echo $showPictures["billede"];

pidgeot: det er ikke html fil, men en php fil
Avatar billede pidgeot Nybegynder
23. oktober 2007 - 13:30 #35
Det er fuldstændig ligegyldigt om filen hedder .html, .php, eller for den sags skyld .fgsfds. Du har HTML i filen, og det kan du ikke have når du outputter billeddata direkte - så SKAL du gå gennem en separat fil der kun skriver billedet ud med en passende Content-type defineret i et header()-kald.
Avatar billede Slettet bruger
23. oktober 2007 - 13:37 #36
pidgeot: okay, det viste jeg ikke :)

dkfire: Har ændret som du skrev, og nu sker der sgu noget:) den viser dog kun et billede, og ikke de 2 som ligger i databasen, kan det være fordi de ligger oven i hinanden eller hvad?
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:43 #37
Nej, det er fordi den kode jeg skrev kun henter et billede ud :-)
Avatar billede Slettet bruger
23. oktober 2007 - 13:44 #38
hehe, okay, hvordan for jeg den så til at skrive alle billeder ud, uanset hvor mange eller hvor lidt billeder der er i databasen?
Avatar billede pidgeot Nybegynder
23. oktober 2007 - 13:46 #39
Det gør du ved at lave et script der tager mod billedets ID og skriver dataene ud, og lader din HTML-side indsætte <img>-tags der kalder det andet script ud fra det du har i databasen.
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:53 #40
Tag denne kode og læg den i en ny fil, som vi kan kalde billede.php :

<?php
header("Content-type: image/jpeg");

$con = mysql_connect("localhost","cphplayers_com","vsa3eGEm");
$db = mysql_select_db("cphplayers_com");
$id = intval($_GET['id']);

$getPictures = mysql_query("SELECT * FROM galleri WHERE id=$id") or die(mysql_error());
while($showPictures = mysql_fetch_assoc($getPictures)){
  echo $showPictures["billede"];
}
mysql_close();
?>

Lav din index.php om til:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ålens have</title>
</head>

<body>
<img src="billede.php?id=1" />
<img src="billede.php?id=3" />
</body>
</html>
Avatar billede Slettet bruger
23. oktober 2007 - 14:12 #41
Cool, tal for hjælpen dkfire, smid et svar for point
Avatar billede dkfire Nybegynder
23. oktober 2007 - 14:18 #42
Jeg svare da gerne :-)
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