Я создаю базовую систему комментирования для веб-сайта: комментарии могут быть сделаны, и пользователи могут отвечать на каждый комментарий.Я использую Ajax для отправки и получения / отображения комментариев и ответов.Я успешно закодировал часть комментариев, но мне нужна помощь в части ответов.
Каждый комментарий, хранящийся в базе данных, имеет уникальный идентификатор (comment_id), связанный с ним.И я использую этот идентификатор, чтобы связать ответы на каждый соответствующий комментарий.
Форма для комментариев, которая находится в index.php :
<div id="showComments"></div> <!--div where comments are inserted by AJAX-->
<div style="text-align:center;">
<form action="" method="post" id="commentForm">
<textarea name="comment" id="comment" rows="1"></textarea><BR>
<button type="submit" name="new_comment" onClick="submitComment()">Comment</button>
</form>
<div id="message"></div> <!--div where a status (comment submitted successfully or failed) is inserted by AJAX-->
</div>
JavaScript для отправки комментария и отображения комментариев, также в index.php .
<script>
$(document).ready(function() {
showComments();
});
function submitComment(){
var commentText = document.getElementById('comment').value;
var commentString = 'comment=' + commentText;
event.preventDefault();
$.ajax({
url: "insert_com.php",
method: "POST",
data: commentString,
dataType: "JSON",
success: function(response) {
if (!response.error) {
$("#commentForm")[0].reset();
$("#message").html(response.message);
showComments();
} else if (response.error) {
$("#message").html(response.message);
}
}
});
}
function showComments() {
$.ajax({
url: "get_com.php",
method: "POST",
success: function(response) {
$("#showComments").html(response);
}
});
}
</script>
Файл insert_com.php , который отправляет комментарий в базу данных, куда AJAX отправляет сообщения в функции submitComment()
:
<?php
if(!empty($_POST["comment"])){
$new_com_date = date('Y-m-d H:i:s');
$insertComment = "INSERT INTO comments (text, date) VALUES ('".$_POST["comment"]."', '".$new_com_date."')";
mysqli_query($connect, $insertComment) or die("database error: ". mysqli_error($connect));
$message = '<label>Comment posted Successfully.</label>';
$status = array(
'error' => 0,
'message' => $message
);
} else {
$message = '<label>Error: Comment not posted.</label>';
$status = array(
'error' => 1,
'message' => $message
);
}
echo json_encode($status);
?>
И файл get_com.php , который извлекает и отображает комментарии , но также извлекает ответы и содержит форму для отправки ответов
<?php
require 'php/connect.php';
$comment = mysqli_query($connect, "SELECT * FROM `comments` ORDER BY `date` DESC");
$string ="";
foreach($comment as $item) {
$date = new dateTime($item['date']);
$date = date_format($date, 'M j, Y | H:i:s');
$comment = $item['text'];
$comment_id = $item['id'];
$string .= '<div style="text-align:center;">'
.'<div id="'.$comment_id.'" style="text-align:center;">'
.'<span><b>'.$comment.'</b></span> '
.'<span><b>'.$date.'</b></span> '
.'<span><b>'.$comment_id.'</b></span>'
.'</div>';
$reply = mysqli_query($connect, "SELECT * FROM `replies` WHERE `comment_id`='$comment_id' ORDER BY `date` DESC");
foreach($reply as $com) {
$reply_date = new dateTime($com['date']);
$reply_date = date_format($reply_date, 'M j, Y | H:i:s');
$reply_com = $com['text'];
$com_id = $com['comment_id'];
$string.= '<div>'
.'<span>'.$reply_com.'</span> '
.'<span class="time">'.$reply_date.'</span> '
.'<span><b>'.$com_id.'</b></span>'
.'</div>';
}
$string .=
'<div>'
.'<form action="" method="post" id="replyForm">'
.'<textarea name="new-reply" id="new-reply" rows="1"></textarea>'
.'<input type="hidden" id="com_id" name="com_id" value="'.$comment_id.'"/>'
.'<button type="submit" id="form-reply" name="new_reply" onClick="submitReply()">Reply</button> '
.'<span><b>'.$comment_id.'</b></span>'
.'</form>'
.'<span id="replymessage"></span>'
.'</div>'
.'</div>'
.'<hr style="width:300px;">';
}
echo $string;
?>
Теперь вот в чем проблема. Я хочу использовать AJAX для отправки ответа на конкретный комментарий с идентификатором $comment_id
.Я хочу получить этот идентификатор из скрытого ввода, содержащегося в форме ответа (форма с идентификатором replyForm
.
. Я написал следующий код JavaScript для получения идентификатора, принадлежащего определенному комментарию:
<script>
function submitReply(){
var replyText = document.getElementById('new-reply').value; console.log(replyText);
var commId = document.getElementById('com_id').value; console.log(commId);
event.preventDefault();
...
</script>
Как вы можете видеть, я записываю текст формы (ответ) и идентификатор комментария в консоль, чтобы увидеть, собираю ли я правильные данные, но он всегда возвращает идентификатор последнего отправленного комментария (т.е.Форма ответа работает для последнего комментария. JavaScript регистрирует правильный текст и идентификатор комментария для ответа на последний комментарий, но для всех остальных ответов он возвращает текст ответа на последний комментарий и идентификатор последнего комментария.
Я знаю, что это довольно много кода, поэтому, если кто-нибудь еще сможет мне помочь, это, безусловно, будет оценено.