Если вы используете цикл для заполнения идентификатора строки, который выглядит так, как будто вы здесь, это ваши проблемы.
Цикл создает скрытый элемент ввода на каждой итерации цикла, и вы не меняетеидентификатор элемента.Таким образом, у вас будет множество элементов с одинаковым идентификатором.Это создаст вам проблемы несколькими разными способами.
Я изменил ваш PHP-код, чтобы у каждого элемента был свой идентификатор.Я также изменил вашу функцию javascript, чтобы значение id передавалось самой функции.
Посмотрите, поможет ли это:
PHP:
if(isset($_SESSION['user_session'])){
echo '<input type="hidden" id="' . $row['topic_id'] . '" name="upVoteIncrement"
value="' . $row['topic_id'] . '"><a href="#" class="upVoteArrow"
onclick="upVoteIncrementValue(' . $row['topic_id'] . ');">';
}
JS:
function upVoteIncrementValue(postID){
event.preventDefault();
//var upVoteIncrement = $("#upVoteIncrement").val(); //Don't need this anymore.
$.ajax({
type: "POST",
url: "voting.php",
data: {
"upVoteIncrement": postID, //Use the passed value id value in the function.
},
dataType: "html",
cache: false,
success: function(response){
if(response){
var response = $.trim(response);
if(response){
$('#voteCount').html(response);
}
else {
return false;
}
}
}
});
Надеюсь, это поможет!
Я также хочу отметить, что в приведенном ниже коде:
if($upVote->rowCount() > 0){
foreach($upVoteCount as $row){
$up = $row['topic_likes'];
echo $up;
exit();
}
}
Вы выходите из сценария на первой итерациицикл и вы получите только один результат обратно.
Если вам нужно вернуть массив данных, он должен выглядеть следующим образом:
if($upVote->rowCount() > 0){
foreach($upVoteCount as $row){
$up = $row['topic_likes'];
$results[] = $up;
//exit();
}
}
echo json_encode($results);
Затем вам нужно будет установить тип данных вjson вместо html.
Ответ в вашем ajax теперь будет массивом.Чтобы увидеть массив:
success: function(response){
if(response){
console.log(response); //Look in your console to see your data.
var response = $.trim(response);
if(response){
$('#voteCount').html(response);
}
else {
return false;
}
}
}