Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kod do sprawdzenia :)
Forum PHP.pl > Forum > PHP > Object-oriented programming
KotWButach
Witam piszę prostą wyszukiwarkę dla treningu i chciał bym was zapytać czy podążam w dobrym kierunku i co należało by zmienić.
Forumalrz składa się z:
POLE TEKSTOWE - keywords
LISTA ROZWIJANA - objtype
CHECKBOX - option

Wszystko działa jak by co smile.gif

Chodzi o samą sztukę.

WYWOLANIE
  1. $engine = new Search();
  2. $engine->getKeywords($_POST['keywords']);
  3. $engine->getObjectType($_POST['objectType']);
  4. $engine->getOptions($_POST);
  5. $error = $engine->setError();
  6. echo $error;
  7.  
  8. $data = $engine->queryCreator();
  9.  
  10. print_r(count($data));


Kodzk clasy
  1. <?php
  2.  
  3. class Search extends DataManager {
  4.  
  5. private $keywordsStr = NULL;
  6. private $keywords = NULL;
  7. private $options = NULL;
  8. private $objectType;
  9.  
  10. private $errors = array();
  11.  
  12. function __construct() {
  13.  
  14. }
  15.  
  16.  
  17. /**
  18.   * Funkcja pobiera z formularza->poletekstowe za pomoca np $_POST['tekst'] i przystosowuje zapytanie obcinajac spacje itp,
  19.   * @param string $keywords jako poletekstowe formularza np $_POST['tekst']
  20.   */
  21. public function getKeywords($keywords = NULL) {
  22. //Usuwamy biale znaki
  23.  
  24. if(!$keywords == NULL)
  25. $this->keywordsStr = addslashes($keywords);
  26. $this->keywords = preg_split('/[\s]+/', trim($keywords));
  27. }
  28.  
  29. /**
  30.   * Funkcja pobiera z formularza->typobiektu za pomoca np $_POST['typ'] i przystosowuje zapytanie obcinajac spacje itp,
  31.   * @param string $objectType jako poletekstowe formularza np $_POST['tekst']
  32.   */
  33. public function getObjectType($objectType = NULL) {
  34. //Usuwamy biale znaki
  35. $this->objectType = preg_split('/[\s]+/', trim($objectType));
  36. }
  37.  
  38. public function getOptions($arrayPost) {
  39. foreach ($arrayPost as $key => $value) {
  40. if(strstr($key, 'option'))
  41. $this->options[$key] = $value;
  42. }
  43. }
  44.  
  45. private function errors() {
  46.  
  47. if(empty($this->keywordsStr))
  48. $errors[] = EMPTYERROR;
  49. if(strlen($this->keywordsStr) < 3)
  50. $errors[] = LENGHTERROR;
  51.  
  52. $this->errors[] = $errors;
  53. return $errors;
  54. }
  55. /**
  56.   * Zaglada do cache pliku i prawdza czy istnieje jezeli tak zwraca 1 jezeli nei zwraca 0
  57.   * @param string $value pobieramy wyraz
  58.   * @return boolean zwraca true lub false jezeli wystepuje w tablicy cache lub nie.
  59.   */
  60. private function searchCache($value) {
  61. include 'cache/cacheSearch.php';
  62. $key = in_array(mb_strtolower($value, "UTF-8"), $array);
  63. if($key == TRUE)
  64. return TRUE;
  65. else
  66. return FALSE;
  67. }
  68.  
  69. /**
  70.   * Przetwarza tablice zapytania z formularza->inputtext co wazne robi tez validacje przy pomocy cache pliku jezeli jest to dodaje + do match against $this->searchCache($value);
  71.   * @param array słowa kluczowe w formie tablicy
  72.   * @param string $searchSymbol jest to symbol do zapytania match against +_~ itd
  73.   * @param string $separator międzty wyrazami tutaj spacja.
  74.   * @return string zwraca sformatowany ciag.
  75.   */
  76. private function arrayToString($array, $searchSymbol = '+' ,$separator = ' ') {
  77. if(isset($array)){
  78. foreach ($array as $key => $value) {
  79. $sepTF = $this->searchCache($value);
  80. echo $sepTF;
  81. if($key == 0 || $sepTF == TRUE ){
  82. $str .= $searchSymbol. ':'.$value . '*' . $separator;
  83. }
  84. else{
  85. $str .= $value . '*' . $separator;
  86. }
  87. }
  88. }else{
  89. $str = NULL;
  90. }
  91. return $str;
  92. }
  93.  
  94. private function arrayBind($sth, $data) {
  95. foreach ((array) $data as $key => $value) {
  96. $sth->bindValue(":$key", $value);
  97. }
  98. }
  99.  
  100. private function optionSql($array) {
  101. if(isset($array)){
  102. $sql = 'AND test.id = opcje.id';
  103. foreach ($array as $key => $value) {
  104. $sql .= ' AND opcje.' . $key . '=1';
  105. }
  106. }
  107. else{
  108. return NULL;
  109. }
  110. return $sql;
  111. }
  112.  
  113. public function queryCreator() {
  114. $cos = $this->errors();
  115. if(!empty($cos[0])){
  116. echo $cos[0];
  117. }else{
  118. try {
  119. $keywords = $this->arrayToString($this->keywords);
  120. $types = $this->objectType[0];
  121. echo ':'.$keywords.':<br />';
  122. echo ':'.$types.':';
  123.  
  124. $optionSql = $this->optionSql($this->options);
  125. $sql = "SELECT *
  126. , (MATCH(test) AGAINST('$keywords' IN BOOLEAN MODE))
  127. FROM test, druga, opcje
  128. WHERE test.id = druga.id AND test.id = opcje.id $optionSql
  129. AND MATCH(test) AGAINST('$keywords' IN BOOLEAN MODE)
  130. AND MATCH(type) AGAINST('$types*' IN BOOLEAN MODE)
  131. ORDER BY (MATCH(test) AGAINST('$keywords' IN BOOLEAN MODE)) DESC
  132. "; //+$types dac do odzielnej.
  133. $db = new DataManager(DB_TYPE, DB_HOST, DB_NAME, DB_USER, DB_PASS);
  134.  
  135. $sth = $db->prepare($sql);
  136. foreach ((array) $this->keywords as $key => $value) {
  137. $sth->bindValue(":$key", $value);
  138. }
  139. $this->arrayBind($sth,$this->keywords);
  140. $this->arrayBind($sth,$this->objectType);
  141. $this->arrayBind($sth,$this->options);
  142. $sth->execute();
  143.  
  144. return $sth->fetchAll();
  145.  
  146.  
  147. } catch (Exception $exc) {
  148. echo $exc->getTraceAsString();
  149. }
  150.  
  151.  
  152.  
  153. }
  154.  
  155. }
  156.  
  157. /**
  158.   * Funkcja pierwszy napotkany blad podczas validacji (służy do zakomunikowania uzytkownikowi co zrobil zle).
  159.   */
  160. public function setError() {
  161. if(isset($this->errors[0]))
  162. return $this->errors[0];
  163. }
  164.  
  165. public function setData($param) {
  166.  
  167. }
  168.  
  169. /**
  170.   * Funkcja wypisuje podstawowe informacje na temat przyjetych oraz przetworzonych informacji.
  171.   */
  172. public function echoData() {
  173. echo 'Podstawowe informacje <br />';
  174. echo '$keywords = ';
  175. print_r($this->keywords);
  176. echo '$objectType = ';
  177. print_r($this->objectType);
  178. echo '$options = ';
  179. print_r($this->options);
  180. }
  181.  
  182. }
  183.  
zegarek84
czemu nie skorzystasz z PDO (PHP Data Objects)questionmark.gif
KotWButach
kożystam z PDO wink.gif jest ukryte w klasie dataMenager by nie zaśmiecać tym stringiem którego nigdy nie pamiętam tak wpisuje tylko kilka informacji zresztą już załączam
  1. class DataManager extends PDO {
  2.  
  3. private $oInstance = false;
  4.  
  5. public function __construct($DB_TYPE, $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS) {
  6. parent::__construct($DB_TYPE . ':host=' . $DB_HOST . ';dbname=' . $DB_NAME, $DB_USER, $DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  7. }
  8.  
  9. public static function getInstance($DB_TYPE = DB_TYPE, $DB_HOST = DB_HOST, $DB_NAME = DB_NAME, $DB_USER = DB_USER, $DB_PASS = DB_PASS) {
  10. if (self::$oInstance == false) {
  11. self::$oInstance = new DataManager($DB_TYPE, $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS);
  12. }
  13. return self::$oInstance;
  14. }
  15.  
  16. }


A czy ktoś wypowie się na temat jakości kodu sad.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.