![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 22.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich,
Piszę tego posta z prośbą o pomoc. Podjąłem się stworzenia od podstaw sklepu internetowego (znając tylko podstawy php i mysql). Wszystko dotychczas szło bardzo dobrze do czasu gdy natknąłem się na problem - dodanie zdjęcia produktu. Szukałem informacji na temat dodawania zdjęć - i tutaj pierwsze pytanie: czy dodawać zdjęcia do bazy danych czy na serwer? czytałem różne opinie - w moim sklepie nie będzie więcej niż 1.000 produktów, a potrzebuję tylko zamieścić miniaturkę, dodam że zdjęcia produktu dodawać może tylko administrator. Z moich przemyśleń wynika że ładowanie zdjęć na serwer może być dużym problemem (nawiązywanie połączenia z serwerem, weryfikacja użytkownika no i sam sposób przesyłania pliku). Znalazłem więc stronę, gdzie opisano sposób dodawania obrazków do bazy jako typ BLOB : Dodawanie zdjęć do bazy. Stworzyłem więc sobie testową stronkę, żeby sprawdzić jak to działa - i tutaj totalna klapa - zawsze wyświetlają mi się same krzaczki. Myślałem że być może to problem z kodowaniem znaków (pracuję na Krasnalu i w bazie mam ustawione na latin1 i w żaden sposób tego nie mogę zmienić) więc zarejestrowałem sobie na szybko taki serwer: http://kisior.aq.pl/wyswietl.php - i korzystam z tamtejszej bazy gdzie kodowanie mam ustawione na utf8 - tak jak i na stronie www. Czy ktoś mi pomoże? Proszę o jakieś wskazówki co robię źle, ewentualnie inną metodę na zapis i wyświetlanie obrazków. Poniżej zamieszczam kod, jaki użyłem na tej stronie testowej: plik upload1.html <FORM ACTION="upload2.php" METHOD="POST" ENCTYPE="multipart/form-data"> <INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="8388608"> <INPUT TYPE="FILE" NAME="plik" VALUE="" size="30"> <INPUT TYPE="SUBMIT" VALUE="Wczytaj"> </FORM> plik upload2.php if (isset($_FILES['plik'])) { if ($_FILES['plik']['error']==UPLOAD_ERR_OK) { $filename=$_FILES['plik']['name'];//Nazwa wysłanego pliku $filetype=$_FILES['plik']['type'];//Typ wysłanego pliku $filesize=$_FILES['plik']['size'];//Rozmiar wysyłanego pliku $filesrc=$_FILES['plik']['tmp_name'];//Ścieżka do pliku tymczasowego na serwerze if ($filetype=="image/png" || $filetype=="image/x-png" || $filetype=="image/gif" || $filetype=="image/jpeg" || $filetype=="image/pjpeg") { $plik=fopen($filesrc,"r"); //otwórz ten plik w trybie do odczytu<BR> $mysqlplik = addslashes(fread($plik,$filesize)); //odczytaj go do końca, dodaj znaki "\" przed apostrofami i cudzysłowami. Całość zapisz w zmiennej $mysqlplik fclose($plik); //zamykamy plik unlink($filesrc); //i kasujemy go, bo już nie jest potrzebny $mysqlfiletype = addslashes($filetype); //dodajemy znaki "\" przed apostrofami i cudzysłowami do wartości zmiennej $filetype, w której został zdefiniowany typ MIME //naszego pliku. Wynik zapisujemy w zmiennej $mysqlfiletype $mysqlfilename = addslashes($filename); //dodajemy znaki "\" przed apostrofami i cudzysłowami do wartości zmiennej $filename, w której została zapisana nazwa naszego //pliku. Wynik zapisujemy w zmiennej $mysqlfilename. //Nawiązujemy połączenie z serwerem bazy MySQL $conn=mysql_connect("mysql2.ph-hos.osemka.pl","user","pass") or die ('Błąd połączenia z bazą MySQL: '.mysql_error()); //Wybieramy bazę w której mamy tabelę z polem blob<BR> $result2=mysql_select_db("baza",$conn) or die ('Błąd podczas wyboru bazy: '. mysql_error()); //Tworzymy zapytanie zapisujące do tabeli "obrazy" plik,<BR> //w naszym przypadku obrazek, jego typ MIME, nazwę<BR> //oraz rozmiar w bajtach.<BR> $sql1="INSERT INTO obrazy (ID_obrazy,obrazek,typ,nazwa,rozmiar) VALUES ('','$mysqlplik','$mysqlfiletype','$mysqlfilename','$filesize')"; //Wykonujemy zapytanie $sql1<BR> $result1=mysql_query($sql1,$conn) or die ('Błąd wykonania zapytania 1: '. mysql_error()); } else {die("Nieobsługiwany format pliku !!!"); exit;} } else {die("Błąd podczas wysyłania pliku !!!"); exit;} } else {die("Nie wskazano pliku do wysłania !!!"); exit;} ?> plik wyswietl.php $conn=mysql_connect("mysql2.ph-hos.osemka.pl","user","pass") or die ('Błąd połączenia z bazą MySQL: '.mysql_error()); //Wybieramy bazę w której mamy tabelę z polem blob<BR> $result1=mysql_select_db("baza",$conn) or die ('Błąd podczas wyboru bazy: '. mysql_error()); $sql1="select * from obrazy where ID_obrazy='2'"; $result2=mysql_query($sql1,$conn) or die ('Błąd wykonania zapytania 1: '.mysql_error()); //tworzymy tablicę asocjacyjną $row i wczytujemy do niej //dane z wybranego rekordu tabeli. W naszym przypadku //jest to rekord 1. $row = mysql_fetch_assoc($result2); //Z tablicy $row wydobywamy zawartość komórki "obrazek"<BR> //i zapisujemy ją do zmiennej $grafika.<BR> $grafika=$row['obrazek']; //Na podstawie strumienia danych przechowywanych w polu BLOB,<BR> //traktowanych w tej chwili jako ciąg znaków tworzymy obrazek<BR> //w pamięci serwera i przypisujemy go do wskaźnika $obraz.<BR> $obraz = imagecreatefromstring($row['obrazek']); //Generujemy w przeglądarce obrazek, w tym przypadku JPG.<BR> imagejpeg($obraz); //Uwalniamy z pamięci wskaźnik $obraz.<BR> //imagedestroy($obraz); ?> a tutaj jeszcze plik wyswietl2.php z drugą metodą wyświetlania obrazka, który również nie działa: <?php ob_start(); //Nawiązujemy połączenie z serwerem bazy MySQL<BR> $conn=mysql_connect("mysql2.ph-hos.osemka.pl","user","pass") or die ('Błąd połączenia z bazą MySQL: '.mysql_error()); //Wybieramy bazę w której mamy tabelę z polem blob<BR> $result1=mysql_select_db("baza",$conn) or die ('Błąd podczas wyboru bazy: '. mysql_error()); //Tworzymy zapytanie wybierające z bazy MySQL zapisaną w niej<BR> //zawartość wczytanego wcześniej pliku wraz z jego typem MIME,<BR> //nazwą i rozmiarem.<BR> $sql1="select * from obrazy where ID_obrazy='2'"; //Wykonujemy zapytanie $sql1<BR> $result2=mysql_query($sql1,$conn) or die ('Błąd wykonania zapytania 1: '.mysql_error()); //tworzymy tablicę asocjacyjną $row i wczytujemy do niej<BR> //dane z wybranego rekordu tabeli. W naszym przypadku<BR> //jest to rekord 1.<BR> $row = mysql_fetch_assoc($result2); //Z tablicy $row wydobywamy zawartość komórki "obrazek"<BR> //i zapisujemy ją do zmiennej $grafika.<BR> $grafika=$row['obrazek']; //Z tablicy $row wydobywamy zawartość komórki "typ"<BR> //i zapisujemy ją do zmiennej $typpliku.<BR> $typpliku=$row['typ']; //Wysyłamy do przeglądarki nagłówek HTTP, informujący<BR> //przeglądarkę że wynik który za chwilę wyświetlimy to<BR> //obrazek w formacie określonym przez zmienną $typpliku.<BR> header("Content-type:$typpliku"); //Drukujemy zawartość zmiennej $grafika,<BR> //czyli wyświetlamy zawartość naszego obrazka<BR> print $grafika; ob_end_flush(); ?> |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 1 Dołączył: 25.11.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tak rzucając okiem na szybkiego. Na pewno masz błędy w plikach które wyświetlają: w pierwszym masz krzaki, bo nie masz wywołanego header'a
header("Content-type:$typpliku"); <- to linijka z pliku nr 2 i o nią chodzi. Jak nie zdefiniujesz rodzaju wyświetlanego pliku, to przeglądarka przedstawi go jako tekst, a nie obrazek. W drugim pliku masz jakieś herezje, ob_start(); cały output przechwytuje i nic nie pokazuje, więc print $grafika; zamiast się wyświetlić na ekranie, to wrzucane jest do bufora. No i kolego chyba złe forum, bo Ty nie masz problemu z bazą, lecz ze skryptem. Ten post edytował Majzok 22.11.2010, 23:28:52 |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Pierwszy post i od razu naruszenie regulaminu w kilku punktach. Niewłaściwy dział i brak bbcode to chyba najbardziej rzucające się w oczy... Przenoszę do Przedszkola i zamykam. Moderatorzy otworzą jeśli poprawisz bbcode. A żeby nie było, że tylko się czepiam, to odpowiedzią na 90% jest brak wspomnianego headers przy wysyłaniu obrazka do przeglądarki...
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 23:00 |