23. oktober 2007 - 10:15Der 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
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
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
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());
Synes godt om
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?
$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
Synes godt om
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");
Synes godt om
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)" ?
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 ??
Synes godt om
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: ���������������������� �������� �����"��������0100���������������������w����������������������������������*������������������������X��@B����
bare mange flere linjer.
Jeg har indtil videre uploadet 2 jpg billeder så det skulle jo geren virke, men hvad gør jeg galt ? :)
Synes godt om
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
Og du skal stadig ikke have header("Content-type: image/jpeg") på.
//mcardle
Synes godt om
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
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.
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.
Synes godt om
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
Synes godt om
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
Du viser bare ALT kode som din index.php fil indeholder.
Synes godt om
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/
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.
$getPictures = mysql_query("SELECT * FROM galleri WHERE id=1") or die(mysql_error()); while($showPictures = mysql_fetch_assoc($getPictures)){ echo $showPictures["billede"]; } mysql_close(); ?>
Synes godt om
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"];
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.
Synes godt om
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?
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.
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.