Я работаю над школьным заданием, где нам в основном приходится воссоздавать Instagram.Сейчас у меня проблемы с добавлением комментариев в базу данных и обновлением интерфейса с помощью AJAX.
Моя работа основана на том, что мы делали в школе, и это прекрасно работает.Но я не вижу, что сейчас не так.
Когда я вынимаю весь сценарий jQuery, PHP без проблем помещает данные в мою базу данных.Я занимаюсь поиском и устранением неисправностей около 2 часов и не могу ничего найти в Интернете, пробовал валидаторы, но все кажется нормальным.
Есть идеи?Заранее спасибо
!!!РЕДАКТИРОВАТЬ: Я только что нашел проблему!Но не знаю, как решить это достаточно печально.Как я прокомментировал в третьем файле (comment.php), include по какой-то причине блокирует код.Когда я опускаю его, AJAX работает нормально, но ничего не попадает в базу данных.Есть идеи?
post.php (страница с изображением и комментариями)
<?php
require_once("bootstrap.php");
Session::check();
require_once("includes/checklogin.inc.php");
$postId = $_GET['id'];
if(!empty($_POST)){
try{
$comment = new Comment();
$newComment = $_POST['NewComment'];
$comment->setPostId($postId);
$comment->setText($newComment);
$comment->save();
}catch(Exception $e) {
//Catch Statement
}
}
?>
<!doctype html>
<html lang="en">
<?php require_once("includes/header.inc.php"); ?>
<body>
<?php require_once("includes/nav.inc.php"); ?>
<div class="container">
<aside>
<article id="commentList"> <!-- COMMENT SECTION -->
<?php foreach($post->getComments() as $c): ?>
<p>
<span <?php if($c['comment_user_id'] == $_SESSION['user']){echo "class=\"yellow\"";}?>>
<?php echo $c['firstname'] . " " . $c['lastname']; ?>
</span>
<?php echo ": " . $c['comment_text']; ?>
</p>
<?php endforeach; ?>
</article>
<form method="post" action=""> <!-- ADD COMMENT -->
<input type="text" id="NewComment" name="NewComment" placeholder="add a comment" required>
<input type="submit" id="submit" value="send">
</form>
</aside>
</div>
</body>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
$(document).ready(function(){
$("#submit").on("click", function(e){
var text = $("#NewComment").val();
$.ajax({
method: "POST",
url: "ajax/comment.php",
data: {text: text},
dataType: "json"
})
.done(function( res ) {
if(res.status == "success") {
<?php foreach($post->getUsername() as $u): ?>
var p =
"<p><span class=\"yellow\"><?php echo $u['firstname'] . ' ' . $u['lastname']; ?></span>: " + text + "</p>";
<?php endforeach; ?>
$("#commentList").append(p);
$("#NewComment").val("").focus();
}
});
e.preventDefault();
});
});
</script>
</html>
comment.class.php (бэкэнд для отправки комментариев в БД, работает нормально)
<?php
class Comment{
private $postId;
private $text;
// POST ID
public function getPostId(){
return $this->postId;
}
public function setPostId($postId){
$this->postId = $postId;
return $this;
}
// COMMENT
public function getText(){
return $this->text;
}
public function setText($text){
$this->text = $text;
return $this;
}
// ADD COMMENT TO DB
public function save(){
$conn = Db::getInstance();
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$statement = $conn->prepare("
INSERT INTO comments (comment_user_id, comment_text, comment_post_id, comment_date)
VALUES (:user_id, :text, :post_id, :date)
");
$statement->bindValue(":post_id", $this->getPostId());
$statement->bindValue(":user_id", $_SESSION['user']);
$statement->bindValue(":text", $this->getText());
$statement->bindValue(":date", strftime("%Y-%m-%d %H:%M:%S"));
$statement->execute();
return true;
}
}
?>
comment.php (файл, на который ссылается AJAX)
<?php
include("../bootstrap.php");
// THIS IS A SPECIAL ONE, WHEN INCLUDED NOTHING HAPPENS ON THE FRONTEND, WHEN REMOVED MY COMMENT GETS ADDED BUT NOT PUSHED INSIDE DATABSE
if(!empty($_POST)){
$text = $_POST['text'];
try{
$comment = new Comment();
$comment->setText($text);
$comment->save();
$result = [
"status" => "success",
"message" => "Comment Saved"
];
}catch(Throwable $t){
$result = [
"status" => "error",
"message" => "Plz try again"
];
}
$result = [
"status" => "success",
"message" => ">Comment has been saved"
];
echo json_encode($result);
};
?>