PHP включает / требует блокировки AJAX / JavaScript - PullRequest
0 голосов
/ 18 мая 2019

Я работаю над школьным заданием, где нам в основном приходится воссоздавать 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);
    };
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...