Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

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

Форум для авторов модов для phpBB 2.0.x.
Alabay
phpBB 1.4.2
Сообщения: 51
Стаж: 18 лет 3 месяца

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

Сообщение Alabay »

Необходимо с помощью ajax на странице заметок (своя страница - textarea и кнопочка) добавить заметку.
Дело в том, что форум проверяет в админке - ты авторизован или нет. Соответственно при запросах того самого ajax'a форум говорит - пойдика залогинься и перенаправляет из admin/zametki.php?mode=add&sid=xxx на логин.
С кодом ajax'a все в порядке - если сделать запрос на обычный файл (без админских инклюдов) то все проходит удачно.
Что нужно брать с собой (куки?) и как? С удовольствием бы посмотрел пример, если кто-то писал. Использование ajaxa'a обязательно + в админке.
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 8 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

Alabay писал(а):Что нужно брать с собой (куки?) и как?
sid. Используйте функцию append_sid() для прикрепления sid'a к url, по которому обращается скрипт.
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
Alabay
phpBB 1.4.2
Сообщения: 51
Стаж: 18 лет 3 месяца

Сообщение Alabay »

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 раз.
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 8 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

Alabay
тогда покажите ваш код, желательно в виде мода или патча.
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
Alabay
phpBB 1.4.2
Сообщения: 51
Стаж: 18 лет 3 месяца

Сообщение Alabay »

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'у.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 8 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

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-инъекция имеется...
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.

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