За последние 24 часа нас посетили 57360 программистов и 1809 роботов. Сейчас ищут 1028 программистов ...

Лайки

Тема в разделе "Прочие вопросы по PHP", создана пользователем Andrew1443, 13 дек 2015.

  1. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    Хочу создать лайки на сайте. Проблем с созданием php и javascript оформления нет вообще. Все работает отлично. Но проблема в том, что статьи, которые нужно оценивать выводятся на одной странице и при клике на иконку, лайк засчитывается всем постам сразу. Помогите решить проблему. Нужно чтобы все работало на 1 странице
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ну так сделай лайк - кнопкой сабмита для скрытой формы, в которой лежит идентификатор нужного поста. И, по факту прибытия этого лайка на сервер, смотри, что за айдишник в нем лежит.
     
  3. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    У меня в цикле do{ } while() находятся все посты и каждый пост имеет свой уникальный id, но проблема скорее всего в том, что в javascript я обращаюсь к id элементов, которые находятся в цикле и получается, что он берет значение только лишь одного поля и присваивает его всем
     
  4. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Шта, дувайл, зачем ? У тебя есть событие, onclick и всевозможные способы присвоения данных элементу-инициатору. Какие циклы ?
     
  5. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    В этом цикле я вывожу все записи из базы данных
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Здесь был Попов...
    Охщи... Здесь точно был Попов.
     
    Shkiper777 нравится это.
  7. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    Кто это такой?

    Добавлено спустя 27 секунд:
    Так что же мне все таки нужно сделать?
     
  8. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Так, циклом ты по-любому все записи выводишь, вопрос в том, как ты взаимодействуешь с построенными элементами.
    Код javascript в студию
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ну так при генерации постов, генерируй форму Like, где есть скрытое поле с ID поста и есть кнопка сабмит, стилизованная под картинку с пальцем вверх. Всеу. JS не нужен. Разве что для того, чтобы эту форму на сервер аяксом прокинуть.

    Приходит на сервер запрос, глядишь - ага, ID такой-то лайкнули. Окей. Повысим ему рейтинг. Эй, база данных, повысь рейтинг посту с таким-то ID!
     
  10. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    Я так и делаю.
    Код (PHP):
    1. do {
    2.             echo "<ul class='us_mes'> 
    3.             <li style='float: left;'><a href='index.php?option=$_GET[option]'><img src='$us_ava[avatar]' class='us_mess_avatar'></a> </li>
    4.             <li id='news_id' value='$user_mess[id]'></li>
    5.             <li><h4>$user_mess[title]</h4></li>
    6.             <li><h4>$user_mess[text]</h4></li>
    7.             <li style='text-align: right; font: 13px Verdana; color: grey; margin-right: 5px;'><h4>$user_mess[date]</h4></li>
    8.             <li class='li-like'><img src='";
    9.             $like = $mysqli->query("SELECT `news_id` FROM `like` WHERE `news_id`='$user_mess[id]'");
    10.             if($like->num_rows > 0) {
    11.             echo "images/like-active.png";
    12.             }
    13.             else {
    14.                 echo "images/like.png";
    15.             }
    16.             $lk = $mysqli->query("SELECT `like`, `dislike` FROM `news` WHERE id='$user_mess[id]'");
    17.             $num_likes = $lk->fetch_assoc();
    18.             echo "' class='like-dislike' id='ilike'><span class='like-span'>$num_likes[like]</span></li>
    19.             <li class='li-like'><img src='";
    20.             $disl = $mysqli->query("SELECT `news_id` FROM `dislike` WHERE `news_id`='$user_mess[id]'");
    21.             if($disl->num_rows > 0) {
    22.             echo "images/dislike-active.png";
    23.             }
    24.             else {
    25.                 echo "images/dislike.png";
    26.             }
    27.             echo "' id='idislike' class='like-dislike'><span class='dislike-span'>$num_likes[dislike]</span></li>
    28.             
    29.             </ul>";
    30.             echo '<script type="text/javascript">
    31.     $("#ilike").click(function() {
    32.         var id = document.getElementById("news_id").value;
    33.         function likePlus() {
    34.         $.ajax({
    35.         url: "functions/like_update.php",
    36.         type: "POST", 
    37.         data: ({id: id}), 
    38.         dataType: "html", 
    39.         cache: false,
    40.         success: function(data) {
    41.                 $(".like-span").html(data);
    42.             }
    43.         });
    44.     }
    45.         function dislikePlus() {
    46.         $.ajax({
    47.         url: "functions/dislike_update.php",
    48.         type: "POST", 
    49.         data: ({id: id}), 
    50.         dataType: "html", 
    51.         cache: false,
    52.         success: function(data) {
    53.                 $(".dislike-span").html(data);
    54.             }
    55.         });
    56.     }
    57.         
    58.         $.ajax ({ 
    59.             url: "functions/like.php", 
    60.             type: "POST", 
    61.             dataType: "html", 
    62.             data: ({like: 1, id: id}), 
    63.             success: function(data) {
    64.                 if(data == "false") {
    65.                     alert("Вы уже оценили эту запись");
    66.                 }
    67.                 if(data == "true") {
    68.                     $("#ilike").attr("src", "images/like-active.png");
    69.                     likePlus();
    70.                 }
    71.                 if(data == "like") {
    72.                     dislikePlus();
    73.                     likePlus();
    74.                     $("#idislike").attr("src", "images/dislike.png");
    75.                     $("#ilike").attr("src", "images/like-active.png");
    76.                 }
    77.                 
    78.             }
    79.         });
    80.     });
    81.         $("#idislike").click(function() {
    82.         var id = document.getElementById("news_id").value;
    83.         function likePlus() {
    84.         $.ajax({
    85.         url: "functions/like_update.php",
    86.         type: "POST", 
    87.         data: ({id: id}), 
    88.         dataType: "html", 
    89.         cache: false,
    90.         success: function(data) {
    91.                 $(".like-span").html(data);
    92.             }
    93.         });
    94.     }
    95.         function dislikePlus() {
    96.         $.ajax({
    97.         url: "functions/dislike_update.php",
    98.         type: "POST", 
    99.         data: ({id: id}), 
    100.         dataType: "html", 
    101.         cache: false,
    102.         success: function(data) {
    103.                 $(".dislike-span").html(data);
    104.             }
    105.         });
    106.     }
    107.         $.ajax ({ 
    108.             url: "functions/dislike.php", 
    109.             type: "POST", 
    110.             dataType: "html", 
    111.             data: ({like: 1, id: id}), 
    112.             cache: false,
    113.             success: function(data) {
    114.                 if(data == "false") {
    115.                     alert("Вы уже оценили эту запись");
    116.                 }
    117.                 if(data == "dislike") {
    118.                     dislikePlus();
    119.                     likePlus();
    120.                     $("#ilike").attr("src", "images/like.png");
    121.                     $("#idislike").attr("src", "images/dislike-active.png");
    122.                 }
    123.                 if(data == "true"){
    124.                     $("#idislike").attr("src", "images/dislike-active.png");
    125.                     dislikePlus();
    126.                 }
    127.             }
    128.         });
    129.     });
    130. </script>';
    131.         }
    132.         while($user_mess = $mess->fetch_assoc()); 
     
  11. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    АААААААААААААААААААААААААААААААААА.........
    Посоны, у вас тут весело.

    Чувак, зачем ты в цикле дублируешь код javascript ?
     
    Shkiper777 нравится это.
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    do...while
    array[index] вместо array['index']
    бездумное использование сниппетов

    Это Ruseller, у которого вы купили курс по PHP. Совершенно точно. Это его стиль. Либо вас учил один из его адептов, пришедших к успеху...
     
  13. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    Я самоучка - это во-первых. А во-вторых, я так понимаю, тут мне никто не поможет?
     
  14. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Так, ну по-существу, у тебя javascript код выводится ровно так же как и вся остальная верстка, каждый раз за итерацию цикла, у тебя дувайл и ду выполнится хотябы раз, не смотря на отсуствие или полноту ответа из мускуля (если мне память не изменяет), в джаваскрипте ты берёшь за значение
    Код (PHP):
    1. var id = document.getElementById("news_id").value; 
    Но у тебя в цикле же порождаются кучи таких
    Код (PHP):
    1. <li id='news_id' value='$user_mess[id]'></li> 
    И раз ты используешь jQuery, то зачем пишешь document.getElementById ?
    У тебя событие на кнопке, так ? Ну и ищи от кнопки нужный элемент
    Код (PHP):
    1. $("#ilike").click(function() {
    2.         var id = $(this).parents("#news_id").val();
    3.  
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  15. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    Спасибо, попробую

    Добавлено спустя 19 минут 32 секунды:
    Нет, с помощью вашего метода у меня неопределенный id(undefined)
     
  16. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Начнём с того, во что превратился твой код, скинь пожалуйста ещё раз, только на pastebin
     
  17. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    Код (PHP):
    1.         do {
    2.             echo "<ul class='us_mes'> 
    3.             <li style='float: left;'><a href='index.php?option=$_GET[option]'><img src='$us_ava[avatar]' class='us_mess_avatar'></a> </li>
    4.             <li id='news_id' value='$user_mess[id]'></li>
    5.             <li><h4>$user_mess[title]</h4></li>
    6.             <li><h4>$user_mess[text]</h4></li>
    7.             <li style='text-align: right; font: 13px Verdana; color: grey; margin-right: 5px;'><h4>$user_mess[date]</h4></li>
    8.             <form method='POST'><li class='li-like'><img src='";
    9.             $like = $mysqli->query("SELECT `news_id` FROM `like` WHERE `news_id`='$user_mess[id]'");
    10.             if($like->num_rows > 0) {
    11.             echo "images/like-active.png";
    12.             }
    13.             else {
    14.                 echo "images/like.png";
    15.             }
    16.             $lk = $mysqli->query("SELECT `like`, `dislike` FROM `news` WHERE id='$user_mess[id]'");
    17.             $num_likes = $lk->fetch_assoc();
    18.             echo "' class='like-dislike' id='ilike'><span class='like-span'>$num_likes[like]</span></li>
    19.             <li class='li-like'><img src='";
    20.             $disl = $mysqli->query("SELECT `news_id` FROM `dislike` WHERE `news_id`='$user_mess[id]'");
    21.             if($disl->num_rows > 0) {
    22.             echo "images/dislike-active.png";
    23.             }
    24.             else {
    25.                 echo "images/dislike.png";
    26.             }
    27.             echo "' id='idislike' class='like-dislike'><span class='dislike-span'>$num_likes[dislike]</span></li></form>
    28.             
    29.             </ul>";
    30.         }
    31.         while($user_mess = $mess->fetch_assoc());
    32.         } 
    33.         else {
    34.             echo "<p>Пользователь не добавлял записей на стену</p>";
    35.         }
    36.         echo '
    37.         </div>
    38.         </div>
    39.         </div>
    40.         ';
    41.  
    42.     }
    43. $_SESSION['user_pass'] = $_GET['option'];
    44. ?>
    45. <script type="text/javascript">
    46.             function likePlus() {
    47.         $.ajax({
    48.         url: "functions/like_update.php",
    49.         type: "POST", 
    50.         data: ({id: id}), 
    51.         dataType: "html", 
    52.         cache: false,
    53.         success: function(data) {
    54.                 $(".like-span").html(data);
    55.             }
    56.         });
    57.     }
    58.     function dislikePlus() {
    59.             var id = $(this).parents("#news_id").val();
    60.         $.ajax({
    61.         url: "functions/dislike_update.php",
    62.         type: "POST", 
    63.         data: ({id: id}), 
    64.         dataType: "html", 
    65.         cache: false,
    66.         success: function(data) {
    67.                 $(".dislike-span").html(data);
    68.             }
    69.         });
    70.         }
    71.         $("#ilike").click(function() {
    72.         var id = $(this).parents("#news_id").val();
    73.         alert(id);
    74.         $.ajax ({ 
    75.             url: "functions/like.php", 
    76.             type: "POST", 
    77.             dataType: "html", 
    78.             data: ({like: 1, id: id}), 
    79.             success: function(data) {
    80.                 if(data == "false") {
    81.                     alert("Вы уже оценили эту запись");
    82.                 }
    83.                 if(data == "true") {
    84.                     $("#ilike").attr("src", "images/like-active.png");
    85.                     likePlus();
    86.                 }
    87.                 if(data == "like") {
    88.                     dislikePlus();
    89.                     likePlus();
    90.                     $("#idislike").attr("src", "images/dislike.png");
    91.                     $("#ilike").attr("src", "images/like-active.png");
    92.                 }
    93.                 
    94.             }
    95.         });
    96.     });
    97.         $("#idislike").click(function() {
    98.         var id = $(this).parents("#news_id").val();
    99.         function likePlus() {
    100.         $.ajax({
    101.         url: "functions/like_update.php",
    102.         type: "POST", 
    103.         data: ({id: id}), 
    104.         dataType: "html", 
    105.         cache: false,
    106.         success: function(data) {
    107.                 $(".like-span").html(data);
    108.             }
    109.         });
    110.     }
    111.         function dislikePlus() {
    112.             var id = $(this).parents("#news_id").val();
    113.         $.ajax({
    114.         url: "functions/dislike_update.php",
    115.         type: "POST", 
    116.         data: ({id: id}), 
    117.         dataType: "html", 
    118.         cache: false,
    119.         success: function(data) {
    120.                 $(".dislike-span").html(data);
    121.             }
    122.         });
    123.     }
    124.         $.ajax ({ 
    125.             url: "functions/dislike.php", 
    126.             type: "POST", 
    127.             dataType: "html", 
    128.             data: ({like: 1, id: id}), 
    129.             cache: false,
    130.             success: function(data) {
    131.                 if(data == "false") {
    132.                     alert("Вы уже оценили эту запись");
    133.                 }
    134.                 if(data == "dislike") {
    135.                     dislikePlus();
    136.                     likePlus();
    137.                     $("#ilike").attr("src", "images/like.png");
    138.                     $("#idislike").attr("src", "images/dislike-active.png");
    139.                 }
    140.                 if(data == "true"){
    141.                     $("#idislike").attr("src", "images/dislike-active.png");
    142.                     dislikePlus();
    143.                 }
    144.             }
    145.         });
    146.     });
    147. </script>
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  18. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Код (PHP):
    1. <?php
    2.     while($user_mess = $mess->fetch_assoc()){
    3.         print "<ul class='us_mes'> 
    4.         <li style='float: left;'><a href='index.php?option=".$_GET['option']."'><img src='".$us_ava['avatar']."' class='us_mess_avatar'></a> </li>
    5.         <li class='news' data-id='".$user_mess['id']."'></li>
    6.         <li><h4>".$user_mess['title']."</h4></li>
    7.         <li><h4>".$user_mess['text']."</h4></li>
    8.         <li style='text-align: right; font: 13px Verdana; color: grey; margin-right: 5px;'><h4>".$user_mess['date']."</h4></li>
    9.         <form method='POST'><li class='li-like'><img src='";
    10.         $like = $mysqli->query("SELECT `news_id` FROM `like` WHERE `news_id`=".$user_mess['id']);
    11.         if($like->num_rows > 0) {
    12.             print "images/like-active.png";
    13.         }else{
    14.             print "images/like.png";
    15.         }
    16.         $lk = $mysqli->query("SELECT `like`, `dislike` FROM `news` WHERE id=".$user_mess['id']);
    17.         $num_likes = $lk->fetch_assoc();
    18.         print "' class='like-dislike' id='ilike'><span class='like-span'>".$num_likes['like']."</span></li>
    19.         <li class='li-like'><img src='";
    20.         $disl = $mysqli->query("SELECT `news_id` FROM `dislike` WHERE `news_id`=".$user_mess['id']);
    21.         if($disl->num_rows > 0) {
    22.             print "images/dislike-active.png";
    23.         }
    24.         else {
    25.            print "images/dislike.png";
    26.         }
    27.         print "' id='idislike' class='like-dislike'><span class='dislike-span'>".$num_likes['dislike']."</span></li></form>
    28.          
    29.         </ul>";    
    30.     }
    31.  
    32. $_SESSION['user_pass'] = $_GET['option'];
    33. ?>
    34. <script type="text/javascript">
    35.     function likePlus() {
    36.       $.ajax({
    37.       url: "functions/like_update.php",
    38.       type: "POST", 
    39.       data: ({id: id}), 
    40.       dataType: "html", 
    41.       cache: false,
    42.       success: function(data) {
    43.             $(".like-span").html(data);
    44.          }
    45.       });
    46.    }
    47.    function dislikePlus() {
    48.       var id = $(this).parents(".us_mes").find(".news").data("id");
    49.       $.ajax({
    50.       url: "functions/dislike_update.php",
    51.       type: "POST", 
    52.       data: ({id: id}), 
    53.       dataType: "html", 
    54.       cache: false,
    55.       success: function(data) {
    56.             $(".dislike-span").html(data);
    57.          }
    58.       });
    59.       }
    60.       $("#ilike").click(function() {
    61.       var id = $(this).parents(".news").data("id");
    62.       alert(id);
    63.       $.ajax ({ 
    64.          url: "functions/like.php", 
    65.          type: "POST", 
    66.          dataType: "html", 
    67.          data: ({like: 1, id: id}), 
    68.          success: function(data) {
    69.             if(data == "false") {
    70.                alert("Вы уже оценили эту запись");
    71.             }
    72.             if(data == "true") {
    73.                $("#ilike").attr("src", "images/like-active.png");
    74.                likePlus();
    75.             }
    76.             if(data == "like") {
    77.                dislikePlus();
    78.                likePlus();
    79.                $("#idislike").attr("src", "images/dislike.png");
    80.                $("#ilike").attr("src", "images/like-active.png");
    81.             }
    82.             
    83.          }
    84.       });
    85.    });
    86.       $("#idislike").click(function() {
    87.       var id = $(this).parents(".us_mes").find(".news").data("id");
    88.       function likePlus() {
    89.       $.ajax({
    90.       url: "functions/like_update.php",
    91.       type: "POST", 
    92.       data: ({id: id}), 
    93.       dataType: "html", 
    94.       cache: false,
    95.       success: function(data) {
    96.             $(".like-span").html(data);
    97.          }
    98.       });
    99.    }
    100.       function dislikePlus() {
    101.          var id = $(this).parents("#news_id").val(); // а здесь $this недоступен, проксируй объект в функцию, чтобы зацепится за news_id
    102.       $.ajax({
    103.       url: "functions/dislike_update.php",
    104.       type: "POST", 
    105.       data: ({id: id}), 
    106.       dataType: "html", 
    107.       cache: false,
    108.       success: function(data) {
    109.             $(".dislike-span").html(data);
    110.          }
    111.       });
    112.    }
    113.       $.ajax ({ 
    114.          url: "functions/dislike.php", 
    115.          type: "POST", 
    116.          dataType: "html", 
    117.          data: ({like: 1, id: id}), 
    118.          cache: false,
    119.          success: function(data) {
    120.             if(data == "false") {
    121.                alert("Вы уже оценили эту запись");
    122.             }
    123.             if(data == "dislike") {
    124.                dislikePlus();
    125.                likePlus();
    126.                $("#ilike").attr("src", "images/like.png");
    127.                $("#idislike").attr("src", "images/dislike-active.png");
    128.             }
    129.             if(data == "true"){
    130.                $("#idislike").attr("src", "images/dislike-active.png");
    131.                dislikePlus();
    132.             }
    133.          }
    134.       });
    135.    });
    136. </script>
    Посмотри за изменениями и старайся писать хотябы так.
     
  19. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    Все тоже самое undefined
     
  20. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Код (PHP):
    1. <script type="text/javascript">
    2.  
    3.     $("#idislike").click(function() {
    4.         var id = $(this).parents(".us_mes").find(".news").data("id");
    5.         $.ajax({
    6.             url: "functions/like_update.php",
    7.             type: "POST", 
    8.             data: ({id: id}), 
    9.             dataType: "html", 
    10.             cache: false,
    11.             success: function(data) {
    12.                 $(".like-span").html(data);
    13.             }
    14.         });
    15.       }
    16.    
    17. </script>
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  21. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
  22. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    У тебя сайт поднят ? Или на локалхосте гоняешь ?
     
  23. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    на локальном сервере
     
  24. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Я тебе в личкау написал.
     
  25. Andrew1443

    Andrew1443 Новичок

    С нами с:
    13 дек 2015
    Сообщения:
    23
    Симпатии:
    0
    Проблема осталась. Есть еще варианты?