Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z zapytaniem SQL (Class)
Forum PHP.pl > Forum > PHP
moto0095
Witam.
Ostatnio zrobiłem sobie taką klasę do pobierania materiałów z bazy i mam problem z "podawaniem" zapytania:
  1. class GetMedia {
  2. protected $array = array();
  3. public $sql;
  4.  
  5. public function GetMedia($sql) {
  6. $this->sql = $sql;
  7. }
  8.  
  9. function __construct() {
  10. global $db;
  11. $res = $db->query($this->sql); // tu mi się wyświetli prośbę o podanie zapytania.
  12. while($row = $res->fetch_array()) {
  13. $this->array[] = $row;
  14. }
  15. }
  16.  
  17. public function Draw(){
  18. return $this->array;
  19. }
  20. }
nospor
Cytat
$res = $db->query($this->sql); // tu mi się wyświetli prośbę o podanie zapytania.
No bo przeciez na tym etapie $this->sql nie jest ustawione. Nic wiec dziwnego ze prosi cie o te sql. smile.gif
moto0095
@nospor czyli jak to powinno wyglądać questionmark.gif
nospor
No jesli z jakiegos dziwnego powodu konstruktor ma wykonac to zapytanie, to przekaz te $sql jako parametr do tego konstruktora.
moto0095
Dzięki. Oświeciło mnie. Tka to wygląda po zmianie :
  1. class GetMedia {
  2. protected $array = array();
  3.  
  4. function __construct($sql) {
  5. global $db;
  6. $res = $db->query($sql);
  7. while($row = $res->fetch_array()) {
  8. $this->array[] = $row;
  9. }
  10. }
  11.  
  12. public function Draw(){
  13. return $this->array;
  14. }
  15. }


Tak aby nie zaczynać nowego tematu:
Mam jeszcze taki problem:
Plik index.php:
  1. [...]
  2. @include_once('class.php');
  3. @include_once("class.TemplatePower.inc.php");
  4. $tpl = new TemplatePower('index.tpl');
  5. [...]


Plik class.php
  1. class Media {
  2. protected function DrawArray(){
  3. global $tpl; // <---tutaj
  4. foreach($this->array as $value){
  5. $tpl->newBlock('media'); // <---tutaj
  6. $tpl->assign(array('id' => $r['id'], // <---tutaj
  7. 'nick' => $r['nick'],
  8. 'kategoria' => $r['kategoria'])
  9. );
  10. }
  11. }
  12. }


Chodzi o to, że wklasie chciałbym utworzyć blok ($tpl->newBlock('media'); ) dla szablonu ($tpl) ale nie mogę / nie wiem jak to zrobić.

W sensie nie wiem jak przekazać $tpl

Może inaczej : Czy ta się / Jak wykorzystać w klasie zewnętrzną zmienną questionmark.gif
nospor
Teoretycznie zrobiles to prawidlowo. Ale
1) $tpl = new TemplatePower('index.tpl');
Czy ten kod masz w glownym pliku czy moze w pliku includowanym
2) $tpl = new TemplatePower('index.tpl');
czy ten kod jest przed wywolaniem funkcji DrawArray a moze po?
moto0095
Cytat
Teoretycznie zrobiles to prawidlowo. Ale
1) $tpl = new TemplatePower('index.tpl');
Czy ten kod masz w glownym pliku czy moze w pliku includowanym
2) $tpl = new TemplatePower('index.tpl');
czy ten kod jest przed wywolaniem funkcji DrawArray a moze po?


Ok, to cały plik index.php :
  1. <?
  2. header("Content-Type:text/html;charset=iso-8859-2");
  3.  
  4. try{
  5. @include_once('connect.php'); // połączenie z bazą
  6. @include_once('class.php'); // klasy: GetMedia, Media, Menu
  7. @include_once("class.TemplatePower.inc.php"); // klasa szablonu
  8.  
  9. $sql = 'SELECT * FROM m_dowcipy';
  10.  
  11. $tpl = new TemplatePower('index.tpl');
  12. $menu = new Menu;
  13. $tpl->prepare();
  14. $media = new GetMedia($sql);
  15.  
  16. $menu->Draw();
  17. $media->Draw();
  18.  
  19. $tpl->printToScreen();
  20.  
  21. } catch(Exception $e) {
  22. echo $e->getMessage();
  23. }
  24. die();
  25. ?>
nospor
  1. global $tpl;
  2. $tpl = new TemplatePower('index.tpl');

Jesli to nie zadziala to zrob:
  1. protected function DrawArray(){
  2. global $tpl; // <---tutaj
  3. var_dump($tpl);
  4. //....

Jak sie wyswietli twoj $tpl znaczy ze wszystko w porządku a ty nie umiesz uzywac $tpl. Jak sie nie wyswietli to nie wiem smile.gif
moto0095
Działa, ale miałem durny błąd:
  1. foreach($this->array as $value){
  2. $tpl->newBlock('media');
  3. $tpl->assign(array('id' => $r['id'],
  4. 'nick' => $r['nick'],
  5. 'kategoria' => $r['kategoria'])
  6. );
  7. }

W foreach miałem "this->array as $value" a potem $r plus
  1. global $tpl;
  2. $tpl = new TemplatePower('index.tpl');


i działa. WIELKIE DZIĘKI I WESOŁYCH ŚWIĄT RYCZĘ exclamation.gif
nospor
No tak... tak to jest jak sie olewa błędy NOTICE. Tu masz napisane jak je wlaczyc:
Temat: Jak poprawnie zada pytanie
Zapoznaj sie tez z innymi poradami - na pewno sie przydadzą smile.gif
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.