Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/86: Рейтинг темы: голосов - 86, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 4

Как сделать скрипт "лайков" " 1"?

28.12.2013, 15:45. Показов 16648. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите сделать скрипт "лайков" "+1" на php mysql.
нужно что бы в бд записывалось ip того кто стваит лайк, id статьи и количиство лайков
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.12.2013, 15:45
Ответы с готовыми решениями:

Скрипт для накрутки лайков вконтакте
Здравствуйте, хочу начать изучать php, есть хорошая база по ЯП, гавнокод вроде как не пишу, парадигмы ООП и всё такое известно, некоторые...

Как сделать простую систему лайков и дизлайков
Допустим есть рядом 2 кнопки и если ты нажмешь на пурвую кнопку, то возля неё напишется "1" лайк. А если на другую нажать, так...

Как создать систему лайков на PHP/Ajax
Подскажите или поделитесь материалом созданием система лайков на PHP и Ajax.

13
 Аватар для KSiS
26 / 26 / 16
Регистрация: 03.06.2013
Сообщений: 138
28.12.2013, 16:47
HTML5
1
<a href="like.php?id=[id_статьи]">Like</a>
Файл like.php
PHP
1
2
3
4
5
6
7
8
<?php
$aid = (int)$_GET['id'];
if ($aid) {
  $ip = $_SERVER['REMOTE_ADDR'];
  mysql_query('INSERT INTO likes (aid, ip) VALUES ('.$aid.', "'.$ip.'") ');
  mysql_query('UPDATE [таблица с статьями] SET likes = like + 1 WHERE id = '.$aid.' LIMIT 1');
  header('Location: /article.php?id=' . $aid);
}
Таблица likes (SQL):
SQL
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS `likes` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `aid` INT(10) UNSIGNED NOT NULL,
  `ip` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Добавлено через 35 секунд
Насчет интеграции в сайт, пишите помогу. (скрипт написан на быструю руку).
2
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 4
28.12.2013, 19:28  [ТС]
почти то что надо. Но он считает сколько раз была нажата кнопка лайк, то есть ему без разницы какой id статьи. Ещё бы, как то, с возможностью ограничения по ip. то есть если с этого айпи на одну какую-то статью допустим (aid-7) поставили лайк, то этот айпи больше не может ставить лайк на этуже статью(aid-7), а на другие может
0
1 / 1 / 0
Регистрация: 19.12.2013
Сообщений: 21
28.12.2013, 21:44
IP не вариант т.к. может изменятся.

Определить IP
PHP
1
$_SERVER["REMOTE_ADDR"]
0
 Аватар для Forastero
562 / 339 / 87
Регистрация: 15.05.2013
Сообщений: 812
Записей в блоге: 1
29.12.2013, 00:55
Проще было бы если лайкать было разрешено только авторизированным пользователям. Торгда можно ограничить наверняка.

Ip - вещь непостоянная, и полагаться на него не нужно. Хотя, в добавок можно ещё и порцию куков клиенту подсунуть. И если повезёт, и пользователь окажется малограмотным, то даже после смены ip ему не позволит лайкнуть проверка на куки.))
0
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 4
29.12.2013, 19:05  [ТС]
Цитата Сообщение от Forastero Посмотреть сообщение
Проще было бы если лайкать было разрешено только авторизированным пользователям. Торгда можно ограничить наверняка.

Ip - вещь непостоянная, и полагаться на него не нужно. Хотя, в добавок можно ещё и порцию куков клиенту подсунуть. И если повезёт, и пользователь окажется малограмотным, то даже после смены ip ему не позволит лайкнуть проверка на куки.))
Цитата Сообщение от kuller88 Посмотреть сообщение
IP не вариант т.к. может изменятся.

Определить IP
PHP
1
$_SERVER["REMOTE_ADDR"]
согласен полностью, что ip это не самое надёжное, но и на регестрацию я пойти не могу, задумка в том и была, что бы обойтись как то без регистрации. а вот с куками тоже можно подумать

Добавлено через 14 часов 18 минут
на просторах нашёл такой код,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<php?
if(isset($_GET['like'])){
$like = $_GET['like'];
$wholike = $_SESSION['success'];
                         
                          $checkvoite = mysql_query("SELECT `id` FROM `articles` WHERE `wholike`='$wholike'");
                          $row = mysql_fetch_assoc($checkvoite);
                         
                                              if($row['id']==$like){
                         
                         
                          $error_voite = "Вы уже голосовали";
                         
                          }
                       
                          if(!isset($error_voite)){
                 
                          $likequery = "UPDATE `articles` SET `likecounter`=`likecounter`+1,`wholike`='$wholike' WHERE `id`='$like'";
 
                          mysql_query($likequery) or die(mysql_error());
                         
                                      header("Location: index.php");
                          exit;
                          }
}
?>

но он позволяет поставить лайк одному пользователю только один раз подряд. Если после него другой пользователь поставит лайк на статью - то первый может опять ставить лайк
0
 Аватар для KSiS
26 / 26 / 16
Регистрация: 03.06.2013
Сообщений: 138
29.12.2013, 23:34
Цитата Сообщение от takotako Посмотреть сообщение
то есть ему без разницы какой id статьи
Какраз есть разница, $aid = (int)$_GET['id']; это ID статьи
0
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 4
30.12.2013, 04:22  [ТС]
Цитата Сообщение от KSiS Посмотреть сообщение
Какраз есть разница, $aid = (int)$_GET['id']; это ID статьи
извиняюсь, затупил.
а ещё ограничение можно сделать, что бы на одну статью один лайк с одного айпи?
0
 Аватар для Rol1k
85 / 85 / 31
Регистрация: 14.06.2013
Сообщений: 207
30.12.2013, 06:06
JavaScript библиотека Evercookie. На данный момент ложит куки в 8мь мест. При удалении из одних, кука автоматически восстанавливается из оставшихся.
Evercookie — самые устойчивые куки
Evercookie - неубиваемые кукисы
0
 Аватар для KSiS
26 / 26 / 16
Регистрация: 03.06.2013
Сообщений: 138
30.12.2013, 11:23
Цитата Сообщение от takotako Посмотреть сообщение
а ещё ограничение можно сделать, что бы на одну статью один лайк с одного айпи?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$aid = (int)$_GET['id'];
if ($aid) {
  $ip = $_SERVER['REMOTE_ADDR'];
  $check_query = mysql_query('SELECT COUNT(*) FROM likes WHERE aid = ' . $aid . ' AND ip = "' . $ip . '"');
  $check = mysql_fetch_array($check_query);
  if ($check) {
    print 'Вы уже голосовали';
  }
  else {
    mysql_query('INSERT INTO likes (aid, ip) VALUES ('.$aid.', "'.$ip.'") ');
    mysql_query('UPDATE [таблица с статьями] SET likes = like + 1 WHERE id = '.$aid.' LIMIT 1');
    header('Location: /article.php?id=' . $aid);
  }
}
0
0 / 0 / 1
Регистрация: 08.01.2016
Сообщений: 95
16.01.2016, 18:09
Прикрутил это дело к своим новостям и не стал доделывать красоту в общем задался вопросом как это все дело сделать на ajax что бы страница не перезагружалась, а плавно ставился лайк. В аяксе я полный 0. Буду рад любой помощи.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?PHP
######################################
# Скрипт Fruit Farm
# Автор Rufus
# ICQ: 819-374
# Skype: Rufus272
######################################
$_OPTIMIZATION["title"] = "Новости";
$_OPTIMIZATION["description"] = "Новости проекта";
$_OPTIMIZATION["keywords"] = "Новости нашего проекта";
 
if(isset($_POST["newslike"])){
  $aid = (int)$_POST["like"];
  $ip = $_SERVER['REMOTE_ADDR'];
  $db->Query("SELECT * FROM ".$pref."_like WHERE aid = '$aid' AND ip = '$ip'");
  $check_query = $db->FetchArray(); 
  $check = $check_query;
  if ($check) {
    print 'Вы уже голосовали!';
  }
  else {
    $db->Query("INSERT INTO ".$pref."_like (aid, ip) VALUES ( '$aid', '$ip')");
    $db->Query("UPDATE ".$pref."_news SET likes = likes + 1 WHERE id = '$aid' LIMIT 1");
    header('Location: /news');
  }
}
?>
<div class="s-bk-lf">
    <div class="acc-title">Новости</div>
</div>
<div class="silver-bk"><div class="clr"></div>  
<?PHP
 
$db->Query("SELECT * FROM ".$pref."_news ORDER BY id DESC");
 
if($db->NumRows() > 0){
 
    while($news = $db->FetchArray()){
    
    ?>
 
            
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td align="left"><h3><?=$news["title"]; ?></h3></td>
    <td align="right"><strong><?=date("d.m.Y", $news["date_add"]); ?></strong></td>
     <td align="right"><br><br><br></td>
  </tr>
 
  <tr>
    <td colspan="2"><?=$news["news"]; ?></td>
  </tr>
    <tr>
    <td colspan="2">
    <form action="" method="post">
<input type="hidden" name="like" value="<?=$news["id"]; ?>" />
<input type="submit" name="newslike" value="Like <?=$news["likes"]; ?>" style="width: 90px; height: 30px; margin-top:10px;">
</form>
    </td>
  </tr>
</table> 
<BR />
    <?PHP
    
    }
 
}else echo "<center>Новостей нет :(</center>";
 
?>
</div>
<div class="clr"></div> 
<br>
Добавлено через 33 минуты
Нашел по интереснее код, но выводит весь список лайков как переделать что под каждой статьей был свой лайк?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<head>
    <link href="/css/stylelike.css" rel="stylesheet">
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script src="/js/scripts.js" type="text/javascript"></script>
</head>
<?PHP
######################################
# Скрипт Fruit Farm
# Автор Rufus
# ICQ: 819-374
# Skype: Rufus272
######################################
$_OPTIMIZATION["title"] = "Новости";
$_OPTIMIZATION["description"] = "Новости проекта";
$_OPTIMIZATION["keywords"] = "Новости нашего проекта";
 
/** Данные для подключения к Базе Данных */
$host = 'localhost';
$database = 'test';
$user = 'root';
$password = '167349';
 
/** Подключаемся в Базе Данных */
$pdo = new PDO('mysql:host='. $host .';dbname='.$database.';charset=cp1251', $user, $password);
$pdo->exec("SET NAMES cp1251");
 
/** Выбираем статьи и выводим их */
$query = $pdo->prepare("SELECT * FROM q64A_news ORDER BY id DESC");
$query->execute();
$articles = $query->fetchAll(PDO::FETCH_ASSOC);
?>
<div class="s-bk-lf">
    <div class="acc-title">Новости</div>
</div>
<div class="silver-bk"><div class="clr"></div>  
<?PHP
 
$db->Query("SELECT * FROM ".$pref."_news ORDER BY id DESC");
 
if($db->NumRows() > 0){
 
    while($news = $db->FetchArray()){
    
    ?>
 
            
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td align="left"><h3><?=$news["title"]; ?></h3></td>
    <td align="right"><strong><?=date("d.m.Y", $news["date_add"]); ?></strong></td>
     <td align="right"><br><br><br></td>
  </tr>
 
  <tr>
    <td colspan="2"><?=$news["news"]; ?></td>
  </tr>
    <tr>
        <td colspan="2">
 <?php if($articles):?>
            <?php foreach($articles as $article): ?>
            <div class="like" data-id="<?php print $article["id"]?>"><span class="counter"><?php print $article["likes"] ?></span></div>
            <?php endforeach; ?>
        <?php endif; ?>
    </td>
  </tr>
</table> 
<BR />
    <?PHP
    
    }
 
}else echo "<center>Новостей нет :(</center>";
 
?>
</div>
 
<div class="clr"></div> 
<br>
like.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
 
/** Данные для подключения к Базе Данных */
$host = 'localhost';
$database = 'test';
$user = 'root';
$password = '167349';
 
/** Подключаемся в Базе Данных */
$pdo = new PDO('mysql:host='. $host .';dbname='.$database.';charset=cp1251', $user, $password);
$pdo->exec("SET NAMES cp1251");
 
/** Получаем наш ID статьи из запроса */
$id = intval($_POST['id']);
$count = 0;
$message = '';
$error = true;
 
/** Если нам передали ID то обновляем */
if($id){
    /** Обновляем количество лайков в статье */
    
    $query = $pdo->prepare("UPDATE q64A_news SET likes = likes + 1  WHERE id = :id");
    $query->execute(array(':id'=>$id));
    
    /** Выбираем количество лайков в статье */
    $query = $pdo->prepare("SELECT likes FROM q64A_news WHERE id = :id");
    $query->execute(array(':id'=>$id));
    $result = $query->fetch(PDO::FETCH_ASSOC);
    $count = isset($result['likes']) ? $result['likes']  : 0;
    
    $error = false;
}else{
    /** Если ID пуст - возвращаем ошибку */
    
    $error = true;
    $message = 'Статья не найдена';
}
 
 
/** Возвращаем ответ скрипту */
 
// Формируем масив данных для отправки
$out = array(
    'error' => $error,
    'message' => $message,
    'count' => $count,
);
 
// Устанавливаем заголовот ответа в формате json
header('Content-Type: text/json; charset=utf-8');
 
// Кодируем данные в формат json и отправляем
echo json_encode($out);
0
0 / 0 / 2
Регистрация: 24.01.2015
Сообщений: 16
26.01.2016, 11:07
Цитата Сообщение от KSiS Посмотреть сообщение
Кликните здесь для просмотра всего текста
HTML5
1
2
HTML5
<a href="like.php?id=[id_статьи]">Like</a>

Файл like.php
PHP
1
2
3
4
5
6
7
8
<?php
$aid = (int)$_GET['id'];
if ($aid) {
 $ip = $_SERVER['REMOTE_ADDR'];
 mysql_query('INSERT INTO likes (aid, ip) VALUES ('.$aid.', "'.$ip.'") ');
 mysql_query('UPDATE [таблица с статьями] SET likes = like + 1 WHERE id = '.$aid.' LIMIT 1');
 header('Location: /article.php?id=' . $aid);
}

Таблица likes (SQL):
SQL
1
2
3
4
5
6
7
SQL
CREATE TABLE IF NOT EXISTS `likes` (
 `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `aid` INT(10) UNSIGNED NOT NULL,
 `ip` VARCHAR(255) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Насчет интеграции в сайт, пишите помогу. (скрипт написан на быструю руку).

Немного перелотал скрипт, столкнулся с проблемой.
Изучаю php, по-этому пробую все, в данном случае добавление лайка по IP и проверка данного IP в БД, если есть, то лайк убавляется.

Не пойму почему IP не удаляется в БД, подскажите пожалуйста:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$aid = (int)$_GET['id'];
    if ($aid) {
        
        $result = mysql_query('SELECT * FROM likes', $link_connect) or die(mysql_error() );
        $row = mysql_fetch_array($result);
        $validate_ip = $row['ip'];
            if ($validate_ip == $_SERVER['REMOTE_ADDR']){
                mysql_query('UPDATE Paid_SQL_Array SET like_users = like_users -1 WHERE id = '.$aid.'', $link_connect) or die(mysql_error() );
                mysql_query ("DELETE FROM likes WHERE ip = $validate_ip", $link_connect) or die(mysql_error() );
                header('Location: /index.php');
            }else{
                $ip = $_SERVER['REMOTE_ADDR'];
                mysql_query('INSERT INTO likes (aid, ip) VALUES ('.$aid.', "'.$ip.'")', $link_connect);
                mysql_query('UPDATE Paid_SQL_Array SET like_users = like_users +1 WHERE id = '.$aid.'', $link_connect) or die(mysql_error() );
                header('Location: /index.php');
                die();
            }
    }
В результате:
PHP
1
mysql_query ("DELETE FROM likes WHERE ip = $validate_ip", $link_connect) or die(mysql_error() );
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 '.8.225' at line 1
0
 Аватар для KSiS
26 / 26 / 16
Регистрация: 03.06.2013
Сообщений: 138
26.01.2016, 11:45
Попробуйте
PHP
1
mysql_query ("DELETE FROM likes WHERE ip = '$validate_ip'", $link_connect) or die(mysql_error() );
0
0 / 0 / 2
Регистрация: 24.01.2015
Сообщений: 16
26.01.2016, 20:29
Цитата Сообщение от KSiS Посмотреть сообщение
Попробуйте

Да этот вариант самый первый пробовал, ща попробую куки удалить

Добавлено через 57 минут
Цитата Сообщение от KSiS Посмотреть сообщение
Попробуйте

Да, именно в куках была проблема, так я изначально допилил скрипт правильно, спасибо все равно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.01.2016, 20:29
Помогаю со студенческими работами здесь

Как у себя на сайте вывести количество лайков и репостов с Facebook?
необходима подгрузка данных о количестве лайков и репостов созданной темы хотя бы раз в час. Возможно ли это сделать ? если да, то каким...

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

Схема работы лайков Вконтакте
Как сделан лайки в ВК? Кто нибудь знает? Покажите на примерах, 2 дня ломяю себе голову только этими лайками, они мне уже снятся. на PHP...

Выбрать популярные записи из базы исходя из просмотров (hits) и лайков (likes)
Всем привет, поиском пользовался ничего не нашел( Короче проблема такая, в базе есть таблица которая хранит посты(id, title, alias, hits,...

Создание системы лайков PHP
Добрый день! Имеется сайт, где каждый пользователь может добавлять свои посты. Необходимо реализовать систему лайков для каждого поста,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru