Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Smarty] - Wykonywanie zapytań
Forum PHP.pl > Forum > Przedszkole
elldiablo
Witam,

Wykonuje zapytanie do bazy danych, gdzie są 2 rekordy.
  1. $query = 'SELECT * FROM mb_users';
  2. if(PEAR::isError($result = & $dbh->query($query)))
  3. throw new Exception ($result->getMessage());
  4. else {
  5. while($persons = $result->fetchRow(DB_FETCHMODE_OBJECT)) {
  6. if(PEAR::isError($persons))
  7. throw new Exception($persons->getMessage());
  8. $_Id = $persons->USR_id;
  9. $_Name = $persons->USR_name;
  10. $_Surname = $persons->USR_surname;

następnie chciałbym zmienne przesłać do szablonu smarty
Zrobiłem coś takiego
  1. $smarty->assign('persons', $persons);
  2. }
  3. }
  4. }
  5. } catch (Exception $error) {
  6. exit ($error);
  7. }
  8. $content = 'index.tpl';
  9. $smarty->display($content);


W szablonie smarty zrobiłem pętle.
  1. <table border="1" width="100%">
  2. {foreach item=person from=$persons}
  3. <tr>
  4. <td>{$persons->USR_id}</td>
  5. <td>{$persons->USR_name}</td>
  6. <td>{$persons->USR_surname}</td>
  7. </tr>
  8. {/foreach}
  9. </table>


Wynik jest taki, że ostatni rekord jest wyświetlany 5 razy.

Co robię źle, i co należy zrobić żeby skrypt pobrał i wyświetlił mi wszystkie rekordy tylko raz?

Pozdrawiam,
Jacek.
nospor
while($persons = $result->fetchRow(DB_FETCHMODE_OBJECT)) {
Przeciez tutaj za kazdym razem do $persons wkladasz aktualnie przetwarzany rekord i nadpisujesz poprzedni.
Musisz zrobic z tego tablice i do tablicy zapisywac
elldiablo
Witam ponownie

  1. while($users = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
  2. if(PEAR::isError($users))
  3. throw new Exception($users->getMessage());
  4.  
  5. $user['userid'] = $users['USR_id'];
  6. $user['username'] = $users['USR_name'];
  7. $user['usersurname'] = $users['USR_surname'];
  8. $wynik[] = $user;
  9. }
  10.  
  11. echo '<pre>';
  12. var_dump($wynik);
  13. echo '</pre>';
  14.  
  15. $smarty->assign('wynik', $wynik);


Wynik z tablicy jest następujący:
  1.  
  2. array(3) {
  3. [0]=>
  4. array(3) {
  5. ["userid"]=>
  6. string(1) "1"
  7. ["username"]=>
  8. string(5) "Jacek"
  9. ["usersurname"]=>
  10. string(10) "Flantowicz"
  11. }
  12. [1]=>
  13. array(3) {
  14. ["userid"]=>
  15. string(1) "2"
  16. ["username"]=>
  17. string(8) "Grzegorz"
  18. ["usersurname"]=>
  19. string(7) "Szustak"
  20. }
  21. [2]=>
  22. array(3) {
  23. ["userid"]=>
  24. string(1) "4"
  25. ["username"]=>
  26. string(7) "Marysia"
  27. ["usersurname"]=>
  28. string(8) "Kowalska"
  29. }
  30. }


Szablon smarty wygląda następująco:
  1. {foreach from=$wynik item=res}
  2. <p>{$wynik.username}</p>
  3. <p>{$wynik.usersurname}</p>
  4. {/foreach}


I kod nic mi nie zwraca. Co robię źle?
Proszę o pomoc.

Cześć,

Znalazłem błąd w kodzie smarty:
jest tak:

  1. {foreach item=product from=$products}
  2. <tr>
  3. <td>{$products.Id}</td>
  4. <td><a href="shop.php?id={$products.Id}">{$products.Name}</a></td>
  5. <td>{$products.Price}</td>
  6. </tr>
  7. {/foreach}


a powinno być tak:
$zmienna -> powinna być z "item" a nie z "from"
  1. {foreach item=product from=$products}
  2. <tr>
  3. <td>{$product.Id}</td>
  4. <td><a href="shop.php?id={$product.Id}">{$product.Name}</a></td>
  5. <td>{$product.Price}</td>
  6. </tr>
  7. {/foreach}
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.