Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

4 Stron V  < 1 2 3 4 >  
Reply to this topicStart new topic
> [PHP]skrypt w OOP, Czy dobrze??
Cysiaczek
post 9.03.2008, 17:17:25
Post #21





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Bo nie będę Ci przecież wszystkich funkcji pisał. Każdy ma jakieś własne, a to jest pseudokod, więc tylko sygnalizuje pewne rzeczy. Przeceż każdy rozumie o co chodzi z getLastInsertId i dlaczego zostało użyte.

Pozdrawiam


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 9.03.2008, 18:29:30
Post #22





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Wykombinowalem cos takiego bylbym wdzieczny jak ktos powie co jeszcze zle robie co moge poprawic zeby kod byl bardziej elastyczny etc

@Cysiaczek wielkie dzieki troche mi to rozjasnilo idee ale czemu tyle class?
  1. <?php
  2.  
  3. include('config.php');
  4.  
  5. class Guest {
  6.  
  7. public $data, $ip, $host, $nick, $message, $strona, $id;
  8. private $pasy, $action, $method, $db;
  9.  
  10. public function __construct($nick, $message, $action, $method) {
  11.  
  12. global $pasy;
  13.  
  14. $this -> action = $action;
  15. $this -> method = $method;
  16. $this -> strona = (int)$_GET['strona'];
  17. $this -> id = (int)$_GET['id'];
  18. $this -> data = date('j/n/Y H:i:s');
  19. $this -> nick = htmlspecialchars(addslashes($nick));
  20. $this -> message = htmlspecialchars(addslashes($message));
  21. $this -> ip = $_SERVER['REMOTE_ADDR'];
  22. $this -> host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  23. $this -> pasy = $pasy;
  24. }
  25.  
  26.  
  27. public function getnick() {
  28.  
  29. return $this -> nick;
  30. }
  31.  
  32. public function getmsg() {
  33.  
  34. return $this -> message;
  35. }
  36.  
  37. public function getdate() {
  38.  
  39. return $this -> data;
  40. }
  41.  
  42. public function getip() {
  43.  
  44. return $this -> ip;
  45. }
  46.  
  47. public function db_connect() {
  48.  
  49. if($this -> db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  50. mysql_select_db($this->pasy['baza']);
  51. return true;
  52. }
  53.  
  54. else return false;
  55.  
  56. }
  57.  
  58.  
  59. public function db_close() {
  60.  
  61. mysql_close($this -> db);
  62.  
  63. }
  64.  
  65.  
  66. public function new_query($query) {
  67.  
  68. $this -> db_connect();
  69. if($result = mysql_query($query))
  70. return $result;
  71.  
  72. else return die(mysql_error());
  73. $this -> db_close();
  74.  
  75. }
  76.  
  77.  
  78. public function num_rows($resource) {
  79.  
  80. if($result = mysql_num_rows($resource)) return $result;
  81. else return false;
  82. }
  83.  
  84. public function fetch_assoc($resource) {
  85.  
  86. if($result = mysql_fetch_assoc($resource)) return $result;
  87. else return false;
  88. }
  89.  
  90. public function addentry() {
  91.  
  92. $this -> new_query("insert into ksiega_gosci(nick,message,data,ip,kod) values('".$this -> getnick()."', '".$this -> getmsg()."', '".$this -> getdate()."', '".$this -> getip()."', '')");
  93. $host = $_SERVER['HTTP_HOST'];
  94. $uri = rtrim(dirname($_SERVER['PHP_SELF']), '');
  95.  
  96. }
  97.  
  98. public function load_reply($on_page = 15) {
  99.  
  100. $wynik1 = $this -> new_query("select * from ksiega_gosci order by id desc limit ".$this -> strona*$on_page.",".$on_page);
  101.  
  102. while($tab = $this -> fetch_assoc($wynik1)) {
  103. echo('<table border="1" width="75%" align="center" style="border: 1px dotted red;"><tr><td width="40%">Dodal: '.stripslashes($tab['nick']).'</td><td width="26%">Dnia:'.$tab['data'].'</td></tr>
  104. <tr><td><b>'.stripslashes($tab['message']).'</b></td></tr></table></form>');
  105. }
  106. }
  107.  
  108. public function pager($on_page = 15) {
  109.  
  110. $wynik = $this -> new_query("select * from ksiega_gosci");
  111. $num = $this -> num_rows($wynik);
  112. $how_much = ceil($num/$on_page);
  113.  
  114. if(!isset($this -> strona)) $this -> strona = 0;
  115.  
  116. if($this -> num_rows($wynik) == 0) {
  117.  
  118. echo('<script>alert("Nie ma wpisow");</script>');
  119. }
  120.  
  121. echo('<Br><center><b>Strona: '.($this -> strona).' z '.($how_much-1).'</b></center>');
  122.  
  123. if(is_numeric($this -> strona) && !empty($this -> strona) && $this -> strona > 0) {
  124. echo('<center><a href="?strona='.($strona-1).'"><img src='rev.gif' /></a> ');
  125.  
  126. }
  127.  
  128. if(is_numeric($this -> strona) && !empty($this -> strona) && $this -> strona < $how_much) {
  129. echo('<a href="?strona='.($this-> strona+1).'"><img src='next.gif' /></a></center>');
  130.  
  131. }
  132.  
  133. else {
  134. echo('<center><a href="?strona='.($this -> strona+1).'"><img src='next.gif' /></a></center>');
  135.  
  136.  }
  137.  
  138. echo('<table align="center" style="border: 1px dotted red;"><tr><td align="center">');
  139.  
  140. for($i = 0; $i < $how_much; $i++) 
  141. echo('<a href="?strona='.$i.'">['.$i.']</a> ');
  142. echo('</td></tr></table>');
  143.  
  144. }
  145.  
  146. public function Wyswietl_form() {
  147.  
  148. echo('<html>
  149. <head><meta http-equiv="content-type" charset="utf-8" /><title>GuEsT bY MARCIO</title>
  150. <style type="text/css">
  151. a {color:#FDEDF2}
  152. body {color:#FDEDF2}
  153. </style>
  154. </head>
  155. <body bgcolor="#000000">
  156. <center><img src="gora.jpg" width="1240" height="100" alt="obrazek"/></center>
  157. <table align="center" width="75%">
  158. <form action="'.$this -> action.'" method="'.$this -> method.'">
  159. <tr><td align="center"><input type="text" name="nick" size="71" value="Nick" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;"/></td></tr>
  160. <tr><td align="center"><textarea name="message" rows="3" cols="70" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;">Tutaj wpisz wiadomosc</textarea></td></tr>
  161. <tr><td align="center"><input type="submit" name="dodaj" value="Dodaj wpis" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;" /></td></tr>
  162. </form></table>
  163. </body><html>'); 
  164. }
  165.  
  166.  
  167. public function Add_New_reply() {
  168.  
  169.  $this -> Wyswietl_form();
  170.  
  171.  if(!empty($this -> nick) && !empty($this -> message) && isset($_POST['dodaj'])) {
  172.  
  173.  setcookie("Spamer", "Spam", time() + 300);
  174.  
  175.  if($_COOKIE['Spamer'] != "Spam") {
  176.  
  177.  $this->addentry();
  178.  }
  179.  
  180.  else echo('<script>alert("Spadaj spamerze musisz odczekac 5min :)");</script>');
  181.  
  182.  }
  183.  }
  184.  
  185.  
  186. public function Show_All_reply() {
  187.  
  188. $this -> load_reply();
  189. $this -> pager();
  190. }
  191. };
  192.  
  193. $ksiega = new Guest($_POST['nick'], $_POST['message'], 'new_klasa.php', 'post');
  194. $ksiega -> Add_New_reply();
  195. $ksiega -> Show_All_reply();
  196.  
  197. echo('<Br><div style="background:#FFFFFF;color:#000000;text-align:center;border:2px solid:white;"><code><b>Powered by Marcio. GG(4854727)</b><img src="http://www.gadu-gadu.pl/users/status.asp?id=4854727&styl=1"/><Br><a style="color:#000000" href="http://ekmll.com" TARGET="_blank">My site</a></code></div>');
  198. ?>

Mam pytanie co zrobic z tym kodem html??

Ten post edytował marcio 9.03.2008, 18:37:48


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
l0ud
post 9.03.2008, 18:46:58
Post #23





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


marcio, ale dlaczego tym kodem robisz właściwie wszystko? Umieszczanie metod obsługujących bazę to jest przesada - od tego powinien być inny obiekt. Co do kodu html, to powinieneś oddzielić go poprzez jakiś system szablonów, a na pewno nie zawierać w klasie w ten sposób.


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
marcio
post 9.03.2008, 19:01:37
Post #24





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


@l0ud a moglbys pokazac mniej wiecej jak ma wygladac taki system szablonow??Tzn szukam ale znalesc nic ciekawego i prostego nie potrafie

P.S funckje dla bazy mam dac do innej klasy tylko jak je potem polaczyc??Zeby te funckje do mysql dzialaly w innej klasie??Wystarczy samo publuc przy funckjach czy jak??


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Xniver
post 9.03.2008, 23:30:52
Post #25





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Zobacz sobie Open Power Template albo Smarty

Cytat
P.S funckje dla bazy mam dac do innej klasy tylko jak je potem polaczyc??Zeby te funckje do mysql dzialaly w innej klasie??Wystarczy samo publuc przy funckjach czy jak??

Masz tu przykład:
  1. <?php
  2. class Db
  3. {
  4. static protected $instance = null;
  5.  
  6. static public function getInstance()
  7. {
  8. if(self::$instance === null)
  9. {
  10. self::$instance = new Db;
  11. }
  12.  
  13. return self::$instance;
  14. }
  15.  
  16. public function connect()
  17. {
  18. // Łączenie
  19. }
  20. // itd
  21. }
  22.  
  23. // Przykład korzystania
  24. $query = Db::getInstance()->query('SELECT * FROM test');
  25.  
  26. // 2 przykład
  27. $db = Db::getInstance();
  28.  
  29. $query = $db->query('SELECT * FROM test');
  30. ?>


Ten post edytował Xniver 9.03.2008, 23:50:40
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 00:03:43
Post #26





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


OK Xniver wielkie dzieki zaraz lukne co robi ten self:: bo parent:: wywoluje metoda z glownej klasy dobrze mowie??

Mam jednak problem probuje zrobic to na 2 klasach i robie tak
  1. <?php
  2. include('config.php');
  3.  
  4. class Mysql_option {
  5.  
  6. public $db, $pasy;
  7.  
  8. public function __construct() {
  9.  
  10. $this -> db = $db;
  11. $this -> pasy = $pasy;
  12.  
  13. }
  14.  
  15. public function db_connect() {
  16.  
  17. if($this ->db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  18. mysql_select_db($this->pasy['baza']);
  19. return true;
  20. }
  21.  
  22. else return false;
  23.  
  24. }
  25.  
  26.  
  27. public function db_close() {
  28.  
  29. mysql_close($this -> db);
  30.  
  31. }
  32.  
  33.  
  34. public function new_query($query) {
  35.  
  36. $this -> db_connect();
  37. $this -> new_query = $query;
  38. if($result = mysql_query($this -> new_query))
  39. return $result;
  40.  
  41. else return die(mysql_error());
  42. $this -> db_close();
  43.  
  44. }
  45.  
  46.  
  47. public function num_rows($resource) {
  48.  
  49. $this -> new_resource = $resource;
  50. if($result = mysql_num_rows($this -> new_resource)) return $result;
  51. else return false;
  52. }
  53.  
  54. public function fetch_assoc($resource) {
  55.  
  56. $this -> new_resource = $resource;
  57. if($result = mysql_fetch_assoc($this -> new_resource)) return $result;
  58. else return false;
  59. }
  60. };
  61.  
  62.  
  63. class Guest extends Mysql_option {
  64.  
  65. private $data, $ip, $host, $nick, $message, $strona, $id, $action, $method;
  66.  
  67. public function __construct($nick, $message, $action, $method) {
  68.  
  69. $this -> action = $action;
  70. $this -> method = $method;
  71. $this -> strona = (int)$_GET['strona'];
  72. $this -> id = (int)$_GET['id'];
  73. $this -> data = date('j/n/Y H:i:s');
  74. $this -> nick = htmlspecialchars(addslashes($nick));
  75. $this -> message = htmlspecialchars(addslashes($message));
  76. $this -> ip = $_SERVER['REMOTE_ADDR'];
  77. $this -> host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  78. $this -> pasy = $pasy;
  79. }
  80.  
  81.  
  82. public function getnick() {
  83.  
  84. return $this -> nick;
  85. }
  86.  
  87. public function getmsg() {
  88.  
  89. return $this -> message;
  90. }
  91.  
  92. public function getdate() {
  93.  
  94. return $this -> data;
  95. }
  96.  
  97. public function getip() {
  98.  
  99. return $this -> ip;
  100. }
  101.  
  102. public function addentry() {
  103.  
  104. $this -> new_query("insert into ksiega_gosci(nick,message,data,ip,kod) values('".$this -> getnick()."', '".$this -> getmsg()."', '".$this -> getdate()."', '".$this -> getip()."', '')");
  105. $host = $_SERVER['HTTP_HOST'];
  106. $uri = rtrim(dirname($_SERVER['PHP_SELF']), '');
  107.  
  108. }
  109.  
  110. public function load_reply($on_page = 15) {
  111.  
  112. $wynik1 = $this -> new_query("select * from ksiega_gosci order by id desc limit ".$this -> strona*$on_page.",".$on_page);
  113.  
  114. while($tab = $this -> fetch_assoc($wynik1)) {
  115. echo('<table border="1" width="75%" align="center" style="border: 1px dotted red;"><tr><td width="40%">Dodal: '.stripslashes($tab['nick']).'</td><td width="26%">Dnia:'.$tab['data'].'</td></tr>
  116. <tr><td><b>'.stripslashes($tab['message']).'</b></td></tr></table></form>');
  117. }
  118. }
  119.  
  120. public function pager($on_page = 15) {
  121.  
  122. $wynik = $this -> new_query("select * from ksiega_gosci");
  123. $num = $this -> num_rows($wynik);
  124. $how_much = ceil($num/$on_page);
  125.  
  126. if(!isset($this -> strona)) $this -> strona = 0;
  127.  
  128. if($this -> num_rows($wynik) == 0) {
  129.  
  130. echo('<script>alert("Nie ma wpisow");</script>');
  131. }
  132.  
  133. echo('<Br><center><b>Strona: '.($this -> strona).' z '.($how_much-1).'</b></center>');
  134.  
  135. if(is_numeric($this -> strona) && !empty($this -> strona) && $this -> strona > 0) {
  136. echo('<center><a href="?strona='.($strona-1).'"><img src='rev.gif' /></a> ');
  137.  
  138. }
  139.  
  140. if(is_numeric($this -> strona) && !empty($this -> strona) && $this -> strona < $how_much) {
  141. echo('<a href="?strona='.($this-> strona+1).'"><img src='next.gif' /></a></center>');
  142.  
  143. }
  144.  
  145. else {
  146. echo('<center><a href="?strona='.($this -> strona+1).'"><img src='next.gif' /></a></center>');
  147.  
  148.  }
  149.  
  150. echo('<table align="center" style="border: 1px dotted red;"><tr><td align="center">');
  151.  
  152. for($i = 0; $i < $how_much; $i++) 
  153. echo('<a href="?strona='.$i.'">['.$i.']</a> ');
  154. echo('</td></tr></table>');
  155.  
  156. }
  157.  
  158. public function Wyswietl_form() {
  159.  
  160. echo('<html>
  161. <head><meta http-equiv="content-type" charset="utf-8" /><title>GuEsT bY MARCIO</title>
  162. <style type="text/css">
  163. a {color:#FDEDF2}
  164. body {color:#FDEDF2}
  165. </style>
  166. </head>
  167. <body bgcolor="#000000">
  168. <center><img src="gora.jpg" width="1240" height="100" alt="obrazek"/></center>
  169. <table align="center" width="75%">
  170. <form action="'.$this -> action.'" method="'.$this -> method.'">
  171. <tr><td align="center"><input type="text" name="nick" size="71" value="Nick" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;"/></td></tr>
  172. <tr><td align="center"><textarea name="message" rows="3" cols="70" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;">Tutaj wpisz wiadomosc</textarea></td></tr>
  173. <tr><td align="center"><input type="submit" name="dodaj" value="Dodaj wpis" style="font-style:italic; background-color:#000000; color:#00A54E; border-color: #000000; border: #000000;" /></td></tr>
  174. </form></table>
  175. </body><html>'); 
  176. }
  177.  
  178.  
  179. public function Add_New_reply() {
  180.  
  181.  $this -> Wyswietl_form();
  182.  
  183.  if(!empty($this -> nick) && !empty($this -> message) && isset($_POST['dodaj'])) {
  184.  
  185.  setcookie("Spamer", "Spam", time() + 300);
  186.  
  187.  if($_COOKIE['Spamer'] != "Spam") {
  188.  
  189.  $this->addentry();
  190.  }
  191.  
  192.  else echo('<script>alert("Spadaj spamerze musisz odczekac 5min :)");</script>');
  193.  
  194.  }
  195.  }
  196.  
  197.  
  198. public function Show_All_reply() {
  199.  
  200. $this -> load_reply();
  201. $this -> pager();
  202. }
  203. };
  204.  
  205. $ksiega = new Guest($_POST['nick'], $_POST['message'], 'new_klasa.php', 'post');
  206. $ksiega -> Add_New_reply();
  207. $ksiega -> Show_All_reply();
  208.  
  209. echo('<Br><div style="background:#FFFFFF;color:#000000;text-align:center;border:2px solid:white;"><code><b>Powered by Marcio. GG(4854727)</b><img src="http://www.gadu-gadu.pl/users/status.asp?id=4854727&styl=1"/><Br><a style="color:#000000" href="http://ekmll.com" TARGET="_blank">My site</a></code></div>');
  210. ?>

Jednak mam takie bledy
Cytat
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www/new_klasa.php on line 20

Warning: mysql_query() [function.mysql-query]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www/new_klasa.php on line 41

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /var/www/new_klasa.php on line 41
Access denied for user 'www-data'@'localhost' (using password: NO)

I nie wiem czemu przeciwz daje ze $pasy sa public i robie na nie construct'a na jednej klasie dzialalo czy ktos z was wie czemu tak sie dzieje??

P.S jesli kod jest zadlugi prosze mowic to go usune i wrzuce na jakis server

Ten post edytował marcio 10.03.2008, 00:04:48


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Xniver
post 10.03.2008, 00:27:53
Post #27





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


IMHO gorzej tego zrobić nie mogłeś. Masz tutaj przykład poprawnego sterownika bazy MySQL(napisany specjalnie dla ciebie):
  1. <?php
  2. class Db
  3. {
  4. protected $link;
  5.  
  6. static protected $instance = null;
  7.  
  8. public function __construct()
  9. {
  10. require_once './config.php';
  11.  
  12. $this->link = @mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo']);
  13.  
  14. if(!$this->link)
  15. {
  16. exit('Nie można połączyć z bazą danych');
  17. }
  18.  
  19. if(!mysql_select_db($pasy['baza'], $this->link))
  20. {
  21. exit('Nie można wybrać bazy danych');
  22. }
  23. }
  24.  
  25. public function __destruct()
  26. {
  27. mysql_close($this->link);
  28. }
  29.  
  30. public function fetchAssoc($query)
  31. {
  32. return mysql_fetch_assoc($query);
  33. }
  34.  
  35. public function getAll($query)
  36. {
  37. $query = $this->makeQuery($query);
  38.  
  39. $rows = array();
  40.  
  41. while($row = $this->fetchAssoc($query))
  42. {
  43. $rows[] = $row;
  44. }
  45.  
  46. return $rows;
  47. }
  48.  
  49. static public function getInstance()
  50. {
  51. if(self::$instance === null)
  52. {
  53. self::$instance = new Db;
  54. }
  55.  
  56. return self::$instance;
  57. }
  58.  
  59. public function getRow($query)
  60. {
  61. $query = $this->makeQuery($query);
  62. $query = $this->fetchAssoc($query);
  63.  
  64. if(!$query)
  65. {
  66. $query = array();
  67. }
  68.  
  69. return $query;
  70. }
  71.  
  72. public function makeQuery($query)
  73. {
  74. $query = mysql_query($query, $this->link);
  75.  
  76. if(!$query)
  77. {
  78. exit('Błąd zapytania');
  79. }
  80.  
  81. return $query;
  82. }
  83.  
  84. public function numRows($query)
  85. {
  86. return mysql_num_rows($query);
  87. }
  88. }
  89.  
  90. // ------------------
  91. // Przykłady
  92. // ------------------
  93. $db = Db::getInstance();
  94.  
  95. // Pobranie jednego wiersza z bazy danych
  96. $row = $db->getRow('SELECT * FROM `testowa_tabela`
  97. WHERE `id` = 1');
  98.  
  99. echo $row['id'];
  100.  
  101. // Pobranie wszystkich wierszy z bazy danych
  102. $rows = $db->getAll('SELECT * FROM `testowa_tabela`');
  103.  
  104. foreach($rows as $row)
  105. {
  106. echo $row['id'];
  107. }
  108.  
  109. // Wykonanie zapytania
  110. $db->makeQuery('Zapytanie do wykonania');
  111. ?>


Ten post edytował Xniver 10.03.2008, 00:30:34
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 00:37:22
Post #28





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Wiem ze tego najlepiej nie napisalem ale czy mozesz powiedziec dlaczego moj kod nie dziala na 2 klasach a na jednej tak??Bylbym wdzieczny bo wiesz uczy sie na wlasnych bledach

p.S ciekawy jestem tez czy powiedzialbyc na czym polega system szablonow dla kodu html tak jak napisal mi o tym jeden z user'ow ktory uczestniczyl w tej dyskusji zeby nie dawac kodu html do klas a zrobic system szablonow czyli??Tak w kilku slowach albo jakas alternatywe

Ten post edytował marcio 10.03.2008, 00:40:01


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Xniver
post 10.03.2008, 00:39:15
Post #29





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Jeśli chodzi o ten twój poprzedni kod to tam miałeś błąd w konstruktorze(zapomniałeś o global $pasy(a poza tym global niezbyt pasuje do OOP))

Re P.S: Po prostu chodzi o to ,żeby oddzielić warstwę logiki od warstwy prezentacji(zobacz sobie wzorzec MVC). Zobacz sobie jak to jest rozwiązane w jakimś frameworku(Symfony, Agavi, KohanaPHP)

Ten post edytował Xniver 10.03.2008, 00:46:55
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 00:49:42
Post #30





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


O lol az mi siara probowalem dac global ale do glownej klasy smile.gif a nie do podklasy wielkie dzieki zapomnialo mi sie i teraz mam nastepne pytanie a nawet 2 na jakiej zasadzie ma dzialac ten parser/system szablonow czyli zostawic ten kod html w klasie czy lepiej jak zmienie to ale jak i jeszcze jedno czy teraz kod ktory dalem wyzej zbliza sie do idei OOP czy jeszcze mi do nie daleko jesli daleko to powiedz co jeszcze bym musial zmienic bo ten twoj kod jak narazie jest dla mnie zbyt skomplikowany ....sad.gif

EDIT:
P.S teraz przeczytalem twoj p.s zaraz lukne na framework'a i mvc smile.gif

EDIT2:
Myslalem ze stosujac public dla pierwszej klasy nie bede musial dawac global dlaczego tak sie dzieje??

Ten post edytował marcio 10.03.2008, 01:01:35


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Xniver
post 10.03.2008, 01:08:07
Post #31





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


  1. <?php
  2. public function __construct() {
  3.  
  4. $this -> db = $db;
  5. $this -> pasy = $pasy;
  6.  
  7. }
  8. ?>


Zobacz na swój kod. Nie widzisz błędu?

  1. <?php
  2. $this -> pasy = $pasy;
  3. ?>


Skrypt musi skąd wziąć zmienną $pasy
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 01:10:33
Post #32





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


no tak to jak zrobic zebym nie mysial uzywac global wiesz zdaje sie do bzdeta ale jak raz ktos pokarze co i jak to sie pamieta to na zawsze tongue.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Xniver
post 10.03.2008, 01:12:35
Post #33





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


  1. <?php
  2. public function __construct()
  3. {
  4. require_once './config.php';
  5.  
  6. $this->link = @mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo']);
  7.  
  8. if(!$this->link)
  9. {
  10. exit('Nie można połączyć z bazą danych');
  11. }
  12.  
  13. if(!mysql_select_db($pasy['baza'], $this->link))
  14. {
  15. exit('Nie można wybrać bazy danych');
  16. }
  17. }
  18. ?>


Jeśli zaincludujesz config.php w metodzie/funkcji to nie musisz używać global
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 01:23:43
Post #34





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


AHa tak patrzac na ten twoj kod zastanawialem sie nad tym czyli juz rozumiem includujac to w construct i potem dziedziczac ot takiej klasy przy tworzeniu obiektu plik sie includuje i w podklasie a nie tylko w klasie glownej

Zrobilem tak bo w construkcie nie dzialalo i bym musial wszystko zmieniac
  1. <?php
  2. class Mysql_option {
  3.  
  4. protected $db, $pasy;
  5.  
  6. public function __construct() {
  7.  
  8. $this -> db = $db;
  9.  
  10. }
  11.  
  12.  
  13. public function db_connect() {
  14.  
  15. include('config.php');
  16. $this -> pasy = $pasy;
  17. if($this -> db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  18. mysql_select_db($this->pasy['baza']);
  19. return true;
  20. }
  21.  
  22. else return false;
  23.  
  24. }
  25. //etc..
  26. ?>

Musze teraz poczytac o tym dostepie za pomoca :: o slowach kluczowych self/parent


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Cysiaczek
post 10.03.2008, 06:56:44
Post #35





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@marcio - Pokazałem Ci, jak wyglądają klasy księgi gości zbliżone do OOP, a Ty dalej popełniasz te same błędy sad.gif. Jest tak dużo klas po to właśnie, aby było obiektowo. Każdy obiekt zajmuje się swoimi sprawami i posiada ograniczoną odpowiedzialność. Pokazałem Ci też, jak się wyszukuje obiekty (zaznacza się je w zwykłym tekście).

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 16:24:15
Post #36





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


@Cysiaczek staram sie jak moge ale...jakos trudno mi tak odrazu to zrozumiem mysle ze z praktyka moja OOP sie poprawi

P.S znasz moze jakies fajne kursu online albo masz moze jakies ebook'i w PDF bo nie teraz nie ma mnie w polsce i ksiazki nie kupie dopiero w wakacje wielkie dzieki bo wiesz znalazlem kupe kursow ale byly krotkie smile.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Cysiaczek
post 10.03.2008, 16:27:37
Post #37





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie, nie posiadam e-booków, ani adresów, bo na łamach php.pl nie uprawiamy piractwa.

Pozdrawiam i powodzenia w nauce smile.gif


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
marcio
post 10.03.2008, 23:16:09
Post #38





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


W sumie masz racje ale dzieki smile.gif no coz poucze sie jeszcze i zobacze co z tego bedzie mam nadzieje ze wkrotce zrozumie

P.S mam jeszcze jedno male pytanie czy bylbys tak wdzieczny i molgbys mi dac jakies twoje przykladowe klasy co kiedys napisales nie zadlugie i nie skomplikowane sciaglem pager'a Nospor'a ale jest zatrudnu i zadlugi a inne kody w sieci idem moze masz cos ciekawego??

Napisalem to na nowo na 3 klasach + system szablonow jak zwykle nie jest to OOP ale zawsze cos dziala dzialac jednak moze ktos pokazac co by zmienil

Mam jeszcze jedno pytanie probowalem to zrobic na interfejsach zeby nie robic tych wszystkich klas i nie dawac extends i robil np tak
Plik interface.php
  1. <?php
  2. interface Db {
  3.  
  4. public function db_connect();
  5. public funcion db_close();
  6. public function new_query();
  7. //etc wszystkie metody potrzebne do sql
  8. }
  9.  
  10. interface Html_code {
  11.  
  12. public function html();
  13. public function button();
  14. public function text_input();
  15. //etc wszystkie metody do szablonu html
  16. }
  17. ?>

Potem plik interface.php includowalem do new_klasa.php(glowna klasa) i robilem cos takiego
  1. <?php
  2. class Guest implements Db, Html_code {
  3. //tu wszystkie metodu pola etc...
  4. }
  5. ?>

I wywalalo jakis blad a nie wiem dlaczego tzn ze za db_connect prawidlo jest sie odwolywac Db::db_connect a nie Guest::db_connect i tak samo z innymi metodami wiec co zle robilem??

Czy piszac to na interfejsach kod bylby krotszy skoro nie musial bym pisac w kazdel klasie metody lecz tylko w klasie w ktorej je potrzebowalem

P.S i jeszcze jedno to co ja robie to jest dziedziczenie
Db
|
Html_code
|
Guest

Jednak dla kadzej klasu musialem pisac wlasne metody jednak stosujac interface wychodzi na wielodziedziczenie
czyli Klasa Guest dziedziczy od Db i Html_code naraz nawet ze wyczytalem ze nie jest to jednak takie wielodziedziczenie jak w C++/Java ale czy za pomoca interface nie bylo by mniej kodu i czy idzie tak zrobic bo wtedy pisze tylko metody gdzie mi sa potrzebne

Tu jest link klasy:http://rafb.net/p/IOORnq87.html


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Xniver
post 11.03.2008, 10:35:04
Post #39





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Czemu cały czas dziedziczysz/implementujesz interfejs klasę/y Db? Nie możesz po prostu użyć jej jako zewnętrznej klasy?

Ten post edytował Xniver 11.03.2008, 10:41:24
Go to the top of the page
+Quote Post
marcio
post 11.03.2008, 15:07:57
Post #40





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
Nie możesz po prostu użyć jej jako zewnętrznej klasy?

Czyli bo nie bardzo rozumiem dac do osobnego pliku i co??

P.S kolge mi wytlumaczyl po co sa interfejsy sluza do pracy na obiektach nie na polach jednak nie wiem czy dobrze zrozumialem jak zle to napewno nie jego wina smile.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post

4 Stron V  < 1 2 3 4 >
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: 26.06.2025 - 00:44