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

User Reputation System 1.0.0

Ответы на вопросы, связанные с модами для phpBB 2.0.x, кроме относящихся к форуму Для авторов (phpBB 2.0.x).
Аватара пользователя
А.Г.А.
phpBB 1.4.4
Сообщения: 108
Стаж: 17 лет 3 месяца
Откуда: RU.MSK

User Reputation System 1.0.0

Сообщение А.Г.А. »

Отдельную тему для этого мода не нашел, извините.

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

############################################################## 
## MOD Title: Users Reputations System v.1.0.0
## MOD Author: antongranik < anton@granik.com > (Anton Granik) http://granik.com 
## MOD Description: Allows users to give reputation points to each others, earn it by posts and by "living" on forum, see the history of givings. Admin can edit users' reputations in admin cp. The whole system can be a text or a graphic version (5 different medals) and simple or advanced version (with choosing of how much reputation to give). You can get help on the system in the guide/ folder.
## MOD Version: 1.0.0 
## 
## Installation Level: (Intermediate) 
## Installation Time: 30 Minutes 
## Files To Edit (15):
## Included Files (21):
##		
## License: http://opensource.org/licenses/gpl-license.php GNU General Public License v2 
############################################################## 
## For security purposes, please check: http://www.phpbb.com/mods/ 
## for the latest version of this MOD. Although MODs are checked 
## before being allowed in the MODs Database there is no guarantee 
## that there are no security problems within the MOD. No support 
## will be given for MODs not found within the MODs Database which 
## can be found at http://www.phpbb.com/mods/ 
############################################################## 
## Author Notes: 
##		1. For the latest release always go to http://granik.com/forum/viewtopic.php?t=16
## 		2. Official support forum is http://granik.com/forum/viewforum.php?f=3 If you download this mod from other sides then the mentioned sites above, it might cause malicious code to enter into your phpBB Forum.
##		3. Russian translation is included in folder lang_russian/
##		4. In folder different medals/buckets/ there are different medals. The medals are buckets with paint. :) Just copy these files to your forum_root_directory/images/
##		5. Special thanks to my wife and daughter for leaving me untouched while writing this mod :) , rockboyteek, Raul Duke, cherokee red, Patrick Simmons, aboyd, Infamy and all those I have forgotten for testing and helping...
##		6. Tested on phpbb 2.0.19, 2.0.20.
##############################################################
Проблема заключается в следующем (причем, что странно, на локалхосте никакой проблемы нет):
При написании сообщения в любой теме выскакивает ошибка

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

Error in updating the reputations

DEBUG MODE

UPDATE phpbb_users SET user_reputation = user_reputation + 0,02, user_rep_last_time = 1186165477 WHERE user_id = 2

Line : 176
File : functions_reputation.php 
В настройках включен набор репутации по одному очку за каждые 50 сообщений, оставленные не форме. Несмотря на ошибку, сообщение оставляется, что логично, но репутация, естественно, не набирается.
Вот эти строки из файла functions_reputation.php:

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

	if ($mode != 'poll_delete')
	{
		$sql = "UPDATE " . USERS_TABLE . "
				SET user_reputation = user_reputation $sign_rep, user_rep_last_time = $last_time
				WHERE user_id = $user_id";
		if (!$db->sql_query($sql))
		{
			message_die(GENERAL_ERROR, 'Error in updating the reputations', '', __LINE__, __FILE__, $sql);
		}
	}
При удалении этого сообщения также выскакивает ошибка:

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

Error in updating the reputations

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '02, user_rep_last_time = 1186165477 WHERE user_id = 2' at line 2

UPDATE phpbb_users SET user_reputation = user_reputation - 0,02, user_rep_last_time = 1186165477 WHERE user_id = 2

Line : 176
File : functions_reputation.php
Очень надеюсь на вашу помощь.
...мы могли бы посылать каждого из вас... в нашу коллекцию полезных ссылок - Документация, ПОИСК, правила конференции, шаблон запроса, FAQ, руководство пользователя, руководство по установке модов и стилей.
© Общие ошибки новичков :D
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Сообщение rxu »

До запроса создайте какую-либо переменную и присвойте ей значение 0,02, а в запросе используйте уже эту переменную. Например (никак не связано с кодом мода, просто чтобы сориентировать):

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

$delta = 0,02;
$sql = "UPDATE phpbb_users SET user_reputation = user_reputation + $delta, user_rep_last_time = $current_time WHERE user_id = 2";
Изображение
Аватара пользователя
А.Г.А.
phpBB 1.4.4
Сообщения: 108
Стаж: 17 лет 3 месяца
Откуда: RU.MSK

Сообщение А.Г.А. »

но ведь так и происходит.
В запросе используется переменная $sign_rep, которая создается следующим образом:

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

		if ($rep_config['posts_to_earn'] != 0)
		{
			$sign_rep = ($mode == 'delete') ? '- ' . (1/$rep_config['posts_to_earn']) : '+ ' . (1/$rep_config['posts_to_earn']);
		} else
		{
			$sign_rep = ' + 0';
		}
Добавлено спустя 1 минуту 37 секунд:

Кстати, попробовал сделать так, как вы предложили:

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

Parse error: syntax error, unexpected ',' in /home/virtwww/w_reaclub_d9f23389/http/includes/functions_reputation.php on line 168
Кажется, у форума (или у хостинга, кто их знает, на локалхосте работает ведь все) проблемы с запятыми :D
...мы могли бы посылать каждого из вас... в нашу коллекцию полезных ссылок - Документация, ПОИСК, правила конференции, шаблон запроса, FAQ, руководство пользователя, руководство по установке модов и стилей.
© Общие ошибки новичков :D
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Сообщение rxu »

А.Г.А. писал(а): попробовал сделать так, как вы предложили
Выложите код, как именно попробовали.

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

Кстати, непонятно, откуда запятая появляется в 0,02. По идее, должна быть точка.
Изображение
Аватара пользователя
А.Г.А.
phpBB 1.4.4
Сообщения: 108
Стаж: 17 лет 3 месяца
Откуда: RU.MSK

Сообщение А.Г.А. »

сделал так:

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

	$rep_delta = 0,02;
	if ($mode != 'poll_delete')
	{
		$sql = "UPDATE " . USERS_TABLE . "
				SET user_reputation = user_reputation + $rep_delta, user_rep_last_time = $last_time
				WHERE user_id = $user_id";
		if (!$db->sql_query($sql))
		{
			message_die(GENERAL_ERROR, 'Error in updating the reputations', '', __LINE__, __FILE__, $sql);
		}
	}
так если точка дожна быть.. может ее попробовать? :oops:

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

попробовал тупо поставить вместо $rep_delta сразу значение - 0.02
заработало. Но это не выход, ведь при удалении сообщения надо, чтобы репутация уменьшалась, а так она будет увеличиваться на те же 0.02
...мы могли бы посылать каждого из вас... в нашу коллекцию полезных ссылок - Документация, ПОИСК, правила конференции, шаблон запроса, FAQ, руководство пользователя, руководство по установке модов и стилей.
© Общие ошибки новичков :D
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Сообщение rxu »

А.Г.А. писал(а): может ее попробовать?
А что тут пробовать. Результатом вычисления выражения 1/$rep_config['posts_to_earn'] должно быть число с точкой, а не с запятой. Откуда берется запятая?
Изображение
Аватара пользователя
А.Г.А.
phpBB 1.4.4
Сообщения: 108
Стаж: 17 лет 3 месяца
Откуда: RU.MSK

Сообщение А.Г.А. »

я не знаю.
до этого, вместо $rep_delta = 0,02;
написал $rep_delta = 0.02; - с точкой.

Почему-то вылезает абсолютно та же ошибка с запятой. :x
...мы могли бы посылать каждого из вас... в нашу коллекцию полезных ссылок - Документация, ПОИСК, правила конференции, шаблон запроса, FAQ, руководство пользователя, руководство по установке модов и стилей.
© Общие ошибки новичков :D
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Сообщение rxu »

Попробуйте вывести на экран переменную $sign_rep перед присвоением значения $sql. Очень желательно - не на рабочем форуме. Что-то вроде

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

echo $sign_rep;
exit;
Изображение
Аватара пользователя
А.Г.А.
phpBB 1.4.4
Сообщения: 108
Стаж: 17 лет 3 месяца
Откуда: RU.MSK

Сообщение А.Г.А. »

Сделал на локалхосте.
оставил сообщение, на экране: + 0.02, как и должно быть.

Сделал так же на рабочем:
На экране + 0,02

Ума не приложу, как такое может быть.

ЗЫ.На рабочем форуме сейчас не страшно проводить эксперименты)) Сайт толко открылся, и еще даже собственный домен не приобрел.. все на субдомене 1gb тусуется
...мы могли бы посылать каждого из вас... в нашу коллекцию полезных ссылок - Документация, ПОИСК, правила конференции, шаблон запроса, FAQ, руководство пользователя, руководство по установке модов и стилей.
© Общие ошибки новичков :D
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Сообщение rxu »

Видимо, вот это как раз описание Вашей проблемы:
Luzian (17-Nov-2005 08:03)

Be careful when using float values in strings that are used as code later, for example when generating JavaScript code or SQL statements. The float is actually formatted according to the browser's locale setting, which means that "0.23" will result in "0,23". Imagine something like this:
$x = 0.23;
$js = "var foo = doBar($x);";
print $js;
This would result in a different result for users with some locales. On most systems, this would print:
var foo = doBar(0.23);
but when for example a user from Germany arrives, it would be different:
var foo = doBar(0,23);

which is obviously a different call to the function. JavaScript won't state an error, additional arguments are discarded without notice, but the function doBar(a) would get 0 as parameter. Similar problems could arise anywhere else (SQL, any string used as code somewhere else). The problem persists, if you use the "." operator instead of evaluating the variable in the string.
So if you REALLY need to be sure to have the string correctly formatted, use number_format() to do it!
Изображение
Аватара пользователя
А.Г.А.
phpBB 1.4.4
Сообщения: 108
Стаж: 17 лет 3 месяца
Откуда: RU.MSK

Сообщение А.Г.А. »

тогда, возможно дело в том, что у меня раскомментирована строка

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

setlocale(LC_ALL, 'ru_RU.CP1251');
в lang_main.php...

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

Ну вы представляете!
Дело именно в этой раскомментированной строке)
Я вернул, как было в самом начале - и все вернулось на свои места))

Большое спасибо за помощь, rxu :)
...мы могли бы посылать каждого из вас... в нашу коллекцию полезных ссылок - Документация, ПОИСК, правила конференции, шаблон запроса, FAQ, руководство пользователя, руководство по установке модов и стилей.
© Общие ошибки новичков :D
Аватара пользователя
SemShulm
phpBB 1.4.0
Сообщения: 32
Стаж: 17 лет 3 месяца
Откуда: Израиль, Ашкелон

Сообщение SemShulm »

Нужно оставить только положительную репутацию.
Что и где нужно сделать?
Помогите,пожалуйста.Очень нужно.

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

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

Кто нибудь может помочь?Очень нужно
Аватара пользователя
crash
Former team member
Сообщения: 6517
Стаж: 19 лет 9 месяцев
Откуда: Бердск

Сообщение crash »

SemShulm
чтобы случайно не быть забаненным, прочтите правила форума
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
Zlodey12
phpBB 1.4.4
Сообщения: 171
Стаж: 17 лет 2 месяца

Сообщение Zlodey12 »

SemShulm писал(а):Нужно оставить только положительную репутацию.
Что и где нужно сделать
ну, если так сразу навскидку, то можно подправить файл reputation.tpl, убрав упоминание о "минусовой" репутации.
те, кто дружат с HTML сделают это сами без труда,
кто не дружит - могут сделать например вот так:

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

	<td class="row3"><input type="radio" name="rep_neg_to_give" value="0" checked><img src="images/reputation_pos.gif" alt="" border="0" align="middle">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="rep_neg_to_give" value="1"><img src="images/reputation_neg.gif" alt="" border="0" align="middle"></td>
заменить на

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

	<td class="row3"><input type="radio" name="rep_neg_to_give" value="0" checked><img src="images/reputation_pos.gif" alt="" border="0" align="middle"></td>

модераторам: объедините темы 9137 и 15917, ведь судя по названиям - это одно и тоже
Mac
phpBB 1.4.2
Сообщения: 58
Стаж: 16 лет 8 месяцев

Сообщение Mac »

А.Г.А. писал(а):тогда, возможно дело в том, что у меня раскомментирована строка

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

setlocale(LC_ALL, 'ru_RU.CP1251');
в lang_main.php...

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

Ну вы представляете!
Дело именно в этой раскомментированной строке)
Я вернул, как было в самом начале - и все вернулось на свои места))

Большое спасибо за помощь, rxu :)
У меня подобная проблема, но я не могу просто закомментировать эту строку

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

setlocale(LC_ALL, "ru_RU.cp1251");
потому что без нее у меня не работает поиск по русским словам. Очень прошу помочь советом.

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