Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Podówjne pobieranie z bazy
IceManSpy
post 20.08.2010, 21:24:08
Post #1





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Witam

Zastanawiam się, czemu wyświetlają mi się 2 razy rekordy. Chcę też stworzyć system templatek wg tego linku:
http://www.programuj.com/artykuly/www/template.php
Więc co mam:
  1. class Template {
  2. var $tmpl;
  3. var $dane;
  4.  
  5. function Template ($name)
  6. {
  7. $this->tmpl = implode('', file($name));
  8. $this->dane = Array();
  9. }
  10.  
  11. function add($name, $value = '')
  12. {
  13. if (is_array($name)) {
  14. $this->dane = array_merge($this->dane, $name);
  15. } else if (!empty($value)) {
  16. $this->dane[$name] = $value;
  17. }
  18. }
  19.  
  20. function execute() {
  21. return preg_replace('/{([^}]+)}/e', '$this->dane["\\1"]',
  22. $this->tmpl);
  23. }
  24.  
  25. }
  26. class Bazowa
  27. {
  28. public function PobierzDane()
  29. {
  30. $db = new mysqli("localhost", "root", "haselko", "test");
  31. if($db->connect_errno){
  32. die('Błąd połączenia: ' . $db->connect_errno);
  33. }
  34. $sql = "select * from tabela1";
  35. $zapytanie = $db->query($sql);
  36. while($wynik=$zapytanie->fetch_assoc())
  37. {
  38. $dane[]= $wynik;
  39. }
  40. $db->close();
  41. return $dane;
  42. }
  43. function Wyswietl($tablica)
  44. {
  45. foreach($tablica as $wyn)
  46. {
  47. foreach($wyn as $pokaz => $wart)
  48. {
  49. echo $pokaz." = ".$wart."<br />";
  50. }
  51.  
  52. }
  53.  
  54. echo "</table>";
  55.  
  56. }
  57. function Dodaj($id,$nazwa)
  58. {
  59. $db = new mysqli("localhost", "root", "qweasd", "test");
  60. $sql = "insert into `tabela1` values ($id , '$nazwa')";
  61. $db->query($sql);
  62. $db->close();
  63. echo "Dodano nowy rekord<br>";
  64. $dane = self::PobierzDane();
  65. self::Wyswietl($dane);
  66. }
  67. function __destruct()
  68. {
  69. echo "Obiekt został zniszczony!";
  70. }
  71. }
  72. $wiz = new Bazowa();
  73. $dane = $wiz->PobierzDane();
  74. print_r($dane);
  75. echo "<br><br>";
  76. $wiz->Wyswietl($dane);

Baza wygląda tak, że mam 2 tabele: ID i nazwa i tam są przykładowe dane (6 wierszy). Jeśli odpalę powyższy kod to jest ok - raz się wyświetla. Jednak jeśli przerobię funkcję wyświetlającą na taką:
  1. function Wyswietl($tablica)
  2. {
  3. echo "<table border=\"1\">";
  4. foreach($tablica as $wyn)
  5. {
  6. foreach($wyn as $pokaz => $wart)
  7. {
  8. $tmpl = new Template('temp.tmp.php');
  9. $tmpl->add($wyn);
  10. echo $tmpl->execute();
  11. }
  12.  
  13. }

To otrzymuję podwójne wyniki tzn ID 1 1 2 2 3 3 4 4.
Jeśli chodzi o plik z templatką to:
Kod
<tr>
<td bgcolor="silver">
  {ID}
</td>
<td>
  {nazwa}
</td>
</tr>

Gdzie tkwi błąd?
Jeśli dopiszę do tej 2 funkcji wyświetlającej print_r($wyn); nad $tmpl->add($wyn); to dostaję:
Array ( [ID] => 1 [nazwa] => php ) Array ( [ID] => 1 [nazwa] => php ) Array ( [ID] => 9 [nazwa] => c++ ) Array ( [ID] => 9 [nazwa] => c++ ) Array ( [ID] => 7 [nazwa] => kurs ) Array ( [ID] => 7 [nazwa] => kurs ) Array ( [ID] => 4 [nazwa] => mysql ) Array ( [ID] => 4 [nazwa] => mysql ) Array ( [ID] => 5 [nazwa] => oracle ) Array ( [ID] => 5 [nazwa] => oracle ) Array ( [ID] => 6 [nazwa] => js ) Array ( [ID] => 6 [nazwa] => js ) Array ( [ID] => 10 [nazwa] => C# ) Array ( [ID] => 10 [nazwa] => C# )
Czyli widać, że pobiera za dużo razy, ale dlaczego?

A może jest jakiś inny sposób na pobranie danych z bazy, przypisanie do jakiejś zmiennej, aby potem przekazać i wykorzystać w templatce?

Ten post edytował IceManSpy 20.08.2010, 21:31:29


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 11:20