@WeBBeW

Сделал систему лайков, но появилась ошибка как исправить?

Сделал систему лайков. И сделал чтоб на 1 новость можно ставить 1 лайк,но появилась проблема.Если ставить лайк на новость то пишет "лайк поставлен",а если 2 раз то "вы уже ставили лайк",но если на 1 новость поставить лайк,а потом на 2 и это еще раз сделать так то лайки ставятся,а они должны не ставится.

Вот код:

<? 		
		require "global_config.php";
		$querybd = mysqli_query($connect, "SELECT * FROM `likenews` WHERE `nick`='".$_COOKIE['nick']."'");
		while($row = mysqli_fetch_array($querybd))
		{
			$idnewss = $row['idnews'];
			$yess = $row['yes'];
		}
		$new_id = $_GET['new'];
		if($new_id == $idnewss && $yess == 1){echo "<center>Вы уже ставили лайк этой записи.<br><a href='news.php'>Обратно</a></center>";exit;}
		else{
			//$new_id = $_GET['new'];
			$result = mysqli_query($connect,"SELECT * FROM `news` WHERE `id`='$new_id' LIMIT 1");
			if (mysqli_num_rows($result) != 1)
			{
				echo "Новость не найдена!"; exit;
			}else {
				mysqli_query($connect, "UPDATE `news` SET `llke`=`llke`+1  WHERE `id`='$new_id' LIMIT 1");
				mysqli_query($connect, "INSERT INTO `likenews` (`nick`, `idnews`, `yes`) VALUES ('".$_COOKIE['nick']."', '$new_id', '1')");
				echo "<center>Новость успешно лайкнута!<br><a href=\"news.php\">Обратно</a></center>";
			}
		}
	}
?>
  • Вопрос задан
  • 98 просмотров
Решения вопроса 2
@magarif
Программист
У вас самый первый запрос возвращает все лайки, а вы записываете в переменные только последние. Отсюда и проблема

<?
require 'global_config.php';

$newsId = intval($_REQUEST['new']);
$nick   = $_COOKIE['nick'];

$querybd = mysqli_query($connect, 'SELECT `yes` FROM `likenews` WHERE `nick`="'. $nick .'" AND `idnews` = '. $newsId .' LIMIT 1;');
if ($row = mysqli_fetch_array($querybd)) {
  echo '<center>Вы уже ставили лайк этой записи.<br><a href="news.php">Обратно</a></center>';
} else {
  $result = mysqli_query($connect, 'SELECT * FROM `news` WHERE `id` = '. $newsId .' LIMIT 1;');
  if (mysqli_num_rows($result)) {
    mysqli_query($connect, 'UPDATE `news` SET `like` = `like` + 1  WHERE `id` = '. $newsId .' LIMIT 1;');
    mysqli_query($connect, 'INSERT INTO `likenews` (`nick`, `idnews`, `yes`) VALUES ("'. $nick .'", '. $newsId .', 1);');
    echo '<center>Новость успешно лайкнута!<br><a href="news.php">Обратно</a></center>';
  } else {
    echo 'Новость не найдена!';
  }
}
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А вы возьмите бумажку, карандаш, и самостоятельно пройдитесь по шагам своей программы. Шаг за шагом, шаг за шагом.
Ну или используйте метод утёнка.
Заодно попробуйте представить, что будет, если пользователь подменит куку 'name'.
Если не сможете понять самостоятельно

Вы получаете все строки из таблицы для текущего пользователя, а id новости проверяете только для последней.
В таблице `likenews` должно быть только две колонки, id_пользователя и id_новости. Они должны образовывать составной первичный ключ. Тогда при всём желании вы не сможете дважды поставить лайк.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы