Хочу создать лайки на сайте. Проблем с созданием php и javascript оформления нет вообще. Все работает отлично. Но проблема в том, что статьи, которые нужно оценивать выводятся на одной странице и при клике на иконку, лайк засчитывается всем постам сразу. Помогите решить проблему. Нужно чтобы все работало на 1 странице
Ну так сделай лайк - кнопкой сабмита для скрытой формы, в которой лежит идентификатор нужного поста. И, по факту прибытия этого лайка на сервер, смотри, что за айдишник в нем лежит.
У меня в цикле do{ } while() находятся все посты и каждый пост имеет свой уникальный id, но проблема скорее всего в том, что в javascript я обращаюсь к id элементов, которые находятся в цикле и получается, что он берет значение только лишь одного поля и присваивает его всем
Шта, дувайл, зачем ? У тебя есть событие, onclick и всевозможные способы присвоения данных элементу-инициатору. Какие циклы ?
Так, циклом ты по-любому все записи выводишь, вопрос в том, как ты взаимодействуешь с построенными элементами. Код javascript в студию
Ну так при генерации постов, генерируй форму Like, где есть скрытое поле с ID поста и есть кнопка сабмит, стилизованная под картинку с пальцем вверх. Всеу. JS не нужен. Разве что для того, чтобы эту форму на сервер аяксом прокинуть. Приходит на сервер запрос, глядишь - ага, ID такой-то лайкнули. Окей. Повысим ему рейтинг. Эй, база данных, повысь рейтинг посту с таким-то ID!
Я так и делаю. Код (PHP): do { echo "<ul class='us_mes'> <li style='float: left;'><a href='index.php?option=$_GET[option]'><img src='$us_ava[avatar]' class='us_mess_avatar'></a> </li> <li id='news_id' value='$user_mess[id]'></li> <li><h4>$user_mess[title]</h4></li> <li><h4>$user_mess[text]</h4></li> <li style='text-align: right; font: 13px Verdana; color: grey; margin-right: 5px;'><h4>$user_mess[date]</h4></li> <li class='li-like'><img src='"; $like = $mysqli->query("SELECT `news_id` FROM `like` WHERE `news_id`='$user_mess[id]'"); if($like->num_rows > 0) { echo "images/like-active.png"; } else { echo "images/like.png"; } $lk = $mysqli->query("SELECT `like`, `dislike` FROM `news` WHERE id='$user_mess[id]'"); $num_likes = $lk->fetch_assoc(); echo "' class='like-dislike' id='ilike'><span class='like-span'>$num_likes[like]</span></li> <li class='li-like'><img src='"; $disl = $mysqli->query("SELECT `news_id` FROM `dislike` WHERE `news_id`='$user_mess[id]'"); if($disl->num_rows > 0) { echo "images/dislike-active.png"; } else { echo "images/dislike.png"; } echo "' id='idislike' class='like-dislike'><span class='dislike-span'>$num_likes[dislike]</span></li> </ul>"; echo '<script type="text/javascript"> $("#ilike").click(function() { var id = document.getElementById("news_id").value; function likePlus() { $.ajax({ url: "functions/like_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".like-span").html(data); } }); } function dislikePlus() { $.ajax({ url: "functions/dislike_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".dislike-span").html(data); } }); } $.ajax ({ url: "functions/like.php", type: "POST", dataType: "html", data: ({like: 1, id: id}), success: function(data) { if(data == "false") { alert("Вы уже оценили эту запись"); } if(data == "true") { $("#ilike").attr("src", "images/like-active.png"); likePlus(); } if(data == "like") { dislikePlus(); likePlus(); $("#idislike").attr("src", "images/dislike.png"); $("#ilike").attr("src", "images/like-active.png"); } } }); }); $("#idislike").click(function() { var id = document.getElementById("news_id").value; function likePlus() { $.ajax({ url: "functions/like_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".like-span").html(data); } }); } function dislikePlus() { $.ajax({ url: "functions/dislike_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".dislike-span").html(data); } }); } $.ajax ({ url: "functions/dislike.php", type: "POST", dataType: "html", data: ({like: 1, id: id}), cache: false, success: function(data) { if(data == "false") { alert("Вы уже оценили эту запись"); } if(data == "dislike") { dislikePlus(); likePlus(); $("#ilike").attr("src", "images/like.png"); $("#idislike").attr("src", "images/dislike-active.png"); } if(data == "true"){ $("#idislike").attr("src", "images/dislike-active.png"); dislikePlus(); } } }); }); </script>'; } while($user_mess = $mess->fetch_assoc());
АААААААААААААААААААААААААААААААААА......... Посоны, у вас тут весело. Чувак, зачем ты в цикле дублируешь код javascript ?
do...while array[index] вместо array['index'] бездумное использование сниппетов Это Ruseller, у которого вы купили курс по PHP. Совершенно точно. Это его стиль. Либо вас учил один из его адептов, пришедших к успеху...
Так, ну по-существу, у тебя javascript код выводится ровно так же как и вся остальная верстка, каждый раз за итерацию цикла, у тебя дувайл и ду выполнится хотябы раз, не смотря на отсуствие или полноту ответа из мускуля (если мне память не изменяет), в джаваскрипте ты берёшь за значение Код (PHP): var id = document.getElementById("news_id").value; Но у тебя в цикле же порождаются кучи таких Код (PHP): <li id='news_id' value='$user_mess[id]'></li> И раз ты используешь jQuery, то зачем пишешь document.getElementById ? У тебя событие на кнопке, так ? Ну и ищи от кнопки нужный элемент Код (PHP): $("#ilike").click(function() { var id = $(this).parents("#news_id").val(); PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Спасибо, попробую Добавлено спустя 19 минут 32 секунды: Нет, с помощью вашего метода у меня неопределенный id(undefined)
Код (PHP): do { echo "<ul class='us_mes'> <li style='float: left;'><a href='index.php?option=$_GET[option]'><img src='$us_ava[avatar]' class='us_mess_avatar'></a> </li> <li id='news_id' value='$user_mess[id]'></li> <li><h4>$user_mess[title]</h4></li> <li><h4>$user_mess[text]</h4></li> <li style='text-align: right; font: 13px Verdana; color: grey; margin-right: 5px;'><h4>$user_mess[date]</h4></li> <form method='POST'><li class='li-like'><img src='"; $like = $mysqli->query("SELECT `news_id` FROM `like` WHERE `news_id`='$user_mess[id]'"); if($like->num_rows > 0) { echo "images/like-active.png"; } else { echo "images/like.png"; } $lk = $mysqli->query("SELECT `like`, `dislike` FROM `news` WHERE id='$user_mess[id]'"); $num_likes = $lk->fetch_assoc(); echo "' class='like-dislike' id='ilike'><span class='like-span'>$num_likes[like]</span></li> <li class='li-like'><img src='"; $disl = $mysqli->query("SELECT `news_id` FROM `dislike` WHERE `news_id`='$user_mess[id]'"); if($disl->num_rows > 0) { echo "images/dislike-active.png"; } else { echo "images/dislike.png"; } echo "' id='idislike' class='like-dislike'><span class='dislike-span'>$num_likes[dislike]</span></li></form> </ul>"; } while($user_mess = $mess->fetch_assoc()); } else { echo "<p>Пользователь не добавлял записей на стену</p>"; } echo ' </div> </div> </div> '; } $_SESSION['user_pass'] = $_GET['option']; ?> <script type="text/javascript"> function likePlus() { $.ajax({ url: "functions/like_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".like-span").html(data); } }); } function dislikePlus() { var id = $(this).parents("#news_id").val(); $.ajax({ url: "functions/dislike_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".dislike-span").html(data); } }); } $("#ilike").click(function() { var id = $(this).parents("#news_id").val(); alert(id); $.ajax ({ url: "functions/like.php", type: "POST", dataType: "html", data: ({like: 1, id: id}), success: function(data) { if(data == "false") { alert("Вы уже оценили эту запись"); } if(data == "true") { $("#ilike").attr("src", "images/like-active.png"); likePlus(); } if(data == "like") { dislikePlus(); likePlus(); $("#idislike").attr("src", "images/dislike.png"); $("#ilike").attr("src", "images/like-active.png"); } } }); }); $("#idislike").click(function() { var id = $(this).parents("#news_id").val(); function likePlus() { $.ajax({ url: "functions/like_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".like-span").html(data); } }); } function dislikePlus() { var id = $(this).parents("#news_id").val(); $.ajax({ url: "functions/dislike_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".dislike-span").html(data); } }); } $.ajax ({ url: "functions/dislike.php", type: "POST", dataType: "html", data: ({like: 1, id: id}), cache: false, success: function(data) { if(data == "false") { alert("Вы уже оценили эту запись"); } if(data == "dislike") { dislikePlus(); likePlus(); $("#ilike").attr("src", "images/like.png"); $("#idislike").attr("src", "images/dislike-active.png"); } if(data == "true"){ $("#idislike").attr("src", "images/dislike-active.png"); dislikePlus(); } } }); }); </script> PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Код (PHP): <?php while($user_mess = $mess->fetch_assoc()){ print "<ul class='us_mes'> <li style='float: left;'><a href='index.php?option=".$_GET['option']."'><img src='".$us_ava['avatar']."' class='us_mess_avatar'></a> </li> <li class='news' data-id='".$user_mess['id']."'></li> <li><h4>".$user_mess['title']."</h4></li> <li><h4>".$user_mess['text']."</h4></li> <li style='text-align: right; font: 13px Verdana; color: grey; margin-right: 5px;'><h4>".$user_mess['date']."</h4></li> <form method='POST'><li class='li-like'><img src='"; $like = $mysqli->query("SELECT `news_id` FROM `like` WHERE `news_id`=".$user_mess['id']); if($like->num_rows > 0) { print "images/like-active.png"; }else{ print "images/like.png"; } $lk = $mysqli->query("SELECT `like`, `dislike` FROM `news` WHERE id=".$user_mess['id']); $num_likes = $lk->fetch_assoc(); print "' class='like-dislike' id='ilike'><span class='like-span'>".$num_likes['like']."</span></li> <li class='li-like'><img src='"; $disl = $mysqli->query("SELECT `news_id` FROM `dislike` WHERE `news_id`=".$user_mess['id']); if($disl->num_rows > 0) { print "images/dislike-active.png"; } else { print "images/dislike.png"; } print "' id='idislike' class='like-dislike'><span class='dislike-span'>".$num_likes['dislike']."</span></li></form> </ul>"; } $_SESSION['user_pass'] = $_GET['option']; ?> <script type="text/javascript"> function likePlus() { $.ajax({ url: "functions/like_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".like-span").html(data); } }); } function dislikePlus() { var id = $(this).parents(".us_mes").find(".news").data("id"); $.ajax({ url: "functions/dislike_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".dislike-span").html(data); } }); } $("#ilike").click(function() { var id = $(this).parents(".news").data("id"); alert(id); $.ajax ({ url: "functions/like.php", type: "POST", dataType: "html", data: ({like: 1, id: id}), success: function(data) { if(data == "false") { alert("Вы уже оценили эту запись"); } if(data == "true") { $("#ilike").attr("src", "images/like-active.png"); likePlus(); } if(data == "like") { dislikePlus(); likePlus(); $("#idislike").attr("src", "images/dislike.png"); $("#ilike").attr("src", "images/like-active.png"); } } }); }); $("#idislike").click(function() { var id = $(this).parents(".us_mes").find(".news").data("id"); function likePlus() { $.ajax({ url: "functions/like_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".like-span").html(data); } }); } function dislikePlus() { var id = $(this).parents("#news_id").val(); // а здесь $this недоступен, проксируй объект в функцию, чтобы зацепится за news_id $.ajax({ url: "functions/dislike_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".dislike-span").html(data); } }); } $.ajax ({ url: "functions/dislike.php", type: "POST", dataType: "html", data: ({like: 1, id: id}), cache: false, success: function(data) { if(data == "false") { alert("Вы уже оценили эту запись"); } if(data == "dislike") { dislikePlus(); likePlus(); $("#ilike").attr("src", "images/like.png"); $("#idislike").attr("src", "images/dislike-active.png"); } if(data == "true"){ $("#idislike").attr("src", "images/dislike-active.png"); dislikePlus(); } } }); }); </script> Посмотри за изменениями и старайся писать хотябы так.
Код (PHP): <script type="text/javascript"> $("#idislike").click(function() { var id = $(this).parents(".us_mes").find(".news").data("id"); $.ajax({ url: "functions/like_update.php", type: "POST", data: ({id: id}), dataType: "html", cache: false, success: function(data) { $(".like-span").html(data); } }); } </script> PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]