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

Custom mass PM - пропала строчка

Ответы на вопросы, связанные с модами для phpBB 2.0.x, кроме относящихся к форуму Для авторов (phpBB 2.0.x).
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Custom mass PM - пропала строчка

Сообщение IGO »

Скачать с phpbbGuru

Drupal refresh

Код: Выделить всё

# 
#-----[ OPEN ]------------------------------------------------ 
# 
privmsg.php 

# 
#-----[ FIND ]------------------------------------------------ 
# 
$to_username = $HTTP_POST_VARS['username']; 

# 
#-----[ REPLACE WITH ]---------------------------------------- 
#

// Start replacement - Custom mass PM MOD
$to_username_array = explode (";", $HTTP_POST_VARS['username']);
usort ($to_username_array);
foreach ($to_username_array as $name) $to_usernames .= "'".htmlspecialchars(trim($name))."',";
$to_usernames[strlen($to_usernames)-1]=" ";
// End replacement - Custom mass PM MOD

# 
Вот открываю privmsg.php, копирую, закидываю в поиск, а мне говорит, что искомая строчка не найдена.
У вас в privmsg.php вот этас трочка есть?

Код: Выделить всё

$to_username = $HTTP_POST_VARS['username'];
если есть то подскажите в каком диапазоне строк.
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Есть подобная

Код: Выделить всё

$to_username = phpbb_clean_username($HTTP_POST_VARS['username']);
Насколько я понял, улучшения по части безопасности. Искать по
$to_username
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Сообщение IGO »

Мод установил. Но у не которых пользователей пропала аватарка.
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Сообщение IGO »

Warning: Wrong parameter count for usort() in /home/nasha_forum/public_html/rezerve02/privmsg.php on line 1201
Выскакивает ошибка, после отправки ЛС-ки. Лс-ка отправляется.

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

Xpert
, это как рас то место в файте инстала, о котором я спрашивал.
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

IGO писал(а):privmsg.php on line 1201
Строчку в студию...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Сообщение IGO »

И так, чёрный ящик!
Xpert писал(а):Строчку в студию...
1201 строка

Код: Выделить всё

$sql = "SELECT user_id, user_notify_pm, user_email, user_lang, user_active
Вот весь блок с 1197 по 1212

Код: Выделить всё

if ( !empty($HTTP_POST_VARS['username']) )
		{
			$to_username = phpbb_clean_username($HTTP_POST_VARS['username']);

			$sql = "SELECT user_id, user_notify_pm, user_email, user_lang, user_active 
				FROM " . USERS_TABLE . "
				WHERE username = '" . str_replace("\'", "''", $to_username) . "'
					AND user_id <> " . ANONYMOUS;
			if ( !($result = $db->sql_query($sql)) )
			{
				$error = TRUE;
				$error_msg = $lang['No_such_user'];
			}

			$to_userdata = $db->sql_fetchrow($result);
		}
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Сообщение IGO »

OMus-VeNuS писал(а):После замены ее на то чем надо - ошибка должна пропасть - отпишитесь о результатах
Нет. Вот что получилось:
Could not obtain users PM information

DEBUG MODE

SQL Error : 1054 Unknown column 'Array' in 'where clause'

SELECT user_id, username, user_notify_pm, user_email, user_lang, user_active FROM phpbb_users WHERE username IN (Array) AND user_id <> -1 ORDER BY username ASC

Line : 1213
File : privmsg.php
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

IGO писал(а):SELECT user_id, username, user_notify_pm, user_email, user_lang, user_active FROM phpbb_users WHERE username IN (Array) AND user_id <> -1 ORDER BY username ASC
Найдите какими переменными формируется этот запрос, их пожалуйста сюда, их генерацию - тоже.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Что-то вы напутали, в 1201-й у вас сортировка должна быть судя по коду ошибки, а вы показываете запрос. Или меняли файл уже после возникновения ошибки?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Сообщение IGO »

Какя разница в строках?
№1

Код: Выделить всё

$to_username_array = explode (";", $HTTP_POST_VARS['username']);
№2

Код: Выделить всё

$to_username = phpbb_clean_username($HTTP_POST_VARS['username']);
Добавлено спустя 6 минут 45 секунд:

Xpert, менял исключительно вот это

Код: Выделить всё

$to_username_array = explode (";", $HTTP_POST_VARS['username']);
на

Код: Выделить всё

$to_username = phpbb_clean_username($HTTP_POST_VARS['username']);
и получил ошибку
Could not obtain users PM information

DEBUG MODE

SQL Error : 1054 Unknown column 'Array' in 'where clause'

SELECT user_id, username, user_notify_pm, user_email, user_lang, user_active FROM phpbb_users WHERE username IN (Array) AND user_id <> -1 ORDER BY username ASC

Line : 1213
File : privmsg.php
Если ставлю обратно

Код: Выделить всё

$to_username_array = explode (";", $HTTP_POST_VARS['username']);
то ошибка
Warning: Wrong parameter count for usort() in /home/nasha_forum/public_html/rezerve02/privmsg.php on line 1201
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
OMus-VeNuS

Сообщение OMus-VeNuS »

IGO писал(а):#
#-----[ OPEN ]------------------------------------------------
#
privmsg.php

#
#-----[ FIND ]------------------------------------------------
#
$to_username = $HTTP_POST_VARS['username'];

#
#-----[ REPLACE WITH ]----------------------------------------
#

// Start replacement - Custom mass PM MOD
$to_username_array = explode (";", $HTTP_POST_VARS['username']);
usort ($to_username_array);
foreach ($to_username_array as $name) $to_usernames .= "'".htmlspecialchars(trim($name))."',";
$to_usernames[strlen($to_usernames)-1]=" ";
// End replacement - Custom mass PM MOD

#
Почему ты сделал не это а то что ты сделал?
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Сообщение IGO »

OMus-VeNuS писал(а):Почему ты сделал не это а то что ты сделал?
OMus-VeNuS, потомучто этой строчки:

Код: Выделить всё

$to_username = $HTTP_POST_VARS['username']; 
НЕТ В privmsg.php
А зделал, потомучто:
Xpert писал(а):Есть подобная

Код: Выделить всё

$to_username = phpbb_clean_username($HTTP_POST_VARS['username']);
Насколько я понял, улучшения по части безопасности. Искать по
$to_username
И после отправки простого Личного сообщения выскакивает

Код: Выделить всё

Warning: Wrong parameter count for usort() in /home/nasha_forum/public_html/rezerve02/privmsg.php on line 1201
Но сообщение до адресата доходит.
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

IGO
Знаете, а OMus-VeNuS прав...
Вам надо было сделать следующим образом:

Код: Выделить всё

[find]
$to_username = phpbb_clean_username($HTTP_POST_VARS['username']);

[replace with]
// Start replacement - Custom mass PM MOD 
$to_username_array = explode (";", phpbb_clean_username($HTTP_POST_VARS['username'])); 
usort ($to_username_array); 
foreach ($to_username_array as $name) $to_usernames .= "'".htmlspecialchars(trim($name))."',"; 
$to_usernames[strlen($to_usernames)-1]=" "; 
// End replacement - Custom mass PM MOD
Вы же сделали изменения, опираясь вообще непонятно на что. Я вам точку поиска подсказал, а не на что надо менять...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
IGO
phpBB 2.0.1
Сообщения: 297
Стаж: 19 лет

Сообщение IGO »

Xpert
Я именно так и сделал. Но ошибка
Warning: Wrong parameter count for usort() in /home/nasha_forum/public_html/rezerve03/privmsg.php on line 1201
Всё равно есть. При массовой рассылке, такой ошибки нет.
Терпение и труд - всё перетрут
Я на этом форуме уже чуть больше года.. спасибо вам за помощь!
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Либо вообще уберите

Код: Выделить всё

usort ($to_username_array);
Либо измените usort на sort.
Хотя если честно я необходимости сортировать список пользователей не вижу...

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

Мда...
Пока ничего не трогайте, я багу по безопасности нашел...

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

Код: Выделить всё

// Start replacement - Custom mass PM MOD 
$to_username_array = explode (";", phpbb_clean_username($HTTP_POST_VARS['username'])); 
usort ($to_username_array); 
foreach ($to_username_array as $name) $to_usernames .= "'".htmlspecialchars(trim($name))."',"; 
$to_usernames[strlen($to_usernames)-1]=" "; 
// End replacement - Custom mass PM MOD
Изменить на

Код: Выделить всё

// Start replacement - Custom mass PM MOD 
$to_usernames_array = explode (';', phpbb_clean_username($HTTP_POST_VARS['username']));
$to_usernames = ''; 
for ($i=0; $i<count($to_usernames_array); $i++)
{
$to_usernames .= '\'' . htmlspecialchars(trim($to_usernames_array[$i])) . '\','; 
}
$to_usernames = rtrim($to_usernames, ',');
// End replacement - Custom mass PM MOD
Была ошибка в неинициализированной переменной $to_usernames, а также вообще код местами несколько не верный. Пожалуйста тщательно проверьте работоспособность обновленного варианта, я мод не ставил.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений

Вернуться в «Поддержка модов для phpBB 2.0.x»