Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wczytywanie obrazków z bazy danych - prosty skrypt PHP
Forum PHP.pl > Forum > Przedszkole
blendermen
Dzień dobry.
Muszę na zaliczenie przedmiotu zrobić jakąś stronę w PHP. Postanowiłem, że zrobię "prosty" skrypt - coś takiego jak demotywatory.
Mam problem z zaplanowaniem bazy danych i wczytywaniem obrazków. Nie oczekuje gotowych odpowiedzi tylko proszę, żeby mnie naprowadzić jak powinienem to zrobić. Obecnie strona działa ale nie tak jak powinna, otóż:
Mam bazę danych memownia z tabelą zdjecia:
  1. +----+----------------+--------+-------+------------------------------------------------+
  2. | id | zdjecie | userid | ocena | opis |
  3. +----+----------------+--------+-------+------------------------------------------------+
  4. | 4 | obrazki/6.jpg | 0 | 0 | NULL |
  5. | 5 | obrazki/5.jpg | 0 | 0 | NULL |
  6. | 6 | obrazki/4.jpg | 0 | 0 | NULL |
  7. | 7 | obrazki/3.jpg | 0 | 0 | NULL |
  8. | 8 | obrazki/2.jpg | 0 | 0 | NULL |
  9. | 10 | obrazki/10.jpg | 0 | 0 | NULL |
  10. | 11 | obrazki/11.jpg | 0 | 0 | NULL |
  11. | 12 | obrazki/12.jpg | 0 | 0 | NULL |
  12. | 13 | obrazki/13.jpg | 0 | 0 | NULL |
  13. | 14 | obrazki/14.jpg | 0 | 0 | Zdjęcie przedstawia ujęcie z filmu Gladiador |
  14. | 15 | obrazki/33.gif | 0 | 0 | NULL |
  15. | 16 | obrazki/34.gif | 0 | 0 | NULL |
  16. | 17 | obrazki/35.gif | 0 | 0 | NULL |
  17. | 18 | obrazki/36.gif | 0 | 0 | NULL |
  18. | 19 | obrazki/37.gif | 0 | 0 | NULL |
  19. | 20 | obrazki/38.gif | 0 | 0 | NULL |
  20. | 22 | obrazki/39.gif | 0 | 0 | NULL |
  21. | 23 | obrazki/40.gif | 0 | 0 | NULL |
  22. | 24 | obrazki/41.gif | 0 | 0 | NULL |
  23. | 25 | obrazki/42.gif | 0 | 0 | NULL |
  24. +----+----------------+--------+-------+------------------------------------------------+

Napisałem skrypt php, który wczytuje obrazki po 10 sztuk na stronę za pomocą pętli for. Pętla for wczytuje obrazki po numerze ID. Pomysł był dobry dopóki nie usunąłem parę wpisów, które stworzył luki w ID - i jak łatwo się domyślić na jednej stronie mam 6 obrazków a na innych 7 czy 6.

Drugim rozwiązaniem jakie przyszło mi do głowy jest wczytanie wszystkich wierszy tabelki za pomocą fetch_assoc i przypisanie każdego wiersza do tablica_obrazków[] - rozwiązanie dobre na krótką metę. Dopóki w bazie mam mało obrazków jest dobrze ale jak dodałem ponad 1000 wpisów to wczytywanie każdej strony trwało wieki..

Nie wiem jak rozwiązać ten problem. Jak powinien wyglądać poprawnie zaimplementowany mechanizm działania takiej strony? Gdzie trzymać obrazki? - w jednym katalogu? czy jakoś podzielić je na miesiąc dodania itp..
aha i jeszcze jedno obrazki muszą być wczytywane od dołu do góry czyli najnowsze na pierwszej stronie a najstarsze na ostatniej.
Jestem dopiero początkujący w PHP więc proszę o wyrozumiałosć.
Mogłem zrobić prostszy projekt ale chciałem się czegoś nauczyć.
Pozdrawiam.
slash^
Pętla do wczytywania z mysql? Jest coś takiego jak LIMIT, pokaż zapytanie...
blendermen
Jeżeli chodzi o zapytanie z mysql_query:

  1. ...
  2. $result = mysql_query("SELECT * FROM zdjecia");
  3. $ile_zdjec = mysql_num_rows($result);
  4.  
  5. for ($x=0;$x<$ile_zdjec;$x++)
  6. {
  7. $wiersz = mysql_fetch_assoc($result);
  8. $wszystkie_foty[$x] = $wiersz['zdjecie'];
  9. //potem wczytuje 10-tkami zdjęcia z tablicy $wszystkie_foty
  10. }


A drugie rozwiązanie jest ..wiem -tępe - to jest to z pętlą for i lukami ID
  1. //1strona ("1" * 10 -9),( "1" * 10)
  2. //2strona ("2" * 10 - 9),( "2" *10)
  3. //poczatek i koniec to zakres zdjec na kazdej stronie(1-10,11-20,21,30...) Np. na ostatniej stronie będzie to zakres malejacy od 10-1.
  4. //Wzrór przeliczeniowy linjke wyzej
  5. $poczatek = ($reverse_strona_array[$strona-1] * 10)-9; //1
  6. $koniec = ($reverse_strona_array[$strona-1] *10); //10
  7.  
  8.  
  9. //Petla glowna - przechodzi przez wszystkie zdjecia po id i wrzuca je do tablicy
  10. //zeby potem ja przekazac funkcji, generujacej zdjecia
  11. $licznik=0;
  12. for ($x=$koniec;$x>$poczatek-1;$x--)
  13. {
  14. //continue - jak ilosc zdjec przekroczy wpisy w bazie danych. Np. jest 22 zdjec to na ostatniej stronie
  15. //bedzie 10 zdjeci, na przedostatniej również 10 a na pierwszej tylko 2.
  16. if ($x > $ile_zdjec){continue;}
  17.  
  18. echo $x." "; //numeracja zdjec 10,9,8,7,6,5,4,3,2,1
  19. $result = mysql_query("select zdjecie, opis from zdjecia where id=".$x.""); //wczytywanie kazdego zdjecia po id
  20. $wiersz = mysql_fetch_assoc($result);
  21. if($wiersz['zdjecie'] != "")
  22. {
  23. $obrazki[$licznik] = $wiersz['zdjecie']; //wrzucam sciezki obrazkow z bazy danych do tablicy obrazki
  24. $obrazki_opis[$licznik] = $wiersz['opis']; //opis zdjecia wrzucam do tablicy
  25. $licznik++;
  26. }

To są takie moje wymysły
slash^
  1. $result = mysql_query("SELECT * FROM zdjecia LIMIT 0,10");
  2.  
  3. while ($wiersz=mysql_fetch_assoc($result))
  4. {
  5. var_dump($wiersz);
  6. }


http://php.about.com/od/mysqlcommands/g/Limit_sql.htm
L0k0
Witam!

Wg mnie nie powinieneś iść w tym kierunku.
Powinieneś zrobić jakąś prostą paginację i wyświetlać po 10 (czy ile chcesz) wyników na stronę.
Takie rozwiązanie jest przyszłościowe i na pewno wiele razy będziesz do niego sięgał.

Np.: Nieźle opisana paginacja

Pozdrawiam!
blendermen
Działa! smile.gif Zrobiłem tę paginację, żeby nauczyć się już pisać poprawnie kod. A z tą funkcją LIMIT to aż się za głowę złapałem, że to takie proste. Dziękuje Wam za pomoc.
Pozdrawiam.
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.