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:
class Template { var $tmpl; var $dane; function Template ($name) { } function add($name, $value = '') { $this->dane[$name] = $value; } } function execute() { $this->tmpl); } } class Bazowa { public function PobierzDane() { $db = new mysqli("localhost", "root", "haselko", "test"); if($db->connect_errno){ exit; } $sql = "select * from tabela1"; $zapytanie = $db->query($sql); while($wynik=$zapytanie->fetch_assoc()) { $dane[]= $wynik; } $db->close(); return $dane; } function Wyswietl($tablica) { foreach($tablica as $wyn) { foreach($wyn as $pokaz => $wart) { } } } function Dodaj($id,$nazwa) { $db = new mysqli("localhost", "root", "qweasd", "test"); $sql = "insert into `tabela1` values ($id , '$nazwa')"; $db->query($sql); $db->close(); $dane = self::PobierzDane(); self::Wyswietl($dane); } function __destruct() { } } $wiz = new Bazowa(); $dane = $wiz->PobierzDane(); $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ą:
function Wyswietl($tablica) { foreach($tablica as $wyn) { foreach($wyn as $pokaz => $wart) { $tmpl = new Template('temp.tmp.php'); $tmpl->add($wyn); } }
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>
<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?