Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Problem z loop
--ado--
post
Post #1





Goście







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.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

PS. W tytule powinno być [Smarty] a nie [PHP][MYSQL] (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował JoShiMa 8.08.2008, 10:33:29
Go to the top of the page
+Quote Post
--ado--
post
Post #3





Goście







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ł
Go to the top of the page
+Quote Post
Heweliusz
post
Post #4





Grupa: Zarejestrowani
Postów: 46
Pomógł: 8
Dołączył: 19.03.2007
Skąd: z nad Jarugi

Ostrzeżenie: (0%)
-----


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}
Go to the top of the page
+Quote Post
--ado--
post
Post #5





Goście







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
Go to the top of the page
+Quote Post
JoShiMa
post
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował JoShiMa 8.08.2008, 11:32:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:52