Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 1223 Просмотров
*

Artem_M

  • Новичок
  • 9
  • 0 / 0
Всем драсьте! Люди, срочно нужна помощь.
После обновления до 3.3. перестали работать запросы к БД:(
Помогите, пжлст, оптимизировать кусок кода для версии 3.3.:

Код
function getDataPaymentIds($article_text){
        preg_match_all('%data-payment="(\d)+"%i',$article_text,$matches);
        $result = '';
        if(!empty($matches[0])){
                $res_arr = array();
                foreach($matches[0] as $v){
                        $res_arr[] = substr($v,14,strlen($v)-strlen('data-payment=""'));
                }
                $result = base64_encode(serialize($res_arr));
        }
        return $result;
}
function checkPaymentDate($hash){
        $db =& JFactory::getDBO();
        $query = "SELECT * FROM #__payforcontent WHERE hashtologin='".$hash."'";
        $db->setQuery( $query );
        $result = $db->loadObject();

        if(!empty($result)){
                $time_expired = strtotime($result->datetime)+60*60*24*$result->timelimit;
                $now = time();
                if($time_expired>$now){
                        return true;
                }
        }
        return false;
}

if($this->params->get('add_access')=='1'){
        $canRead = isset($_COOKIE['id_'.$this->article->id]);
        if($canRead){
                $canRead = checkPaymentDate($_COOKIE['id_'.$this->article->id]);
        }
        if(!$canRead){
                $pos = strpos($this->article->text,'<hr id="payment-readmore" />');
                if($pos>0){
                        $text = substr($this->article->text,0,$pos);
                        $dataPaymentPos = strpos($this->article->text,'data-payment="');
                        $datapaymentids = '';
                        if($dataPaymentPos>0){
                                $datapaymentids = getDataPaymentIds($this->article->text);
                        }
                        // action="/component/user/payforcontent"
                        $text.= '<бла-бла-бла>';
                        $this->article->text = $text;
                }else{
                        $source_pos = strpos($this->article->text,'data-source="this"');
                        if($source_pos>0){
                                $dom = new DOMDocument;
                                @$dom->loadHTML($this->article->text);
                                foreach ($dom->getElementsByTagName('a') as $tag) {
                                        if($tag->getAttribute('data-source')!=''){
                                                $url = $tag->getAttribute('href');
                                                JController::setRedirect($url);
                                                JController::redirect();
                                        }
                                }
                        }else{
                                $this->article->text = 'бла-бла-бла<br> <a href="бла-бла-бла" title="Посмотреть другие материалы" id="go-away">бла-бла-бла >> </a><script type="text/javascript">setTimeout(function(){$("go-away").click();},7000);</script>';
                        }
                }
        }
}
« Последнее редактирование: 14.07.2014, 18:31:31 от Artem_M »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Переделка запроса к БД (1.5 -> 3.3)
« Ответ #1 : 14.07.2014, 18:39:49 »
Честно говоря не вижу тут в вашем запросе такого что не должно в трешке работать а вот потенциальная sql - инъекция налицо)
интернет-блог: http://websiteprog.ru
*

Artem_M

  • Новичок
  • 9
  • 0 / 0
Re: Переделка запроса к БД (1.5 -> 3.3)
« Ответ #2 : 14.07.2014, 18:45:20 »
Честно говоря не вижу тут в вашем запросе такого что не должно в трешке работать а вот потенциальная sql - инъекция налицо)
Кто-кто на лицо? Что за инъекция и чем это грозит?:) Я не программист и мне сложно разобраться в причинах неработоспособности... Но при переезде перенес все файлы, относящиеся к данному коду, в те же папки. В БД данные есть и по идее должны читаться этим кодом, но они не читаются... Я гуглил и вроде отличие в том, что сам запрос стал многострочным, а не однострочным как сейчас. Но у меня не получилось его переделать... Вот такая вот проблема...

ЗЫ код интегрирован в шаблон материала (default.php)
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Переделка запроса к БД (1.5 -> 3.3)
« Ответ #3 : 14.07.2014, 18:50:34 »
Я гуглил и вроде отличие в том, что сам запрос стал многострочным, а не однострочным как сейчас. Но у меня не получилось его переделать...
Как это вдруг стал многострочным? Вот это что должно возвращать?
Код: sql
$query = "SELECT * FROM #__payforcontent WHERE hashtologin='".$hash."'";
*

Artem_M

  • Новичок
  • 9
  • 0 / 0
Re: Переделка запроса к БД (1.5 -> 3.3)
« Ответ #4 : 14.07.2014, 18:58:42 »
Как это вдруг стал многострочным? Вот это что должно возвращать?
Код: sql
$query = "SELECT * FROM #__payforcontent WHERE hashtologin='".$hash."'";


Да знать бы, я же не программист... На 1.5. мне сделали и все работает, но теперь вот перехал на 3, а к тем, кто делал нет никакого интереса обращаться - по личным мотивам... Про многострочность вот здесь читал: http://allineed.ru/en/articles-joomla/j15and25diff/111-jdiff-db-select.html

Смысл приведенного кода в том, что после предварительного выставления условий платности (да/нет) и суммы в параметрах материала, в шаблоне материала (посредством этого кода) происходит запрос в БД и если контент платный, то основная часть его скрывается (по принципу "читать далее", только с модулем оплаты). Сейчас ничего не скрывается ни при каких условиях...

ЗЫ Еще раз посмотрел, видимо данная строка относится к сроку пользования материалом (подписка может быть на 1 день, а может - на неделю). Видимо здесь определяется параметр срока подписки и, соответсвенно, если конечная дата не превышает текущую, то текст не скрывается.
« Последнее редактирование: 14.07.2014, 19:14:45 от Artem_M »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Переменная для меню без вывода в строку запроса

Автор platonische

Ответов: 4
Просмотров: 962
Последний ответ 05.04.2016, 18:45:56
от Aleks.Denezh
Журнал операций в компоненте (дублирование sql запроса)

Автор platonische

Ответов: 30
Просмотров: 2043
Последний ответ 16.03.2016, 18:03:29
от platonische