Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie obrazków z rekkordów bazy danych-problem
Forum PHP.pl > Forum > PHP
benq20
Witammam kolejny problem otóż zrobiłem sobie coś takiego że mają się mi wyświetlać z bazy dancyh rekordy dwuch tabel oferty i obrazki a z obrazków tylko oczywiście obrazki każdy dopasowany do odpowiedniej kolumny tabeli oferty.No ale nie chcą się wyświetlać wyświetla się tylko ten ostatni pzy sotatnim rekordzie.Oto moj skomplikowany kod:

  1. $db=mysql_connect("localhost", "root", "");
  2. mysql_select_db("bazaam",$db) or die(mysql_errno() . ": " . mysql_error() . "<br>");
  3. $limit = 10;
  4. $strona = $_GET['str'];
  5. if (!isset($strona)) {
  6. $limit1 = 0;
  7. $limit2 = $limit;
  8. } else{
  9. $limit1 = $limit*$strona-$limit;
  10. $limit2 = $limit;
  11. }
  12. $sql="SELECT* FROM oferty ORDER BY idoferty ASC LIMIT $limit1,$limit2";
  13. $result=mysql_query($sql);
  14. $rows=mysql_num_rows($result);
  15. echo "<table id='of'>\n";
  16. echo " <tr>\n";
  17. echo " <td id='fm'></td>\n";
  18. echo " <td id='ff'align='center'>Nr Oferty</td>\n";
  19. echo " <td id='fh'align='center'>cena</td>\n";
  20. echo " <td id='fi'align='center'>powierzchnia</td>\n";
  21. echo " <td id='fj'align='center'>lokalizacja</td>\n";
  22. echo " <td id='fk'align='center'></td>\n";
  23. echo " <td> </td>\n";
  24. echo " </tr>\n";
  25. while ($data=mysql_fetch_object($result)){
  26. echo " <tr>\n";
  27. $wynik=mysql_query("SELECT * FROM obrazki");
  28. $liczba=mysql_num_rows($wynik);
  29. $pam=mysql_fetch_object($wynik);
  30. if ($pam->number==$data->idoferty){
  31. for ($i=1; $i<=1; $i++){
  32. echo " <td><img src='pict/$pam->name' width='70px' height='50px'/></td>\n";}}
  33. echo " <td align='center'>$data->idoferty</td>\n";
  34. echo " <td align='center'>$data->cena</td>\n";
  35. echo " <td align='center'>$data->pow</td>\n";
  36. echo " <td align='center'>$data->lok</td>\n";
  37. echo " <td align='center'><a href='informacje.php?a=$data->idoferty'><img src='strzalka2.png'/></a></td>\n";
  38. echo " </tr>\n"; }
  39. echo "Strony: ";
  40. list($ile)=mysql_fetch_row(mysql_query("SELECT count(*) FROM oferty"));
  41. $czba_stron = $ile / $limit;
  42. $czba_stron = ceil($czba_stron);
  43. for ($v = 1; $v<= $czba_stron; $v++) {
  44. if ($czba_stron == 1) {
  45. echo "$v";
  46. }
  47. else {
  48. echo " <a href=\"?str=$v\" title=\"Strona $v\">$v</a> ";
  49. }
  50. }


Dobra poradziłem sobie żeby wyświetlał dla każdej ofert osobny obrazek tylko jeżeli np. dla jednej oferty są dw obrazki w galeri to wyświetla 2 a ma wyświetlać tylko jeden bez róznicy na ilość obrazków zgodnych z warunkiem if.
Oto część kodu którą zmieniłem:
  1. $wynik=mysql_query("SELECT * FROM obrazki");
  2. $liczba=mysql_num_rows($wynik);
  3. while ($pam=mysql_fetch_array($wynik)){
  4. if ($pam[number]==$data[idoferty]){
  5. echo " <td><img src='pict/$pam[name]' width='70px' height='50px'/></td>\n";}}

Nich ktoś w końcu odpowie bo domyślam się ze problem jest w pętli while wędruje ona przez wszystkie rekordy tabeli i wszystkie wyświetla zgodne z waruniem if ale żeby przechodziło przez wszystkie ale wyświetlało tylko jeden obrazek!jak to zrobićquestionmark.gif?
mortus
A nie prościej zrobić zapytanie, które będzie pobierało po prostu jeden obrazek:
  1. $wynik=mysql_query("SELECT * FROM obrazki WHERE number={$data->idoferty} LIMIT 1");

Ale najlepiej połączyć wszystko JOIN-em i zrobić to co chcesz w jednym zapytaniu:
  1. $sql="SELECT *, obrazek.name AS obrazek FROM oferty o LEFT JOIN (SELECT * FROM obrazki i WHERE i.number = o.idoferty LIMIT 1) AS obrazek ON obrazek.number=o.idoferty ORDER BY idoferty ASC LIMIT $limit1, $limit2";

Drugie zapytanie pisane z głowy, więc nie jestem pewien czy na 100% zadziała. Natomiast to jest najbardziej optymalne rozwiązanie, jeśli chodzi o tego typu operacje na bazach danych.
benq20
No dobra nie wiem oc oc chodzi w tym joinie ale to pierwsze działa prawidłowo także dzieki mozna zamknąć temat.

Dobra pojawił się jeszcze jeden problem a poniewąż jest związany z tym kodem więć umieszcam w tym samym temacie.
chodzi o to że wypozycjonowałem za pomocą css tą tabele generowaną przez php co jest powyżej. i za każdym razem kiedy dodaje nową oferte do bazy mysql i ma wyświetlić ten skrypt to się pozycjonowanie psuje? jak to ustawić aby bez różnicy ile dodam rekordów do bazy zawszewyświetlało się w tym samym miejscu a nie chodziło po stronie?
toaspzoo
Cytat
(...)dwuch(...)


O matko !
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.