Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция Like (https://javascript.ru/forum/misc/46862-funkciya-like.html)

Samsam 27.04.2014 15:11

Функция Like
 
Здравствуйте. Хочу на сайте внедрить функцию ( мне нравиться ) используя js.

Что бы при нажатие на ссылку (мне нравиться ) менялась сама ссылка (мне нравиться ) на, допустим ( мне понравилось ) , увеличивалось значение count(like) которое прежде было взято из БД на +1 и шла запись в БД .

При повторном нажатие шла бы обратная операция.

nerv_ 27.04.2014 15:15

Цитата:

Сообщение от Samsam
Хочу на сайте внедрить

Даю добро :)

Samsam 27.04.2014 16:16

:)

Samsam 28.04.2014 01:51

Здравствуйте. пытаюсь сделать функцию 'мне нравится" Вот что получается

<?php $like=$rowlents_p['like'];
echo $like;
?>

<script>
var a=<?php echo $like; ?>;
function order()
{
ord = a+1;
noord = "<img src=images/like.png>";
document.getElementById("text").innerHTML = ord;
document.getElementById("like2").innerHTML = noord;
document.getElementById("like").style.display = 'none';
document.getElementById("like2").style.display = "block" ;
}
function noorder()
{
ord = a;
noord = "<img src=images/like2.png>";
document.getElementById("text").innerHTML = ord;
document.getElementById("like").innerHTML = noord;
document.getElementById("like").style.display = "block" ;
document.getElementById("like2").style.display = 'none';
}
</script>

<table><tr>
<td><div id="like2" onclick="noorder();"></div><div id="like" onclick="order();"><img src=images/like2.png></div></td>
<td><div id="text" ><?php echo $like; ?></text></div></td>
</tr></table>


$rowlents_p['like'] Это количество всех лайков взятых из базы. В принципе скрипт работает но...

Допустим у меня есть массив новостей .

Вывожу их

$lents_p = mysql_query("SELECT * FROM `posts` ORDER BY id DESC ") or die(mysql_error());
while($rowlents_p = mysql_fetch_array($lents_p))
include(like.php);
{
echo $rowlents_p[news];
}

Так скрипт не работает. как я понимаю это потому что функции в js повторяются.

Вопрос. Как мне сделать так что бы кнопка была в каждой новости которою выведет массив

Заранее спасибо.

Vlasenko Fedor 28.04.2014 02:11

$html = "";
while($rowlents_p = mysql_fetch_array($lents_p))
{
  $html .= $rowlents_p[news] . $like;
}
echo $html;

Samsam 28.04.2014 02:45

это не чего не даёт .. $like это?

Samsam 28.04.2014 02:47

js не срабатывает. он выходит с каждым массивом, но работает только с первым массивом


$html = "";
$lents_p = mysql_query("SELECT * FROM `posts` ORDER BY id DESC ") or die(mysql_error());
while($rowlents_p = mysql_fetch_array($lents_p))
{
$html .= $rowlents_p['like'] . $like ."<br>" ;
include ('7.php');
}
echo $html;

Vlasenko Fedor 28.04.2014 03:48

зачем в цикле делать include ('7.php'); ?
$like = '<div class="like"><img src="http://javascript.ru/forum/images/smilies/smile.gif"></div>';

<body>
  <div class="like">
    <img src="http://javascript.ru/forum/images/smilies/smile.gif">
  </div>
  <div class="like">
    <img src="http://javascript.ru/forum/images/smilies/smile.gif">
  </div>
  <div class="like">
    <img src="http://javascript.ru/forum/images/smilies/smile.gif">
  </div>
  <script>
    var likes = document.querySelectorAll("div.like");
    var len = likes.length;
    var cllike = function () {
        var limg = this.querySelector("img");
        limg.src = limg.src == "http://javascript.ru/forum/images/smilies/smile.gif" ? "http://javascript.ru/forum/images/smilies/dance3.gif" : "http://javascript.ru/forum/images/smilies/smile.gif";
      }
    while (len--) likes[len].onclick = cllike;
  </script>
</body>

Samsam 28.04.2014 11:44

спасибо за ответ .. но кажется это не подходит так как этот скрипт просто методом селект меняет картинку но не может считывать информацию с массива пхп . ( берёт только первый массив ) ... Либо я туплю ..

<?php
$lents_p = mysql_query("SELECT * FROM `posts` ORDER BY id DESC ") or die(mysql_error());
while($rowlents_p = mysql_fetch_array($lents_p))
{
$like=$rowlents_p['like'];
echo "<div class=like>
<img src=images/like2.png>
</div> " ;

}

?>
<script>
var likes = document.querySelectorAll("div.like");
var len = likes.length;
var a=<?php echo $like; ?>;
var cllike = function () {
var limg = this.querySelector("img");
limg.src = limg.src == "http://javascript.ru/forum/images/smilies/smile.gif" ? "http://javascript.ru/forum/images/smilies/dance3.gif" : "http://javascript.ru/forum/images/smilies/smile.gif";
alert(a);
}
while (len--) likes[len].onclick = cllike;
</script>
</body>


при выводе alert(a); выходит самый первый массив .

Samsam 28.04.2014 16:54

есть у кого нибудь идеи ?

Samsam 29.04.2014 01:15

вопрос остался открытым. Жду помощи.. Всем спасибо

Samsam 30.04.2014 13:13

Up

Vlasenko Fedor 30.04.2014 21:36

Samsam,
опишите логику вашего велосипеда. Еще раз не все понятно что вы делаете. Получаете какие то данные из базы и что где отправляете и т. д. чем более точнее опишите проблему и покажите свои наработки решения тем ваши шансы увеличиваются для решения задачи

Samsam 30.04.2014 22:50

есть цикл
Массив 1 <div class=like>Нравиться</div>
Массив 2 <div class=like>Нравиться</div>
Массив 3 <div class=like>Нравиться</div>
Массив 4 <div class=like>Нравиться</div>
и т.д

Задача в том что бы при нажатии на (Нравиться) выполнялось следущие:

1. надпись (нравится) менялась на (мне понравилось)
2. выполнялось запись в БД, к примеру ( mysql_query("UPDATE posts SET like='$like', WHERE id='$id'"); )
3. при повторном нажатие на (нравится) выполнялось бы обратное.
то есть менялась надпись (мне понравилось) на (нравится) и опять выполнялось запись в БД..
главная моя загвоздка в том что я не могу использовать js в циклах пхп . Спасибо за внимание

Vlasenko Fedor 30.04.2014 23:25

$html = "";
$i = 0;
while($rowlents_p = mysql_fetch_array($lents_p))
{
  $html .= $rowlents_p[news];
  $html .= '<div class="like" data-poz="' . $i++ . '">';
  $html .= '<img src="http://javascript.ru/forum/images/smilies/smile.gif">';
  $html .= '</div>';
}
echo $html;

php сформирует страницу которую будешь обрабатывать так
<div class="like" data-poz="0">
  <img src="http://javascript.ru/forum/images/smilies/smile.gif">
</div>
<div class="like" data-poz="1">
  <img src="http://javascript.ru/forum/images/smilies/smile.gif">
</div>
<div class="like" data-poz="2">
  <img src="http://javascript.ru/forum/images/smilies/smile.gif">
</div>
<script>
  var likes = document.querySelectorAll("div.like");
  var len = likes.length;
  var addlike = function (poz) {
      alert("Add like - " + poz);
    };
  var dellike = function (poz) {
      alert("Delete like - " + poz);
    };
  var cllike = function () {
      var limg = this.querySelector("img");
      var img1 = "http://javascript.ru/forum/images/smilies/smile.gif";
      var img2 = "http://javascript.ru/forum/images/smilies/dance3.gif";
      var poz = this.getAttribute("data-poz");
      if (limg.src == img1) {
        limg.src = img2;
        addlike(poz);
      } else {
        limg.src = img1;
        dellike(poz);
      }
    };
  while (len--) likes[len].onclick = cllike;
</script>

Samsam 01.05.2014 00:22

спасибо..
почему при выводе допустим
var a = "<?php print $rowlents_p[userid]; ?>" ;
alert(a); он не выводит информацию

Vlasenko Fedor 01.05.2014 01:09

если код внутри страницы где исполняется php то будет работать
если данная конструкция в вынесенном файле то конечно же нет
достаточно отрыть исходный код страницы и вы увидите чему равна a
<?php 
	echo "<script>alert(" . $rowlents_p[userid] . ");</script>";
?>

Samsam 05.05.2014 04:26

<?
$g = "gus";
$i = 0;
while ($i < 5) {
$i++;
$d = $i;
echo "
<div id= ".$d." onclick='start()'>Like</div>
<div id='gusa'>0</div> " ;

print "
<script>
var ord = 'No Like' ;
var ords = 'Like' ;
var t = ".$d.";
function start()
{
var like = document.getElementById(t).innerHTML;
var viw = document.getElementById('gusa').innerHTML;

if ( like == 'Like' )
{
document.getElementById(t).innerHTML = t ;

document.getElementById('gusa').innerHTML = viw+1;
alert('tebe ponravilos');
}
else
{
document.getElementById(t).innerHTML = ords;


document.getElementById('gusa').innerHTML = viw-1;

alert('tebe bolshe ne nravitsa');

}
}
</script>


";







}
?>


Ну почему же скрипт не работает в каждом цикле массива. реагирует только последний цикл массива.. Не как не могк найти решение..

Samsam 06.05.2014 05:50

Up

Samsam 07.05.2014 23:52

Может подсказка будет от кого нибудь..

Erolast 08.05.2014 10:50

Не заниматься хренью и найти готовое решение, либо, что еще лучше, толкового программиста.

Samsam 08.05.2014 23:07

Нужен ответ на мой предыдущий вопрос..
Erolast, спасибо за совет..

Erolast 09.05.2014 07:06

Почему тут нет смайла фейспальма?
Во-первых - что еще за цикл массива? Используй нормальную терминологию. Во-вторых - конкретно в этом цикле лучше использовать for, а не while. Не, можно и while, но привыкай использовать инструменты по назначению. В-третьих - никогда не суди, что что-то не работает по непроизошедшему следствию. Посмотри в код страницы. Все у тебя печатается. Неправильно работает собственно JS, и не работает потому, что каждый новый скрипт переопределяет функцию start. Естественно, работает только последний вариант этой функции.

Цитата:

Erolast, спасибо за совет..
Да не за что. И совет, кстати, еще в силе.

Samsam 12.05.2014 08:35

вроде всё получилось но скрипт зависает и не всегда работает

<?php
session_start();
include ('global/connect.php');

$lents_p = mysql_query("SELECT * FROM `posts` ORDER BY id DESC ") or die(mysql_error());
while($rowlents_p = mysql_fetch_array($lents_p))
{
$i=$rowlents_p['like'];
$id = $rowlents_p['userid'];
echo "

News ".$id."
<div class='like' data-poz=".$i."><a>like</a></div>
<div id=".$i."> ".$i." </div><br>
" ;

}
?>

<script>
var likes = document.querySelectorAll("div.like");
var len = likes.length;

var cllike = function () {
var limg = this.querySelector("a");
var da = "like";
var net = "nolike";
var poz = this.getAttribute("data-poz");

if (limg.a == net) {
limg.a = da ;
document.getElementById(poz).innerHTML = parseInt(poz) ;
} else {
limg.a = net ;
document.getElementById(poz).innerHTML = 1 + parseInt(poz);
}
};
 while (len--) likes[len].onclick = cllike;
</script>

Erolast 13.05.2014 13:42

Цитата:

вроде всё получилось но скрипт зависает и не всегда работает
Именно поэтому прекращай заниматься ерундой и найди нормального программиста.


Часовой пояс GMT +3, время: 02:51.