применение ajax в админке

Форум для авторов модов для phpBB 2.0.x. Здесь можно попросить помощи в разработке у коллег.

применение ajax в админке

Сообщение Alabay 20.10.2007 13:57

Необходимо с помощью ajax на странице заметок (своя страница - textarea и кнопочка) добавить заметку.
Дело в том, что форум проверяет в админке - ты авторизован или нет. Соответственно при запросах того самого ajax'a форум говорит - пойдика залогинься и перенаправляет из admin/zametki.php?mode=add&sid=xxx на логин.
С кодом ajax'a все в порядке - если сделать запрос на обычный файл (без админских инклюдов) то все проходит удачно.
Что нужно брать с собой (куки?) и как? С удовольствием бы посмотрел пример, если кто-то писал. Использование ajaxa'a обязательно + в админке.
Alabay
phpBB 1.4.2
 
Сообщения: 51
Зарегистрирован: 23.01.2006 16:39


Сообщение Alek$ 20.10.2007 14:23

Alabay писал(а):Что нужно брать с собой (куки?) и как?

sid. Используйте функцию append_sid() для прикрепления sid'a к url, по которому обращается скрипт.
Useful links: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.


Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB 3.0.2 с предустановленной русификацией
Аватара пользователя
Alek$
Модератор
Модератор
 
Сообщения: 1627
Зарегистрирован: 03.08.2005 13:46
Откуда: Новосибирск

Сообщение Alabay 20.10.2007 14:34

Alabay писал(а):admin/zametki.php?mode=add&sid=xxx

ну специально приписал же. не помогат.

'ACTION' => append_sid('admin_zametki.php?mode=add'),

Сорри, посылат не зарегистрироваться, а на главную страницу!

Ajax использую как тут: http://dklab.ru пример про md5.
Ошибка: JavaScript code generated by backend is invalid!
Хотя в том файле, к которому я обращаюсь нету жава-скрипта никакого
Последний раз редактировалось Alabay 20.10.2007 14:42, всего редактировалось 1 раз.
Alabay
phpBB 1.4.2
 
Сообщения: 51
Зарегистрирован: 23.01.2006 16:39

Сообщение Alek$ 20.10.2007 14:41

Alabay
тогда покажите ваш код, желательно в виде мода или патча.
Useful links: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.


Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB 3.0.2 с предустановленной русификацией
Аватара пользователя
Alek$
Модератор
Модератор
 
Сообщения: 1627
Зарегистрирован: 03.08.2005 13:46
Откуда: Новосибирск

Сообщение Alabay 20.10.2007 16:45

JsHttpRequest.php и JsHttpRequest.js
Их копируем в папку корень/ajax.

Прикрепил их.
создаем файл admin/zametki.php
admin/zametki.php
Код: Выделить всё
<?php
define('IN_PHPBB', 1);
if( !empty($setmodules) )
{
   $file = basename(__FILE__);
   $module['Записки']['заипись'] = $file;
   return;
}

// Load default header
$phpbb_root_path = "./../";
require($phpbb_root_path . 'extension.inc');
require('./pagestart.' . $phpEx);

if( isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode']) )
{
   $mode = ( isset($HTTP_GET_VARS['mode']) ) ? $HTTP_GET_VARS['mode'] : $HTTP_POST_VARS['mode'];
   $mode = htmlspecialchars($mode);
}
else
{
   $mode = "";
}
switch ($mode) {
   case "":
      $template->set_filenames(array(
      'zapiski' => 'admin/zametki.tpl'
      ));

      $template->assign_vars(array(
      'DATE' => date("d.m.y"),
      'ACTION' => append_sid('admin_zametki.php?mode=zakaz'),
      ));
      $template->pparse('zapiski');
      break;
   case "zakaz":
      require_once $phpbb_root_path."/ajax/JsHttpRequest.php";
      // Init JsHttpRequest и указываем кодировку.
      $JsHttpRequest =& new JsHttpRequest("windows-1251");
      // Присваиваем для удобства.
      $prim = $_REQUEST['prim'];
      if ($prim) {
         $prim = htmlspecialchars($prim);
         $id = mysql_insert_id();
         $date = time();
         $sql = "INSERT INTO `dom_payment` values('$id','$usluga','0','$prim','0', '$date')";
         //$db->sql_query($sql);
         
         $GLOBALS['_RESULT'] = array(
         "res"   => 'Записка добавлена. Если это появилось, то скрипт выполнен нормально',
         );
         }
         break;
      }
include('./page_footer_admin.'.$phpEx);
?>

templates/subSilver/admin/zametki.tpl
Код: Выделить всё
<form method="POST" name="order" action="{ACTION}" onsubmit="return false">
  <div><label for="prim">Заметка:</label><textarea rows="11" id="prim" name="prim" cols="50"></textarea></div>
  <input type="submit" value="Отправить" name="submit" onclick="post();">
  </form>
 
<div id="ans" style="border:0px; padding:2px">
</div>

<script language=JavaScript src="./../ajax/JsHttpRequest.js"></script>
<script language="JavaScript">
    function post() {
        JsHttpRequest.query(
            '{ACTION}', // Тут мы посылаем запрос на сервер
            {
                // обозначаем переменные для php - $_REQUEST['str'];
                'prim': document.getElementById("prim").value
            },
            // Когда предыдущую функцию сросили
            //Вызываем эту, чтобы получить ответ
            function(result, errors) {
                // Write the answer.
                if (result) {
                    document.getElementById("ans").innerHTML =
                        result["res"];
                } else {
                   document.getElementById("ans").innerHTML =
                        errors["res"];
                }
            },
            false  // do not disable caching
        );
    }
</script>


Пока для теста такое качество кода сойдет ;)

Добавлено спустя 1 час 11 минут 31 секунду:

Не пробивает этот код:

pagestart.php

if ($HTTP_GET_VARS['sid'] != $userdata['session_id'])
{
redirect("index.$phpEx?sid=" . $userdata['session_id']);
}

Добавлено спустя 38 минут 29 секунд:

Теперь! (Проблема решена.)

require('./pagestart.' . $phpEx); - это нельзя показывать backend'у.
Вложения
JsHttpRequest.zip
(11.52 Кб) Скачиваний: 89
Alabay
phpBB 1.4.2
 
Сообщения: 51
Зарегистрирован: 23.01.2006 16:39

Сообщение Alek$ 20.10.2007 19:47

Alabay
в общем, если бы вы внимательно посмотрели, что приходит скрипту в массиве $HTTP_GET_VARS, то поняли бы сами, что вместо этого
Код: Выделить всё
'ACTION' => append_sid('admin_zametki.php?mode=zakaz'),

надо написать
Код: Выделить всё
'ACTION' => 'admin_zametki.php?mode=zakaz&'.$SID,


Добавлено спустя 3 минуты 21 секунду:

Alabay писал(а):require('./pagestart.' . $phpEx); - это нельзя показывать backend'у.

ага, и получить дыру в системе безопасности 8)
Просто ради эксперемента попробуйте разлогиниться и послать запрос типа
http://forum.com/admin/admin_zametki.ph ... im=bla-bla.
Ведь наверняка сработает и добавит запись :)

Добавлено спустя 16 минут 13 секунд:

А там в добавок еще и sql-инъекция имеется...
Useful links: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.


Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB 3.0.2 с предустановленной русификацией
Аватара пользователя
Alek$
Модератор
Модератор
 
Сообщения: 1627
Зарегистрирован: 03.08.2005 13:46
Откуда: Новосибирск


Вернуться в Для авторов (phpBB 2.0.x)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0