Показать сообщение отдельно
  #71  
Старый 04.11.2009, 16:29
qpo
Гость
 
Сообщений: n/a
Цитата:
Сообщение от LelyaSh Посмотреть сообщение
Почему-то не могу попасть в Дневники: ни в сам раздел, ни в Дневник конкретного человека. Появляется сообщение: Дневник не существует или не указан идентификатор (номер). Если вы уверены, что использовали правильную ссылку, свяжитесь с администрацией
Для всех у кого возникают подобные ошибки - описываю суть проблемы.
В исходном коде blog.php (v.2.0.2) на стр. 27
PHP код:
if (!empty($_REQUEST['blogid']) OR !empty($_REQUEST['blogtextid']) OR !empty($_REQUEST['b']) OR !empty($_REQUEST['bt']))
    {
        
$_REQUEST['do'] = 'blog';
    } 
как видно, используется суперглобальная (superglobal) переменная $_REQUEST, которая содержит в себе любые переменные, передаваемые методами GET, POST, а также все сookie от броузера пользователя. Т.е. объединяет содержимое массивов $_GET, $_POST, и $_COOKIE. Именно последний массив и вносит описанную выше проблему. Я проанализировал код HTML-страницы своего форума, и в коде счетчика Spylog который я не менял уже много лет - нашел строчку
Код:
d=document; d.cookie="b=b";
Этот код выставляет куку с названием d, которая транслруется дальше через PHP-препроцессор напрямую в массив $_REQUEST.

Код blog.php анализирует $_REQUEST['b'] и поскольку эта переменная указана, то делает ветвление $_REQUEST['do'] = 'blog'; вместо $_REQUEST['do'] = 'intro';
А поскольку для отображения блога требуется численная переменная-идентфикатор, а не буква, то возникает такая ошибка

Я вышел из положения очень просто - поменял код Spylog на новый, в котором уже сделана другая обработка. Все заработало. Не исключаю что в bigmir и ряде других счетчиков также выставляются куки с названиями переменных, используемыми блог-движком:

b, bt, cp, tag и т.д. (они перечислены в файле blog.php в массиве $_REQUEST в строках 25-42)
Ответить с цитированием