Задать вопрос
crazy_str
@crazy_str
web-программист

Почему скрипт лайков не хочет работать правильно?

Написал скрипт лайков но он не хочет работать правильно.
Дело вот в чем когда я ставлю лайк на чьей нибудь записи то он засчитывается и я больше не могу лайкнуть эту же запись, но у некоторых пользователей получается ставить по 100-200 лайков на одну и ту же запись.

Фрагмент показа записи

$query = $db->where("pp_member_id", $about['member_id']);
				$query = $db->getOne("likes");
				if($member['member_id'] == $query['member_id'])
				{
					$style->content("{script}", "");
					$button .= "<button type=\"button\" class=\"btn btn-primary\">Мне нравится {$stats['cnt']} <i class=\"fa fa-thumbs-up\"></i></button>";
				}
				else
				{
					$style->content("{script}", "");
					$button .= "<div id=\"result\">
									<form action=\"\" method=\"POST\" id=\"likes\">
										
											<input type=\"hidden\" name=\"member_id\" value=\"{$member['member_id']}\">
											<input type=\"hidden\" name=\"pp_member_id\" value=\"{$about['member_id']}\">
											<button type=\"button\" class=\"btn btn-success\" onclick=\"likes();\">Нравится {$stats['cnt']} <i class=\"fa fa-thumbs-up\"></i></button>
									</form>
									<script type=\"text/javascript\">
											function likes()
											{
												$.ajax({
													type: \"POST\",
													url: \"/like.php\",
													data: $(\"#likes\").serialize(),
													success: function(data) 
													{
														document.getElementById(\"result\").innerHTML = data;
													}
												});
											};
									</script>
								</div>
								";
				}

Фрагмент Like.php

$member_id = (int)$_POST['member_id'];
	$pp_member_id = (int)$_POST['pp_member_id'];
	
	$member_id = isset($member_id) ? $member_id : false;
	$pp_member_id = isset($pp_member_id) ? $pp_member_id : false;
	
	$query = $db->where("pp_member_id", $pp_member_id);
	$query = $db->getOne("likes");
	if($query['member_id'] == $member_id)
	{
		echo "<button href=\"javascript:void(0);\" class=\"btn btn-danger\">Вы уже ставили отметку мне нравится</button>";
	}
	else
	{
		$data = array(
			'pp_member_id' => $pp_member_id,
			'member_id' => $member_id
		);
		$db->insert('likes', $data);
		
		$stats = $db->where("pp_member_id", $pp_member_id);
		$stats = $db->getOne ("likes", "count(*) as cnt");
		echo "<button href=\"javascript:void(0);\" class=\"btn btn-primary\">Мне нравится {$stats['cnt']} <i class=\"fa fa-thumbs-up\"></i></button>";
	}

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

Данные для входа чтобы посмотреть
Login: Test_Test
Password: 123456
forum.raknet.ru
После авторизации переходим на
ucp.raknet.ru/bio

//Инициирую загрузку данных пользователя по сессии
$about = IPSMember::load($param, "all");//param это id пользователя кому мы ставим лайк
//проверяю авторизован ли данный пользователь который хочет поставить лайк
if($member['member_id'])
//делаю запрос в таблицу
				$query = $db->where("pp_member_id", $about['member_id']);
				$query = $db->getOne("likes");
//и проверяю
//Если сессия_id == тому что пришло в запросе в этом случае $query_member_id
				if($member['member_id'] == $query['member_id'])
//то вывожу ему кнопку что вы уже ставили лайк
//если же он не ставил то есть 
if($member['member_id'] != $query['member_id'])
//то вывожу ему функцию
<div id=\"result\">
<form action=\"\" method=\"POST\" id=\"likes\">
	
		<input type=\"hidden\" name=\"member_id\" value=\"{$member['member_id']}\">//кто ставит лайк
		<input type=\"hidden\" name=\"pp_member_id\" value=\"{$about['member_id']}\">//кому мы поставим лайк
		<button type=\"button\" class=\"btn btn-success\" onclick=\"likes();\">Нравится {$stats['cnt']} <i class=\"fa fa-thumbs-up\"></i></button> //ставим лайк
</form>
<script type=\"text/javascript\">
		function likes()
		{
			$.ajax({
				type: \"POST\",
				url: \"/like.php\",
				data: $(\"#likes\").serialize(),
				success: function(data) 
				{
					document.getElementById(\"result\").innerHTML = data;
				}
			});
		};
</script>
</div>

//в скрипте like я снова проверяю

	$member_id = (int)$_POST['member_id']; //от случайных инъекций 
	$pp_member_id = (int)$_POST['pp_member_id']; //от случайных инъекций 
	
	$member_id = isset($member_id) ? $member_id : false; //проверяю не пусто ли
	$pp_member_id = isset($pp_member_id) ? $pp_member_id : false; //проверяю не пусто ли
//делаю запрос кому поставили лайк
	$query = $db->where("pp_member_id", $pp_member_id);
	$query = $db->getOne("likes");
//и снова проверяю 
//если в запросе кому поставили лайк имеется ид того пользователя кто поставил лайк
if($query['member_id'] == $member_id)
//то выводим кнопку
//вы уже поставили отметку мне нравится
//если же 
if($query['member_id'] != $member_id)
//то заносим данные в таблицу
$data = array(
			'pp_member_id' => $pp_member_id,
			'member_id' => $member_id
		);
		$db->insert('likes', $data);

решил проблему путём добавления ещё одной проверки в запросе
$query = $db->where("pp_member_id", $about['member_id'])->where('member_id', $member['member_id']);
$query = $db->where("pp_member_id", $pp_member_id)->where('member_id', $member_id);
  • Вопрос задан
  • 560 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
muxahuk1214
@muxahuk1214
html/html5; css/css3/scss; js/jQuery; php/nodejs;
предположу что у вас нету проверки, если $member_id не задан..
а когда вы делаете (int)$_POST['member_id'] то результат равняется 0
и проверка isset($member_id) просто не к чему тут..

Подебагте...
var_dump( $member_id ) в разных частях кода, посмотрите что не так у не зашедшего пользователя..
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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