Forumalrz składa się z:
POLE TEKSTOWE - keywords
LISTA ROZWIJANA - objtype
CHECKBOX - option
Wszystko działa jak by co

Chodzi o samą sztukę.
WYWOLANIE
$engine = new Search(); $engine->getKeywords($_POST['keywords']); $engine->getObjectType($_POST['objectType']); $engine->getOptions($_POST); $error = $engine->setError(); $data = $engine->queryCreator();
Kodzk clasy
<?php class Search extends DataManager { private $keywordsStr = NULL; private $keywords = NULL; private $options = NULL; private $objectType; function __construct() { } /** * Funkcja pobiera z formularza->poletekstowe za pomoca np $_POST['tekst'] i przystosowuje zapytanie obcinajac spacje itp, * @param string $keywords jako poletekstowe formularza np $_POST['tekst'] */ public function getKeywords($keywords = NULL) { //Usuwamy biale znaki if(!$keywords == NULL) } /** * Funkcja pobiera z formularza->typobiektu za pomoca np $_POST['typ'] i przystosowuje zapytanie obcinajac spacje itp, * @param string $objectType jako poletekstowe formularza np $_POST['tekst'] */ public function getObjectType($objectType = NULL) { //Usuwamy biale znaki } public function getOptions($arrayPost) { foreach ($arrayPost as $key => $value) { $this->options[$key] = $value; } } private function errors() { $errors[] = EMPTYERROR; $errors[] = LENGHTERROR; $this->errors[] = $errors; return $errors; } /** * Zaglada do cache pliku i prawdza czy istnieje jezeli tak zwraca 1 jezeli nei zwraca 0 * @param string $value pobieramy wyraz * @return boolean zwraca true lub false jezeli wystepuje w tablicy cache lub nie. */ private function searchCache($value) { include 'cache/cacheSearch.php'; if($key == TRUE) return TRUE; else return FALSE; } /** * 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); * @param array słowa kluczowe w formie tablicy * @param string $searchSymbol jest to symbol do zapytania match against +_~ itd * @param string $separator międzty wyrazami tutaj spacja. * @return string zwraca sformatowany ciag. */ private function arrayToString($array, $searchSymbol = '+' ,$separator = ' ') { foreach ($array as $key => $value) { $sepTF = $this->searchCache($value); if($key == 0 || $sepTF == TRUE ){ $str .= $searchSymbol. ':'.$value . '*' . $separator; } else{ $str .= $value . '*' . $separator; } } }else{ $str = NULL; } return $str; } private function arrayBind($sth, $data) { $sth->bindValue(":$key", $value); } } private function optionSql($array) { $sql = 'AND test.id = opcje.id'; foreach ($array as $key => $value) { $sql .= ' AND opcje.' . $key . '=1'; } } else{ return NULL; } return $sql; } public function queryCreator() { $cos = $this->errors(); }else{ try { $keywords = $this->arrayToString($this->keywords); $types = $this->objectType[0]; $optionSql = $this->optionSql($this->options); $sql = "SELECT * , (MATCH(test) AGAINST('$keywords' IN BOOLEAN MODE)) FROM test, druga, opcje WHERE test.id = druga.id AND test.id = opcje.id $optionSql AND MATCH(test) AGAINST('$keywords' IN BOOLEAN MODE) AND MATCH(type) AGAINST('$types*' IN BOOLEAN MODE) ORDER BY (MATCH(test) AGAINST('$keywords' IN BOOLEAN MODE)) DESC "; //+$types dac do odzielnej. $db = new DataManager(DB_TYPE, DB_HOST, DB_NAME, DB_USER, DB_PASS); $sth = $db->prepare($sql); $sth->bindValue(":$key", $value); } $this->arrayBind($sth,$this->keywords); $this->arrayBind($sth,$this->objectType); $this->arrayBind($sth,$this->options); $sth->execute(); return $sth->fetchAll(); } catch (Exception $exc) { } } } /** * Funkcja pierwszy napotkany blad podczas validacji (służy do zakomunikowania uzytkownikowi co zrobil zle). */ public function setError() { return $this->errors[0]; } public function setData($param) { } /** * Funkcja wypisuje podstawowe informacje na temat przyjetych oraz przetworzonych informacji. */ public function echoData() { } }