Ajax вывод комментариев
Столкнулся с проблемой вывода комментов в конкретной статье. Для вывода воспользовался вызовом функции Ajax с определенным интервалом. Но комментарии не выводятся. Есть интересное условие, что при обычном запросе :
SELECT * FROM `comment` ORDER BY `id` DESC
они отрабатывают вполне себе нормально, но игнорируют к какой статье привязаны. А если выборка с уточнением, где они должны находиться :
SELECT * FROM `comment` WHERE `post_id` = :id ORDER BY `id`DESC
ничего не выводит. Не могу решить эту проблему. Прошу помощи. Если какие-то есть недочеты, готов учиться.
форма secondBooks.php
<div id="allMessages" class="allMessages">
<?php
//вывод комментариев
$sql = 'SELECT * FROM `comment` WHERE `post_id` = :id ORDER BY `id`DESC';
$query = $connect->prepare($sql);
$query->execute([$id]);
$comments = $query->fetchAll(PDO::FETCH_ASSOC);
$str = '';
foreach ($comments as $key) {
$str .= "<div class='alert text-dark alert-secondary mb-2'>
<h4>$key->name</h4>
<p>$key->mess</p>
</div>";
}
echo $str;
?>
</div>
<form name="Formcom" id="Formcom" action="" method='post'>
<input name="id" id="id" value="<?=$id?>" type="hidden">
<div class="alert alert-danger mt-2" id="block"></div>
<label for="floatingInput">Ваше имя</label>
<input type="text" name="username" id = "username" class="form-control">
<label for="floatingInput">Сообщение</label>
<textarea name="message"id = "message" class="form-control"></textarea>
<button class="btn btn-lg btn-primary col-md-2 mt-4 " id="but_comment" type="button">Отправить</button>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$('#but_comment').click(function () {
var username = $ ('#username').val();
var message = $ ('#message').val();
var id = $ ('#id').val();
$.ajax({
url:'../controllers/comments.php',
type : 'POST',
cahe : false ,
data : {'username' : username,'message' : message,'id' : id,},
dataType : 'html',
success: function (data) {
if (data=='Готово'){
$('.results').html(data);
$('#block').hide();
alert('Комментарий отправлен!');
document.Formcom.reset();
}
else{
$('#block').show();
$('#block').text(data);
}
}
});
});
;
setInterval(function() {
$.ajax({
url: '../controllers/outComm.php',
type: 'POST',
cache: false,
dataType: 'html',
success: function(data) {
$(".allMessages").html(data);
}
});
}, 3000);
</script>
outComm.php
$sql = 'SELECT * FROM `comment` WHERE `post_id` = :id ORDER BY `id`DESC';
$query = $connect->prepare($sql);
$query->execute([$id]);
$comments = $query->fetchAll(PDO::FETCH_OBJ);
$str = '';
foreach ($comments as $key) {
$str .= "<div class='alert text-dark alert-secondary mb-2'>
<h4>$key->name</h4>
<p>$key->mess</p>
</div>";
}
echo $str;
Ответы (1 шт):
Автор решения: Aleksey Vaganov
→ Ссылка
В Ajax запросе к контроллеру controllers/outComm.php передавайте id поста:
...
data: {id: id}
...
а в контроллере перед строкой $query->execute([$id]); принимайте его:
$id = $_POST['id'];