|
s_s ↓
|
 |
|
20 Сентябрь, 2009, 10:48:05
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 23 Сила слова: 0
|
снова я со сломанными об гранит ооп зубами. пытаюсь написать класс разбирающий урл, и формирующий в зависимости от формата того запрос к БД. схема такая:
- вычислить сколько частей ("/") в урле. применить соответственно дочерний класс (Url1, Url2 и тд)
- регулярками узнать что запрашивается - дата, номер или название, запустить соответствующую ф-ию, которая соберёт массив для SQL-строки.
- полученное чудо передать методу класса Mysql, любезно разобранному в этой теме http://pyha.ru/forum/topic/3394.0
возможно неправильно поставил задачу, но такая логика пришла на ум, хз...
class Url
{
public $url;
public $sql= array();
public $dir= array();
public $q= array();
/*вот честно так и не въехал что из этого надо, а что нет??!*/
//убираем лишнее, урл в массив:
function clean_url ()
{
$dir= explode("/", $_SERVER['REQUEST_URI']);
$dir = Clean_array ($dir); //пользовательская, работает!!
return $dir;
}
//сколько частей?
public function check_url ()
{
$dir = self:: clean_url();
$u = count($dir);
switch($u)
{
case 1: Url1:: parse_url($dir); break;
case 2: Url2:: parse_url($dir); break;
case 3: Url3:: parse_url($dir); break;
}
}
}
class Url1 extends Url
{
public function parse_url($dir)
{
$ER = array(
'y_m_d' => "^20([0-9]{2})-([01][0-9])-([0-3][0-9])$",
'y_m' => "^20[0-9]{2}-[01][0-9]$",
'y' => "^20[0-9]{2}$",
'num' => "N[1-9][0-9]*",
'title' => "[:alnum:]*");
foreach($ER as $k=> $v)
{if(eregi($v, $dir[1])){break; }}
$sql = self:: $k($dir[1]);
return($sql); //и вот это не возвертается во внешний мир!!
}
public function y_m_d ($dir)
{
$sql= array();
$sql[] = '*';
$sql[] = 'articles';
$sql[] = array(
'DATE' => $dir);
$sql[] = 1;
return $sql;
}
function title ($dir)
{
$sql[] = '*';
$sql[] = 'articles';
$sql[] = array(
'TITLE'=> $dir);
$sql[] = 1;
return $sql;
}
}
|
|
|
|
|
Записан
|
|
|
|
|
Dr.TRO ↓
|
 |
|
20 Сентябрь, 2009, 10:52:59 , спустя 4 минуты 54 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Группа: Адекваты
Карма: 5
Сообщений: 254 Сила слова: 1.97
|
лол же, тыж $dir чистиш если я верно вижу и понимаю, то что ты свитчу передаеш ?!
|
|
|
|
|
Записан
|
|
|
|
|
s_s ↓
|
 |
|
20 Сентябрь, 2009, 10:55:55 , спустя 2 минуты 56 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 23 Сила слова: 0
|
лол же, тыж $dir чистиш если я верно вижу и понимаю, то что ты свитчу передаеш ?!
массив. проверял print_r нормальный такой массив. ничего лишнего =)
|
|
|
|
|
Записан
|
|
|
|
|
artoodetoo ↓
|
 |
|
20 Сентябрь, 2009, 10:57:26 , спустя 1 минуту 31 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
с особым цинизмом
Группа: в ухо Карма: 124
Сообщений: 3804 Сила слова: 3.26
|
ну так ты отследи до какого места доходит. расставляй по пути следования die('опачки') и узнай
непонятна идея насчет count($dir).
попробуй принять такое правило: первый сегмент - имя класса, второй - имя метода, все остальное - аргументы метода. тогда все резко упростится
|
|
|
|
|
Записан
|
|
|
|
|
Dr.TRO ↓
|
 |
|
20 Сентябрь, 2009, 10:58:57 , спустя 1 минуту 31 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Группа: Адекваты
Карма: 5
Сообщений: 254 Сила слова: 1.97
|
дай плиз код функции Clean_array Спустя 43 секунды добавил
непонятна идея насчет count($dir).
норм идея(правда могла бы и лучше быть) он прост считает сколько элемнтов в массиве чтож непонятно, и исходя из этого работает конструкция switch
|
|
|
|
|
Записан
|
|
|
|
|
s_s ↓
|
 |
|
20 Сентябрь, 2009, 11:15:51 , спустя 16 минут 54 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 23 Сила слова: 0
|
ну так ты отследи до какого места доходит. расставляй по пути следования die('опачки') и узнай
непонятна идея насчет count($dir).
попробуй принять такое правило: первый сегмент - имя класса, второй - имя метода, все остальное - аргументы метода. тогда все резко упростится
прослеживаю: $dir - везде присутствует, все переменные видны по всему классу. идея or die('опачки') - проставил, нигде не опачки... просто не возвращает $sql...всё вроде прозрачно и на месте.
насчёт count - если например url - ццц.сайт.ру/2009/12/ то использовать Url2, если ццц.сайт.ру/2009-12/ то Url1.
про сегменты можно подробней, кто это?
апд.
function Clean_array ($array)
{
$ret_arr = array();
foreach($array as $key => $val)
{
if (! empty($val))
{
$ret_arr[$key] = trim($val);
}
}
return $ret_arr;
}
|
|
|
|
|
Записан
|
|
|
|
|
artoodetoo ↓
|
 |
|
20 Сентябрь, 2009, 11:27:11 , спустя 11 минут 20 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
с особым цинизмом
Группа: в ухо Карма: 124
Сообщений: 3804 Сила слова: 3.26
|
про сегменты - call_user_func_array(array_slice($dir,0,2), $dir)
я не вникал какая у тебя структура url если честно, просто увидел что ты пишешь роутер. если схема маршрута классическая
controller/action/arg1/arg2/arg3 - то можно написать простой роутер
|
|
|
|
« Последнее редактирование: 20 Сентябрь, 2009, 11:27:11 от artoodetoo »
|
Записан
|
|
|
|
|
Dr.TRO ↓
|
 |
|
20 Сентябрь, 2009, 11:37:40 , спустя 10 минут 29 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Группа: Адекваты
Карма: 5
Сообщений: 254 Сила слова: 1.97
|
гкхм ... дядя s_s, вы понемаете что делаете ? вы не то делаете, это уже делаеться mod_rewrite'ом ( вот кусок кода с .htaccess с DLE : RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L] ) т.е. просто запрос переправляеться ... отличный генератор реврайта вот есть Спустя 2 минуты 22 секунды добавил алсо после call_user_func_array() ваших всяких и являються php injection'ы
|
|
|
|
|
Записан
|
|
|
|
|
s_s ↓
|
 |
|
20 Сентябрь, 2009, 11:47:09 , спустя 9 минут 29 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 23 Сила слова: 0
|
artoodetoo, спасибо посмотрел, не вполне осознал надо ли оно мне... задумывал регуляркой проверить что за урл, создать запрос что и от куда извлекать и всё. что call_user_func_array даст мне?
структура немного ёбнутая на самом деле. думал в неё всё запихать, что бы без поиска обойтись и по названию и по дате (всех форматов - /гггг-мм-дд/, /гггг-мм/, /гггг/), по возможности все варианты...
Dr.TRO, не понимаю. я понимаю что велосипеды кончились, но у меня своя бд и свои методы выборки из неё, вот подумалось написать такое. или выбранный способ не имеет права жить? аргументы?
|
|
|
|
|
Записан
|
|
|
|
|
Dr.TRO ↓
|
 |
|
20 Сентябрь, 2009, 11:49:48 , спустя 2 минуты 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Группа: Адекваты
Карма: 5
Сообщений: 254 Сила слова: 1.97
|
ладно дело твое. ну это по принципу "Мы легких путей в жизне не ищем". так что удачи в разработке целого класса для одного лиш парсинга ссылки (:
|
|
|
|
|
Записан
|
|
|
|
|
s_s ↓
|
 |
|
20 Сентябрь, 2009, 11:52:43 , спустя 2 минуты 55 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 23 Сила слова: 0
|
Dr.TRO, спасибо) честно такая задача и стоит.
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
21 Сентябрь, 2009, 12:06:22 , спустя 13 минут 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: д-о-х-у-я! Сила слова: 1.66
|
ладно дело твое. ну это по принципу "Мы легких путей в жизне не ищем". так что удачи в разработке целого класса для одного лиш парсинга ссылки (:
хули смешного?)
http://pyha.ru/forum/topic/2392.0
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
s_s ↓
|
 |
|
21 Сентябрь, 2009, 12:26:20 , спустя 19 минут 58 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 23 Сила слова: 0
|
от твоюжж мать, хоть бы пнули что parse_url существует, а то я её определил... а один хрен не заработало...
|
|
|
|
|
Записан
|
|
|
|
|
s_s ↓
|
 |
|
21 Сентябрь, 2009, 12:37:21 , спустя 11 минут 1 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 23 Сила слова: 0
|
короче я в тупике туплю: массив $sql прекрасно виден в самом методе, но он его не отдаёт!! что за хрень-то?
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
21 Сентябрь, 2009, 12:42:06 , спустя 4 минуты 45 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: 20784 Сила слова: 1.66
|
s_s, ты хоть знаешь какой функцией то обрабатывается твои данные? self::$k( ..хуйна =)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|