Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z pętlą
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
verio
Witam. Wczoraj zacząłem swoją przygodę ze Smarty. Już na początku trafiłem na problem, którym sam sobie poradzić nie potrafię.

Napisałem taki kod w PHP:
  1. function get_category($cat){
  2. $mysql=mysql_query("SELECT name, place, age, artikel, photo FROM cat$cat");
  3. $mysql=mysql_fetch_array($mysql);
  4. return $mysql;
  5. }


Wywołuję szablon w taki sposób:
  1. $smarty->assign("data", get_category($_GET['cat']));
  2. $smarty->display("items.tpl.htm");


W items.tpl.htm utworzyłem kod:
  1. {include file="header.tpl.htm"}
  2. {foreach item=item key=key from=$data}
  3. {$key}: {$item.name}<br />
  4. {$key}: {$item.place}<br />
  5. {$key}: {$item.age}<br />
  6. {$key}: {$item.artikel}<br />
  7. {$key}: {$item.photo}<br />
  8. {/foreach}
  9. {include file="footer.tpl.htm"}


Natomiast wpis w bazie danych wygląda następująco:
  1. INSERT INTO `cat1` (`id`, `name`, `place`, `age`, `artikel`, `line1`, `line2`, `photo`) VALUES
  2. (1, 'Some item', 'Poland', '35 years', '2233', 'Something into line 1', 'Something into line 2', 'some.jpg');


Spodziewany efekt miał wyglądać tak:
  1. name: Some item<br />
  2. place: Poland<br />
  3. age: 35 years<br />
  4. artikel: 2233<br />
  5. photo: some.jpg<br />
i tak kilkukrotnie, jeżeli dodane zostałyby kolejne wpisy. Niestety wynik dosyć mocno odbiega od tego, czego się spodziewałem. Wygląda on tak:
  1. 0: S<br />
  2. 0: S<br />
  3. 0: S<br />
  4. 0: S<br />
  5. 0: S<br />
  6. name: S<br />
  7. name: S<br />
  8. name: S<br />
  9. name: S<br />
  10. name: S<br />
  11. 1: P<br />
  12. 1: P<br />
  13. 1: P<br />
  14. 1: P<br />
  15. 1: P<br />
  16. place: P<br />
  17. place: P<br />
  18. place: P<br />
  19. place: P<br />
  20. place: P<br />
  21. 2: 3<br />
  22. 2: 3<br />
  23. 2: 3<br />
  24. 2: 3<br />
  25. 2: 3<br />
  26. age: 3<br />
  27. age: 3<br />
  28. age: 3<br />
  29. age: 3<br />
  30. age: 3<br />
  31. 3: 2<br />
  32. 3: 2<br />
  33. 3: 2<br />
  34. 3: 2<br />
  35. 3: 2<br />
  36. artikel: 2<br />
  37. artikel: 2<br />
  38. artikel: 2<br />
  39. artikel: 2<br />
  40. artikel: 2<br />
  41. 4: s<br />
  42. 4: s<br />
  43. 4: s<br />
  44. 4: s<br />
  45. 4: s<br />
  46. photo: s<br />
  47. photo: s<br />
  48. photo: s<br />
  49. photo: s<br />
  50. photo: s<br />


Pomożecie w rozwiązaniu?
wookieb
  1. $mysql=mysql_fetch_array($mysql);

Bo przecież tutaj pobierasz jeden rekord i tak naprawdę iterujesz po tej tablicy (jednego rekordu). Więć pętla wykonuje się dla KAŻDEJ wartości w owym rekordzie.
verio
Chciałbym jednak, by skrypt działał zarówno dla wielu rekordów jak i dla jednego, tak jak w tym przykładzie.

  1. $mysql=mysql_fetch_assoc($mysql);

Zwraca
  1. name: S<br />
  2. name: S<br />
  3. name: S<br />
  4. name: S<br />
  5. name: S<br />
  6. place: P<br />
  7. place: P<br />
  8. place: P<br />
  9. place: P<br />
  10. place: P<br />
  11. age: 3<br />
  12. age: 3<br />
  13. age: 3<br />
  14. age: 3<br />
  15. age: 3<br />
  16. artikel: 2<br />
  17. artikel: 2<br />
  18. artikel: 2<br />
  19. artikel: 2<br />
  20. artikel: 2<br />
  21. photo: s<br />
  22. photo: s<br />
  23. photo: s<br />
  24. photo: s<br />
  25. photo: s<br />

Więc też nie o to mi chodziło... Nie mam już zupełnie pomysłów jak to ugryźć. Nie da się ustalić, by pętla w tym przypadku wykonywała się tyle razy, ile jest elementów w tabeli? [w tym przypadku raz]
wookieb
...
  1. $wynik = array();
  2. while ($rekord=mysql_fetch_array($mysql)) {
  3. $wynik[] = $rekord;
  4. }
  5. return $wynik;

Ludzie to są podstaw obsługi baz danych!
verio
Korzystałem z tej opcji, niestety widać musiała mi wpaść jakaś literówka, lub inny błąd. Działa, dziękuję. Można zamknąć.
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.