Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zdjecia wyciagane z bazy
Forum PHP.pl > Forum > Przedszkole
miszqa
Witam!!!
Problem jest takiej natury
Mam skrypt do wyciagania zdjec z bazy i problem pojawia sie przy numeracji Id
czyli o auto_increment
  1. <?php
  2.  
  3. include_once ('admin/config.php');
  4.  
  5. define(&#092;"BLAD\", \"<BR>&nbsp;<b style=\"color:red\">BLAD:</b>\"); 
  6. $db = mysql_connect($dbhost, $dbuser, $dbpass) or die (BLAD . &#092;"Nie moge polaczyc sie z serwerem bazy.\"); 
  7. mysql_select_db($dbname, $db) or die(BLAD . &#092;"Nie moge wybrac odpowiedniej bazy.\"); 
  8. $id1=$id_zdjecie;
  9. $result = mysql_db_query($dbname,&#092;"SELECT * FROM lo_galeria WHERE lo_galeria_id=$id1\"); 
  10. list($wszystkich)=mysql_fetch_row(mysql_db_query($dbname,&#092;"SELECT count(*) FROM lo_galeria\"));
  11. print &#092;" <TABLE width=100 align=center border=0>\";
  12. $id_min=$id_zdjecie-1;
  13. $id_max=$id_zdjecie+1;
  14. $page=floor(($id_zdjecie-1)/12);
  15. $page=$page;
  16. //echo $page;
  17. if($id_min==0) {
  18. // print \"<tr><td colspan=3 align=center class=tekst><b>$id</b> z $wszystkich</td></tr>\";
  19. print &#092;"<tr><td align=center width=40>&nbsp;</td>\";
  20. print &#092;"<td align=center width=40><a href=\"?id=41&subj=$subj\"><img src=\"sysimg/home.gif\" alt=\"home\" border=0></a></td>\";
  21. print &#092;"<td align=center width=40><a href=\"?id=42&subj=$subj&id_zdjecie=$id_max\"><img src=\"sysimg/next.gif\" alt=\"next\" border=0></a></td></tr>\";
  22. } elseif ($id_max==$wszystkich+1) {
  23. // print \"<tr><td colspan=3 align=center class=tekst><b>$id</b> z $wszystkich</td></tr>\";
  24. print &#092;"<tr><td align=center width=40><a href=\"?id=42&subj=$subj&id_zdjecie=$id_min\"><img src=\"sysimg/previous.gif\" alt=\"prev\" border=0></a></td>\";
  25. print &#092;"<td align=center width=40><a href=\"?id=41&subj=$subj&page=$page\"><img src=\"sysimg/home.gif\" alt=\"home\" border=0></a></td>\";
  26. print &#092;"<td align=center width=40>&nbsp;</td></tr>\";
  27. } else {
  28. // print \"<tr><td colspan=3 align=center class=tekst><b>$id</b> z $wszystkich</td></tr>\";
  29. print &#092;"<tr><td align=center width=40><a href=\"?id=42&subj=$subj&id_zdjecie=$id_min\"><img src=\"sysimg/previous.gif\" alt=\"prev\" border=0></a></td>\";
  30. print &#092;"<td align=center width=40><a href=\"?id=41&subj=$subj&page=$page\"><img src=\"sysimg/home.gif\" alt=\"home\" border=0></a></td>\";
  31. print &#092;"<td align=center width=40><a href=\"?id=42&subj=$subj&id_zdjecie=$id_max\"><img src=\"sysimg/next.gif\" alt=\"next\" border=0></a></td></tr>\";
  32. }
  33. print &#092;"</TABLE>\";
  34.  
  35. print &#092;" <TABLE width=400 align=center border=0>\";
  36. while ($row = mysql_fetch_array($result)) {
  37.  
  38. printf(&#092;"<TR><TD align=center><b><small>%s</small></b></TD></TR>
  39. <TR><TD align=center><img src=&#092;"galeria/%s\" border=0></TD></TR>
  40. &#092;", 
  41. $row['lo_galeria_nazwa'],
  42. $row['lo_galeria_zdjecie']);
  43.  
  44. }
  45. print &#092;"</TABLE>\";
  46. // Przycisk \"poprzednia strona\": 
  47.  
  48. ?>

tak wyglada skrypt
wszystko dziala bez zarzutu jesli zdjecia sa dodawane bezposrednio jedno po drugim. Problem pojawia sie gdy jakies zdjecie sie skasuje z bazy. Jak przerobic ten skrypcik aby pobieral i wyswietlal prawidlowo wszystkie zdjecia bez roznicy czy jakies zdjecie zostalo skasowane z bazy.
dr_bonzo
A moze rozwiazac to tak:
numerujesz strony numerem strony smile.gif a nie id zdjecia i wtedy:
(5 zdjec, wyswietlane po 3 na stronie (o to chodzi?), a gdy sie nie da to dwa lub jedno; "-" oznacza brak zdjecia w tym miejscu)
Kod
|str|zdjecia|
| 0 | -01   |
| 1 | 012   |
| 2 | 123   |
| 3 | 234   |
| 4 | 34-   |


1. pobierasz ilosc zdjec (SELECT count( * ) ....)
- gdy suma == 0 wyswietlasz pusta strone
- gdy == 1 wyswietlasz jedno centralne zjdecie
- gdy > 1
* liczba stron == ilosci zdjec (patrz przyklad)
* w zaleznosci od nr strony:
+ gdy nr strony == 2 lub (ilosc_stron - 1) to wyswietlasz dwa zdjecia
(SELECT * ..... LIMIT $str,2 )
+ gdy nr strony != 2 i != od (ilosc_stron - 1) to wyswietlasz 3 zdjecia
na stronie $str wyswietlasz zdjecia (SELECT * .... LIMIT $str - 1, 3)
miszqa
to bylo by dobre lecz przy ilosci kilkuset zdjec lepiej wyswietlac po 12 zdjec na stronie aby miec szybszy dostep do danego zdjecia

poza tym takie rozwiazanie przy 100 zdjeciach wyswietlalo by 100 zdjec co zajmie sporo czasu
bigZbig
Przyjrzyj sie temu co napisalem pod spodem. Nie jest to gotowe rozwiazanie tylko pare wzorow, ktore moga pomoc Ci rozwiazac Twoj problem.

  1. <?php
  2. //Odczytujesz calkowita liczbe zdiec z bazy danych SELECT count(id_zdiacie) FROM zdiecia;
  3. $c_l_zdiec = 100; //calkowita liczbe zdiec
  4.  
  5. //Ustalasz wartosci: liczbe zdiec na stronie i liczbe kolumn
  6. $l_kolumn = 3; //liczba kolumn w tabeli
  7. $l_zdiec = 12; //liczba zdiec na stronie
  8.  
  9. //Teraz mozesz obliczyc
  10. // Obliczamy liczbe stron
  11. $l_stron = ceil($c_l_zdiec/$l_zdiec); // 9
  12.  
  13. //Przykladowo obliczamy na ktorej stronie znajdzie sie zdiecie z indeksem i=45
  14. $i_zdiecia=45;
  15. $strona = ceil(($i_zdiecia+1)/$l_zdiec); // 4
  16.  
  17. //Obliczamy, jaki indeks bedzie mialo pierwsze zdiecie na 7 stronie
  18. $i_zdiecia = ((7*$l_zdiec)-1); // 83
  19.  
  20. //Odczytujesz zdiecia z bazy danych, te ktore powinny sie pojawic na 7 stronie
  21. $query = 'SELECT * FROM zdiecia ORDER BY id_zdiecie LIMIT '.$i_zdiecia.', '.$l_zdiec.''; // LIMIT 83, 12
  22.  
  23. //Wynik zapisujemy do tablicy
  24. $zdiecia = array(
  25. '0' => 'img1',
  26. '1' => 'img2',
  27. '2' => 'img3',
  28. '3' => 'img4',
  29. '4' => 'img5',
  30. '5' => 'img6',
  31. '6' => 'img7',
  32. '7' => 'img8',
  33. '8' => 'img9',
  34. '9' => 'img10',
  35. '10' => 'img11',
  36. '11' => 'img12',
  37. );
  38.  
  39. //Wyswietlamy ikony w 3 kolumnach po 12 obrazkow na stronie
  40. print '<table>';
  41. $i=0;
  42. for($tr=0; $tr<ceil($l_zdiec/$l_kolumn); $tr++) {
  43. print '<tr>';
  44. for($td=0; $td<$l_kolumn; $td++) {
  45. print '<td>'.$zdiecia[$i++].'</td>';
  46. }
  47. print '</tr>';
  48. }
  49. print '</table>';
  50. ?>
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.