Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Problem z loop
Forum PHP.pl > Forum > Przedszkole
-ado-
Witam. Uczę się tworzyć templatki. Mam jeden problem z pętlą while:

Tak wygląda mój kod php.
  1. <?php
  2. $sql = mysql_query("SELECT * FROM changes WHERE qid = '$p' AND module='pages'");
  3. while($row = mysql_fetch_array($sql))
  4. {
  5. $tpl->assign("changes",$row);
  6. }
  7. ?>


I Smarty:
Kod
<tr><td>
{section name=i loop=$changes}
{$changes[i][descr]}<br/>
{/section}
</td></tr>


Kod z tplu się nie wykonuje.
JoShiMa
Bo z tablicami asocjacyjnymi, a o taką ty chodzi jest trochę inaczej.
Trzeba tak:
  1. {section name=i loop=$changes}
  2. {$changes[i].descr}<br/>
  3. {/section}


bo przecież nie masz w tpl zmiennej typu int o nazwie descr smile.gif

PS. W tytule powinno być [Smarty] a nie [PHP][MYSQL] tongue.gif
-ado-
Sorry za temat, ale nie wiedziałem że jest taki coś jak SMARTY

Co do twojego rozwiązania to niestety nie działa.

Spróbuj jeszcze coś pomyśleć nad tym, a może ktoś ma jeszcze jakiś pomysł
Heweliusz
Jeżeli chcesz wyświetlić dane z bazy, to istnieje lepszy sposób niż pętla while.
Spróbuj konstrukcji z foreach oraz for:

  1. <?php
  2. $sql = mysql_query("SELECT * FROM changes WHERE qid = '$p' AND module='pages'");
  3.  
  4. for ($i=1; $row = mysql_fetch_assoc($sql); $i++)
  5. {
  6. $list[$i] = $row;
  7. }
  8. $tpl->assign('list', $list);
  9. ?>

Szablon:
  1. {foreach from=$list key='key' item='value'}
  2. {foreach from=$value key='_key' item='_value'}
  3. {$_value}<br />
  4. {/foreach}
  5. {/foreach}
-ado-
Kurder, dalej dostaję wynik:

{foreach from=$list key='key' item='value'} {foreach from=$value key='_key' item='_value'}
{/foreach} {/foreach}

Nie wiem co się dzieje że tego nie parsuje
JoShiMa
Cytat(-ado- @ 8.08.2008, 11:57:25 ) *
Co do twojego rozwiązania to niestety nie działa.


No oczywiście, że nie działa. Przecież tablica $row jest jednowymiarowa.

Zrób tak:
  1. <?php
  2. $sql = mysql_query("SELECT * FROM changes WHERE qid = '$p' AND module='pages'");
  3. while($row = mysql_fetch_array($sql))
  4. {
  5.  $rows[] = $row;
  6. }
  7. $tpl->assign("changes",$rows);
  8. ?>


A dalej tak jak napisałam. Powinno zadziałać. Chyba, że w tablicy $row nie ma pola o indeksie ['descr']. Pokaż pola tabeli changes.
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.