Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Из-за чего не работает скрипт в engine/ajax/ ?

Из-за чего не работает скрипт в engine/ajax/ ?


     11.03.2021    rating    Общие вопросы, Общие вопросы по PHP    646

вопрос
Нужно добавить в файл engine/ajax/rating.php код
echo "<script>Materialize.toast('Ваш счёт', 5000);</script>";


Не в какую не хочет работать, даже alert не работает.
А например в файле engine/module/addcomments.php всё отлично работает.


Ответа пока нет


7 комментариев

dj-avtosh
PHP-developer

dj-avtosh - 12 марта 2021 23:37 -

Ну так посмотри как обрабатывается ответ от файла addcomments.php - значит не просто возвращает, а может еще и выполняет его :)

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

maks
Юзер

maks - 13 марта 2021 11:07 -

Как быть тогда в этом случае? Нужно заново загрузить страницу?

dj-avtosh
PHP-developer

dj-avtosh - 13 марта 2021 12:16 -

нужно сделать так, что бы ответ от скрипта исполнился - посмотри как сделано для addcomments

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

maks
Юзер

maks - 13 марта 2021 20:55 -

Не знаю. Там всё по разному. Что нужно, чтобы исполнился? Как я понимаю, в комментах post запрос к файлу, а в рейтинге get. То есть, получается, что в ajax/rating.php не возможно обратится к сайту, потому что он не загружен? В общем не понимаю.

dj-avtosh
PHP-developer

dj-avtosh - 15 марта 2021 11:31 -

Я посмотрел в engine/ajax/rating.php - тут код нужно добавлять к переменной $buffer над этим:

$buffer = htmlspecialchars(


добавить типа такого:

$buffer .= "<script>Materialize.toast('Ваш счёт', 5000);</script>";


По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

maks
Юзер

maks - 15 марта 2021 15:00 -

В этом случае код срабатывает при каждом нажатии на рейтинг, а надо только если оценка выставляется.
Ставлю после этого запроса, но он там не работает.
$db->query( "UPDATE " . PREFIX . "_post_extras SET rating=rating+'$go_rate', vote_num=vote_num+1 WHERE news_id ='$news_id'" );


Вот почти весь мой код
require_once ENGINE_DIR . '/modules/sitelogin.php';

if( ! $is_logged ) $member_id['user_group'] = 5;

if( ! $user_group[$member_id['user_group']]['allow_rating'] ) die( "Hacking attempt!" );

$member_id['name'] = $db->safesql($member_id['name']);

if( $is_logged ) $where = "member = '{$member_id['name']}'";
else $where = "ip ='{$_IP}'";

$row = $db->super_query( "SELECT news_id FROM " . PREFIX . "_logs WHERE news_id ='$news_id' AND {$where}" );

if( !$row['news_id'] AND count( explode( ".", $_IP ) ) == 4 ) {
	
	$db->query( "UPDATE " . PREFIX . "_post_extras SET rating=rating+'$go_rate', vote_num=vote_num+1 WHERE news_id ='$news_id'" );

	// обновление баланса
	if( $is_logged ) {
		$db->query( "UPDATE " . USERPREFIX . "_users SET user_balance=user_balance+0.1 WHERE user_id ='$member_id[user_id]'" );
		//echo "<script>Materialize.toast('На Ваш счёт зачислено 0.1 рублей. Спасибо за Вашу оценку!', 5000);</script>";
	}

	$r = $db->super_query("SELECT b_rating FROM ".PREFIX."_post WHERE id={$news_id}");
	if($r['b_rating']) $b_rating = explode("|",$r['b_rating']);
	else $b_rating = array_fill(0,5,0);
	$b_rating[$go_rate-1]++;
	$b_rating = implode("|",$b_rating);
	$db->query( "UPDATE " . PREFIX . "_post SET b_rating='$b_rating' WHERE id ='$news_id'" );	

	if ( $db->get_affected_rows() )	{
		if( $is_logged ) $user_name = $member_id['name'];
		else $user_name = "noname";
		
        $db->query( "INSERT INTO " . PREFIX . "_logs (news_id, ip, member, rate) values ('$news_id', '$_IP', '$user_name', '$go_rate')" );
		if ( $config['allow_alt_url'] == "yes" AND !$config['seo_type'] ) $cprefix = "full_"; else $cprefix = "full_".$news_id;	

		clear_cache( array( 'news_', 'rss', $cprefix ) );

	}
}

$row = $db->super_query( "SELECT e.news_id, e.rating, e.vote_num, p.b_rating FROM ".PREFIX."_post p LEFT JOIN " . PREFIX . "_post_extras e ON p.id=e.news_id WHERE news_id ='$news_id'" );

$buffer = ShowRating( $row['news_id'], $row['rating'], $row['vote_num'], false );

$buffer = addcslashes($buffer, "\t\n\r\"\\/");

$buffer = htmlspecialchars("{\"success\":true, \"rating\":\"{$buffer}\", \"votenum\":\"{$row['vote_num']}\"}", ENT_NOQUOTES, $config['charset']);

$db->close();

@header( "Content-type: text/html; charset=" . $config['charset'] );
echo $buffer;

dj-avtosh
PHP-developer

dj-avtosh - 15 марта 2021 15:10 -

а где в вопросе написано про "надо только если оценка выставляется"?

Если уж по хорошему - то везде где плюсуется рейтинг (а там несколько мест) нужно втсавить код. Однако нужно помнить, что переменная $buffer внизу объявляется вновь, поэтому в начале скрипта нужно создать две переменных по типу


$successStatus = false;
$successSnippet = "<script>Materialize.toast('На Ваш счёт зачислено 0.1 рублей. Спасибо за Вашу оценку!', 5000);</script>";


далее после каждого эффективного запроса втсавить заполнение пустой переменой:

$successStatus = true;


и уже далее в $buffer ее добавить:

под вот это (как вариант):

$buffer = ShowRating( $row['news_id'], $row['rating'], $row['vote_num'], false );


вот это:

! empty ( $successStatus ) && $buffer .= $successSnippet;

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх