Witam,

Bazując na wielu tutorialach dostępnych w internecie próbuję wgrać zdjęcia do bazy, a następnie wyświetlić je. Problem polega na tym, że:
a) fread wywala się gdy wgrywam jakikolwiek format poza .PNG
cool.gif przy próbie wczytania zapisanego do bazy PNG moim oczom ukazują się piękne krzaczki.
W pewnym momencie zacząłem 'na pałę' kopiować kody z tutoriali i również napotkałem ten sam problem. Czy zanim zabrałem się do pracy powinienem zainstalować jakieś magiczne biblioteki o których nikt nigdzie nie wspominał (do obsługi innych formatów poza PNG)? Czy mam błąd w kodzie którego nie widzę?

Localhost: WebServ

Baza:
  1. CREATE TABLE `zdjecia` (
  2. `id_zdjecia` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `uzytkownik` int(10) UNSIGNED NOT NULL,
  4. `zdjecie` mediumblob NOT NULL,
  5. `typ` varchar(20) character SET utf8 NOT NULL,
  6. `rozmiar` int(11) NOT NULL,
  7. `nazwa` varchar(30) character SET utf8 collate utf8_polish_ci NOT NULL,
  8. PRIMARY KEY (`id_zdjecia`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=3 ;


zawartość bazy:
  1. INSERT INTO `zdjecia` (`id_zdjecia`, `uzytkownik`, `zdjecie`, `typ`, `rozmiar`, `nazwa`) VALUES
  2. (2, 13, [[i]tutaj długi ciąg danych zdjęcia[/i]] , 'image/png', 11187, 'naglowek.png');


formularz html:
  1. <div id="naprawo">
  2. <form method="post" action="portal.php?id=zdjecie_dodaj" ENCTYPE="multipart/form-data" >
  3. <div id="formularz">
  4. <div> Wskaż zdjęcie do załadowania: </div>
  5. <div> <input type="hidden" name="MAX_FILE_SIZE" value="2000000"> </div>
  6. <div> <input type="file" name="zdjecie"> </div>
  7. <div> <input type=submit value="Dodaj"> </div>
  8. </div>
  9. </form>
  10. </div>


skrypt dodający zdjęcie:
  1. <?php
  2. require_once('funkcje_dodatkowe.php'); //funkcja polacz_db
  3.  
  4. try {
  5. $fileName = $_FILES['zdjecie']['name'];
  6. $tmpName = $_FILES['zdjecie']['tmp_name'];
  7. $fileSize = $_FILES['zdjecie']['size'];
  8. $fileType = $_FILES['zdjecie']['type'];
  9.  
  10. $fp = fopen($tmpName, 'r');
  11. $content = fread($fp, filesize($tmpName));
  12. $content = addslashes($content);
  13. fclose($fp);
  14.  
  15. $id = $_SESSION['id_sesji'];
  16.  
  17. $polaczenie = polacz_db();
  18. if(!$polaczenie)
  19. throw new Exception ("Blad łączenia z bazą danych");
  20. $zapytanie = $polaczenie->query("insert into zdjecia values(NULL, '$id', '$content', '$fileType', '$fileSize', '$fileName')");
  21. if(!$zapytanie)
  22. throw new Exception ("Nie udało się zapisać zdjęcia");
  23. }
  24. catch (Exception $e){
  25. echo $e->getMessage();
  26. exit(); }
  27.  
  28. mysqli_close($polaczenie);
  29. ?>


skrypt mający wyświetlać zdjęcie:
  1. <?php
  2. require_once('funkcje_dodatkowe.php');//funkcja polacz_db
  3.  
  4. $id = $_SESSION['id_sesji'];
  5. $polaczenie = polacz_db();
  6.  
  7. try{
  8.  
  9. $zapytanie = $polaczenie->query("select id_zdjecia, zdjecie from zdjecia where uzytkownik = '$id'");
  10. if(!$zapytanie)
  11. throw new Exception("Wykonanie zapytania do bazy danych nie powiodło się");
  12.  
  13.  
  14. while(list($uzytkownik, $nazwa) = $zapytanie->fetch_array())
  15. echo ('<a href="portal.php?id='.$id_zdjecia.'> <'.$nazwa.'></a></br>');
  16.  
  17. }
  18. catch (Exception $e){
  19. echo $e->getMessage();
  20. exit(); }
  21.  
  22. mysqli_close($polaczenie);
  23. ?>