Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyświetlanie obrazka z bazy
Forum PHP.pl > Forum > Przedszkole
redelek
Witam,

Nie zarabiam na php, coś tam sobie dłubię i proszę o wyrozumiałość smile.gif Zrobiłem skrypt dodający do bazy danych pliki tak wiem, że tak nie powinno być, ale to nie duża ilość będzie więc może być.
Problem mam w tym, że dodać mogę ale wyświetlić jeśli to zdjęcie gif lub jpg za boga nie mogę. Mam to wszystko lokalnie na XAMPP i nie wiem czy to nie jego wina. Nie mam błędu ale obrazek się nie wyświetla, jest tylko taki kwadracik taki jak w przypadku braku zdjęcia. Reasumując tak to wygląda
  1. if(isset($_GET['idfoto'])) {
  2. // Get the ID
  3. $id = intval($_GET['idfoto']);
  4.  
  5. // Make sure the ID is in fact a valid ID
  6. if($id <= 0) {
  7. die('The ID is invalid!');
  8. }
  9. else {
  10. // Connect to the database
  11. $dbLink = new mysqli('127.0.0.1', 'root', '', 'upload');
  12. if(mysqli_connect_errno()) {
  13. die("MySQL connection failed: ". mysqli_connect_error());
  14. }
  15.  
  16. // Fetch the file information
  17. $query = "
  18. SELECT `name`, `mime`, `size`, `data`, `created`, `downloaded`, `public`
  19. FROM `file`
  20. WHERE `id` = $id";
  21. $result = $dbLink->query($query);
  22.  
  23. if($result) {
  24. // Make sure the result is valid
  25. if($result->num_rows == 1) {
  26. // Get the row
  27. $row = mysqli_fetch_assoc($result);
  28. $cn=$row['data'];
  29. header("Content-Type: ". $row['mime']);
  30. header("Content-Length: ". $row['size']);
  31. echo $cn;
  32.  
  33.  
  34. }
  35. else {
  36. echo 'Error! No image exists with that ID.';
  37. }
  38.  
  39. // Free the mysqli resources
  40. @mysqli_free_result($result);
  41. }
  42. else {
  43. echo "Error! Query failed: <pre>{$dbLink->error}</pre>";
  44. }
  45. @mysqli_close($dbLink);
  46. }
  47. }
  48. else {
  49. echo 'Error! No ID was passed.';
  50. }
  51.  
  52. ?>


Link który przechodzi do tej strony wygląda tak
http://localhost/upload_files/mysq_upload_...e.php?idfoto=13

Oczywiście to wersja robocza, ale powinno działać. Może ktoś mi podpowiedzieć co robię źle albo czego mi brakuje ?



nospor
Wywal nagłówki
header("Content-Type: ". $row['mime']);
header("Content-Length: ". $row['size']);

Włącz wyświetlanie wszystkich błędów
Temat: Jak poprawnie zada pytanie

A potem odpal ten link
http://localhost/upload_files/mysq_upload_...e.php?idfoto=13
w przeglądarce i zobacz co tak naprawdę dostajesz.
redelek
zawsze mam to włączone tylko w php.ini, i to co podałeś też dodałem i nic nadal pusty kwadracik i biała strona sad.gif(
To samo jak podam pełną ścieżkę i ID sad.gif(

dlatego troszkę zbaraniałem
nospor
Prosiłem: wywal nagłówki.... wówczas nie bedziesz miał kwadracika....
redelek
tak wywaliłem nagłówki, przeglądarkę chrome uruchomiłem ponownie i nadal widać ten kwadracik i nic poza tym.
W Firefox mam komunikat , że obrazek zawiera błędy i nie może być wyświetlony
nospor
Ale ty nie masz tego wkładac w IMG SRC, tylko bezpośrednio w przeglądarke. Wówczas bez nagłówków przeglądarka nie ma prawa uważać tego za obrazek....
redelek
tak robię tak jak mówisz , bezpośredni link, bez img sad.gif
nospor
Pokaż kod po poprawkach jakie miałeś zrobić, bo normalnie nie wierze.

I odpal to np. w Operze a nie tylko FF
redelek
Wybacz nie w tym pliku zmieniłem nagłównki.
Teraz wyświetla się tak

  1. Error! No ID was passed.GIF89aź ÷  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>?questionmark.gif@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZ
    Z[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuu
    uvvvwwwxxxyyyzzz{{{|||}}}~~~€€€‚‚‚ƒƒƒ„„„………†††‡‡‡ˆˆˆ‰‰‰ŠŠŠ‹‹‹ŒŒŒŽŽŽ
    ‘‘‘’’’“““”””•••–––———˜˜˜™™™ššš›››œœœžžžŸŸŸ ĄĄĄ˘˘˘ŁŁŁ¤¤¤ĽĽĽŚŚŚ§§§¨¨¨ŠŠŠŞŞŞŤŤŤŹŹŹ­­­ŽŽŽŻŻŻ°°°ąąą˛˛˛łłł´´´ľľľśśśˇˇˇ¸¸¸šššşşşťť
    ťźźź˝˝˝žžžżżżŔŔŔÁÁÁÂÂÂĂĂĂÄÄÄĹĹĹĆĆĆÇÇÇČČČÉÉÉĘĘĘËËËĚĚĚÍÍÍÎÎÎĎĎĎĐĐĐŃŃŃŇŇŇÓÓÓÔÔÔŐŐŐÖÖ
    Ö×××ŘŘŘŮŮŮÚÚÚŰŰŰÜÜÜÝÝÝŢŢŢßßßŕŕŕáááâââăăăäääĺĺĺćććçççčččéééęęęëëëěěěíííîîîďďďđđđńń
    ńňňňóóóôôôőőőööö÷÷÷řřřůůůúúúűűűüüüýýýţţţ˙˙˙,ź ˙˙ H° Áƒ*\ȰĄĂ‡#JœHą˘Ĺ‹3jÜČąŁÇ CŠI˛¤É“(SŞ\ɲĽË—0cƜIłŚÍ›8sęÜÉł§ĎŸ@ƒ J´¨ŃŁH“*]Ę´ŠÓ§PŁJJľŞŐŤXłjÝĘľŤ×Ż`ÊKśŹŮłhÓŞ]Ëś­ŰˇpăʝKˇŽÝťxóęÝˡŻßż€ L¸°áÈ
    +^̸ąăǐ#KžLš˛ĺ˘3kŢĚšłçĎ C‹Mş´éÓ¨SŤ^Íşľë×°c˞Mťśí۸sëŢÍťˇďßŔƒ Nź¸ńăȓ+_ÎźšóçĐŁKŸN˝şőëŘłkßνť÷ďŕË˙Ožźů
    óčÓŤ_Ďž˝ű÷đă˟OżžýűřóëßĎżż˙˙(ŕ€hŕ&¨ŕ‚ 6čŕƒF(á„Vhá…f¨á†včᇠ†(âˆ$–hâ‰(ڍâŠ,śčâ‹0Ć(ăŒ4Öhă8ć¨ăŽ<öčă@)äDiä‘H&Šä’L6éä“PF)ĺ”TViĺ•XfŠĺ–\véĺ—`†)ć˜d–ić™hŚŠćšlśéć›pĆ)çœtÖiçxćŠçž|öé矀*č „j襈&Şč˘Œ6ę裐F*餔Vj鼘fŞéڜvęé§ †*ꨤ–jęŠ¨ŚŞęŞŹśęꍰĆ˙*돴Öjë­¸ćŞëŽźöęëŻŔ+ě°ÄkěąČ&Ťě˛Ě6ëěłĐF+í´ÔVkíľŘfŤíśÜvŰg3‚PQB 0.‚¨â-tá–ëîťî– H3ë*'šďĘŤŠ íÂK˝ő§ žĺ–@…şŠBź‚,œ ţœÂďţëpoÍ €ĹAŻÄß6pźC”ńť%‡L›*ƒl˛ĆޤŹňk,ťKĹE'Ł<3l5—Ű0F9ěňΊő ŔĎ8k\ÂĐD›4Ň@+Ýôjß|Đ˝GdôĆSŁć1×5ł°š2/ôľĎ]—Ös  @Ů Q1všL§ÍÁpt2Ű5˙ÓLĹv‡67Ô ý öCgç¸e†›‘Çu'47ߋo6ˇâ ‘ku߀WŽT3ű†+7şüŞâwP=oĔ#ţnäžű¤°Ćđ拮é< űÄĺbŽĐÜŞÇĹľ_źÁžˇ”zEäސŃÉ O“ŘđœnĚ؇KťíŃŁ¤;ó‡C4šô˛Œ|ˆćVX°ş„ƒ&!bç@˘Â!–Ë‚&әŻ”Äl{ü/R3,ŠĎf[T‰˙VrŻÚ%ą…hźˆÇŢČŚń$2l‰ב52‘Ž éáMâGĺŃ.Œi„˜šŢaD€ƒIa˛G#ňމ9t$_I‘@q&gC›ăhĂ--#‚ě$ÝeI’¸”GÔä1ůČ.ŞŇ#“œŢÜŽh‘*–›dĺ-;RÁœě’œ&řšĚŁ “#xÓI(OŠ5[^_€t$Ÿ‰3NJłzŒüG1ť)KŒ-œÜ<Čw˛ľ*䓳¤ŰF™Ít"–:ٚ'˙ĚQ˛p#Ŕł');)1ˆľü§F



nospor
No i już masz odpowiedź.
Error! No ID was passed.

Tylko dziwnie to wyglada, bo jest error a potem plik.... wyglada to tak, jakby skrypt był odpalany dwa razy: raz bez id, a raz z id. Nie masz tam żadnnych dzikich include?
redelek
Już działa, działa, miałem dwa razy zaszyte
if(isset($_GET['id'])) i if(isset($_GET['idfoto']))

dzięki za naprowadzenie
nospor
Czyli podsumujmy:
1) Zmiany robiłeś w złym pliku
2) Nie pokazałeś nam całego kodu, bo w kodzie co tutaj masz nie ma żadnych podwójnych issetów

A potem się dziwią, że ja taki nerwowy jestem.... wink.gif
redelek
oj pokazałem kod po co mam zaśmiecać forum komentarzami. A w tym się schował byczek.
Poprawię się. Niestety jak przeniosłem to wszystko do prawidłowej strony to niestety nie działa.
Nadal wyświetla się kwadracik, ale dzięki Tobie może dojdę gdzie jest tam błąd.

Cóż no nieraz tak jest , że gdzieś ucieka ten błąd i go nie widać "Diabeł ogonem go przykrył". Nie mów że jesteś idealny smile.gif) wiem wiem jesteś NAJLEPSZY tyle razy tu pomogłeś .

Dzięki serdeczne jeszcze raz
nospor
Cytat
Nie mów że jesteś idealny
Nie, niechodziło mi o to, że ja jestem idealny. Chodziło mi o to, że ludzie często na forum są strasznie nierozgarnięci: piszą w złym pliku, nie podają wszystkiego, a potem w temacie: tak tak, wszystko robie jak każesz ale nadal nie działa.... wink.gif

Przepraszam, nie kieruję tego osobiście do Ciebie, ale ogólnie. Tak tylko w Twoim temacie wylewam swoje żale, by odreagować trochę smile.gif
redelek
NOSPOR rozumiem, sam pomagam ludzikom jeśli chodzi o serwery Linux.
Wiem jak to jest. Naprawdę luzik, każde Twoje słowa są dla mnie cenne, nawet jak mnie ganisz, nie mam Ci tego za złe , bo dla mnie jesteś GURU i to bezdyskusyjnie.
Naprawdę jest oki

Witam,

Pomimo usilnych starań nie udało mi się rozwiązać mojego problemu. Wiem o co chodzi, ale jak to obejść chodzi o podwójne wysłanie nagłówków.
Problem jest w tym, że po wejściu na stronę są ustawione takie nagłówki

  1. <title>TEST</title>
  2. <meta name="description" content="Moje portfolio" />
  3. <meta name="keywords" content="portfolio, piotr, piotr redel, redel, redelek, redlu, linux, system" />
  4. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  5. <link rel="stylesheet" type="text/css" href="style.css" />
  6. <!-- modernizr enables HTML5 elements and feature detects -->
  7. <script type="text/javascript" src="js/modernizr-1.5.min.js"></script>
  8. </head>

Jest to gotowy szablon który mi się podobał. Problem jest w tym, żeby strona dobrze wyglądała muszę wysłać ten nagłówek, a żeby zobaczyć zdjęcie muszę wysłać inny i zbaraniałem jak to obejść ?
Jest pobierany rekord z bazy w którego treści jest zaszyty link do wyświetlenia zdjęcia getfile.php?idfoto=13, wszystko się wczytuje oprócz zdjęcia. Nospor wyjaśnił gdzie jest problem i wiem, że wysyłam dwa nagłówki, ale jak to obejść, bo bez pierwszego strona wygląda bardzo źle,
  1. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
a bez drugiego nie wczytuje mi się zdjęcie sad.gif(((

  1. header("Content-Type: ".$row['mime']);


nospor
No ale wyświetlając zdjęcie, nie możesz walic tego
<head>

<title>TEST</title>

<meta name="description" content="Moje portfolio" />

<meta name="keywords" content="portfolio, piotr, piotr redel, redel, redelek, redlu, linux, system" />

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

<link rel="stylesheet" type="text/css" href="style.css" />

<!-- modernizr enables HTML5 elements and feature detects -->

<script type="text/javascript" src="js/modernizr-1.5.min.js"></script>

</head>

To służy do wyświetlania strony html. Naprawdę nie potrafisz nie wyświetlać szablonu gdy wyświetlasz zdjęcie? Korzystasz z jakiegoś gotowego cms czy jak?
redelek
no wiem, ale zdjęcie jest pobierane razem z treścią z bazy danych.
Jak nie wstawię tego nagłówka to zdjęcie się wyświetla ale stron się rozwala , a jak dodam ten nagłówek to strona ładnie wyświetlana z polskimi znakami , ale zdjęcia nie ma.
W tym jest problem. Nie to nie cms tylko jakiś szablon css, który mi się podobał, a dostosowuję go do siebie.
nospor
Ale jak możesz pobierac zdjęcie razem z treścią strony?? Nie ogarniam tego.
Albo pobierasz strone, albo pobierasz zdjęcie. Dwóch rzeczy naraz nie możesz robić.

Jeśli nie potrafisz oddzielić jednego od drugiego, to zrób sobie oddzielny plik na pobieranie zdjęcia i po sprawie.
redelek
No dobra to od początku.
Z bazy wczytuje mi się treść w której jest zawarty zdjęcie

przykład:

Treść pobierana z bazy danych. Takie przykładowe gadanie.
Blabal bla bla bla bla bla i tu można zobaczyć różne ciekawe zdjęcia
getfile.php?idfoto=13
tu dalsza część srony i opisy opisy nadal opisyyyyy.
GAdanie bla bal bal

i chodzi o to żeby po wczytaniu tego rekordu wyświetliło się zdjęcie dokładnie w tym miejscu. Treść jest w oddzielnej bazie niż pliki łączy ich tylko ID.
Plik z nagłówkami jest includowany z header.php do index.php
nospor
W polu w bazie masz jakiś tekst, a w tym tekscie masz:
getfile.php?idfoto=13
?

czy może w tym tekscie masz:
<img src="getfile.php?idfoto=13" />
?

Jak to pierwsze, to logiczne, że musisz zamienić to na IMG SRC.
Jak to drugie to w czym problem?
redelek
no mam to w img, i nie wyświetla się sad.gif
nospor
1) Pokaż dokładnie tekst jaki masz w tym rekordzie....

2) Pokaż dokładnie jak wygląda plik getfile.php
redelek
rekord w bazie
  1. <img src="getfile.php?idfoto=1" />
  2. <span>Imię i Nazwisko:</span> Piotr Redel<br />
  3. <span>Ksywka: </span>Redelek<br />
  4. <span>Wiek: </span>34 L<br />
  5. <span>Stan cywilny: </span>Żonaty<br />
  6. <span>Dzieci: </span>są dwoje<br /><br />
  7. <span>Kierunek: </span>Administracja serwerami, sieciami, konfiguracja sprzętu serwerowego


PLIK
  1. <?php
  2.  
  3. if (isset($_GET['idfoto'])) {
  4. //include_once ('head.php');
  5. // Get the ID
  6. $idfoto = intval($_GET['idfoto']);
  7.  
  8. // Make sure the ID is in fact a valid ID
  9. if ($idfoto <= 0) {
  10. die('Niepoprawne ID');
  11. } else {
  12. connectdb();
  13. //echo $idfile;
  14. // Fetch the file information
  15. $query = mysql_query("SELECT * FROM ".TABLE_FILE." WHERE `id_file`=$idfoto");
  16.  
  17. if (mysql_num_rows($query) == 0) {
  18. echo 'Plik o takiej nazwie nie istnieje. Zjeśli to widzisz zgłoś problem Administratorowi';
  19.  
  20. } else {
  21. // Make sure the result is valid
  22.  
  23. $row = mysql_fetch_array($query);
  24.  
  25. $cn=$row['data'];
  26. header("Content-Type: ".$row['mime']);
  27. //header("Content-Length: ".$row['size']);
  28. echo $cn;
  29.  
  30. }
  31.  
  32. }
  33. }
  34. ?>
nospor
....
No to przecież wszystko jest w porządku. Gdzie są te nagłówki:
<head>

<title>TEST</title>

<meta name="description" content="Moje portfolio" />

<meta name="keywords" content="portfolio, piotr, piotr redel, redel, redelek, redlu, linux, system" />

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

<link rel="stylesheet" type="text/css" href="style.css" />

<!-- modernizr enables HTML5 elements and feature detects -->

<script type="text/javascript" src="js/modernizr-1.5.min.js"></script>

</head>
Bo ich tu nigdzie nie widzę.... znowu pokazujesz jakieś fragmenty i się dogadać nie możemy...
redelek
dobra to całość,
index.php
  1. <?php include_once('head.php'); ?>
  2. <div id="main">
  3. <?php include_once('header.php'); ?>
  4. <div id="site_content">
  5. <div id="sidebar_container">
  6. <?php include_once('sidebar_onother.php'); ?>
  7. <?php include_once('sidebar_links.php'); ?>
  8. </div>
  9. <div class="content">
  10. <?php
  11. connectdb();
  12. $query=mysql_query("SELECT * FROM ".TABLE_CONTENT." WHERE `id_category`='1' AND `public`='1' AND `id_show_in`='1'");
  13. //print_r(mysql_num_rows($zapytanie));
  14. if( mysql_num_rows($query) == 0)
  15. {
  16. echo "Wystąpił problem z bazą danych w chwili obecnej nie można pobrać treści";
  17. } else {
  18. while(list($id_content,$id_category,$subject,$content,$public,$date_pub,$date_mod) = mysql_fetch_array($query))
  19. {
  20. echo $subject;
  21. echo $content;
  22. }
  23. }
  24. ?>
  25.  
  26. </div>
  27.  
  28. </div>
  29. <?php include_once('footer.php'); ?>
  30. </div>


HEAD.php

  1. <?php include_once('inc/lib_pdb.php');
  2. ?>
  3. <!DOCTYPE HTML>
  4. <html>
  5.  
  6. <head>
  7. <title><?=SITENAME; ?></title>
  8. <meta name="description" content="Moje portfolio" />
  9. <meta name="keywords" content="portfolio, piotr, piotr redel, redel, redelek, redlu, linux, system" />
  10. <meta http-equiv="content-type" content="text/html; charset=<?=SITECODE;?>" />
  11. <link rel="stylesheet" type="text/css" href="<?=APP_CSS;?>style.css" />
  12. <!-- modernizr enables HTML5 elements and feature detects -->
  13. <script type="text/javascript" src="js/modernizr-1.5.min.js"></script>
  14. </head>
  15.  
  16. <body>


  1. HEADER.php
  2. <header>
  3. <div id="logo">
  4. <div id="logo_text">
  5. <!-- class="logo_colour", allows you to change the colour of the text -->
  6. <h1><a href="index.php">Piotr<span class="logo_colour"> Redel</span></a></h1>
  7. <h2>Informacje, linki, pomoc</h2>
  8. </div>
  9. </div>
  10. <nav>
  11. <?php include_once('menu.php'); ?>
  12. </nav>
  13. </header>



nospor
No ale jak się ma do tego wszystkiego getfile.php ? Czy kod z dwóch postów wyżej co mi podałeś dla getfile.php jest całym kodem, który jest odpalany dla getfile.php?
redelek
tak
nospor
Coś kręcisz.... skoro getfile.php jest całym kodem jaki mi pokazałeś, to niby jakic cudem dla getfile.php?idfoto=1 nagle ni stąd ni zowąd pokazują ci się nagłówki
<head>

<title>TEST</title>

<meta name="description" content="Moje portfolio" />

<meta name="keywords" content="portfolio, piotr, piotr redel, redel, redelek, redlu, linux, system" />

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

<link rel="stylesheet" type="text/css" href="style.css" />

<!-- modernizr enables HTML5 elements and feature detects -->

<script type="text/javascript" src="js/modernizr-1.5.min.js"></script>

</head>
?

Te nagłówki nie mają ci się prawa pokazywać dla getfile.php?idfoto=1

Bo rozumiem, że dając linka getfile.php?idfoto=1 to odpala mi sie plik getfile.php a nie jakiś index.php, tak?
redelek
darowałem sobie zrobiłem linki do fotek w bazie danych i wszystko śmiga aż miło.
Jednak brak doświadczenia i wiedzy to zmora smile.gif

Dzięki za cierpliwość
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.