Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z zapytaniem SQL (Class)
moto0095
post 21.12.2010, 14:30:06
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


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. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post 21.12.2010, 14:32:50
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
moto0095
post 21.12.2010, 14:35:20
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


@nospor czyli jak to powinno wyglądać questionmark.gif
Go to the top of the page
+Quote Post
nospor
post 21.12.2010, 14:36:23
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No jesli z jakiegos dziwnego powodu konstruktor ma wykonac to zapytanie, to przekaz te $sql jako parametr do tego konstruktora.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
moto0095
post 23.12.2010, 07:45:49
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


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

Ten post edytował moto0095 21.12.2010, 23:05:23
Go to the top of the page
+Quote Post
nospor
post 23.12.2010, 08:21:09
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
moto0095
post 23.12.2010, 10:45:29
Post #7





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


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. ?>


Ten post edytował moto0095 23.12.2010, 10:48:53
Go to the top of the page
+Quote Post
nospor
post 23.12.2010, 10:50:13
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
moto0095
post 23.12.2010, 11:04:55
Post #9





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


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
Go to the top of the page
+Quote Post
nospor
post 23.12.2010, 11:14:49
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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.06.2025 - 18:29