ВЫБОР после ВСТАВКИ с помощью AJAX

#php #jquery #mysql #ajax #select

#php #jquery #mysql #ajax #выберите

Вопрос:

Я создаю систему комментариев, и у меня есть только настройка, кроме одной вещи. Прямо сейчас я INSERT создаю комментарий с помощью AJAX / PHP и выбираю его на странице комментариев во время загрузки страницы. Пункт, который я не могу понять, заключается в том, как SELECT добавлять комментарии после I INSERT них, чтобы сообщение отображалось без загрузки страницы.

У меня уже есть запрос select (на странице комментариев), могу ли я просто добавить его в php-файл и попросить php отправить данные обратно или что мне делать?

Я включаю весь свой код, чтобы показать систему, которая у меня есть сейчас. В идеале я хотел бы сохранить все в этих файлах и эффективно использовать любой код, который у меня есть.

Как я могу это сделать?

Форма и SELECT запрос на странице комментариев:

 <form action="" method="POST" id="comment-form">
            <label for="comment">Comment</label>
            <textarea cols="15" id="home_comment" name="comment" placeholder="Message" rows="5" maxlength="1000" required></textarea><br>
            <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
            <input id="comment-button" name="submit" type="submit" value="Post">
        </form>
<?php
$select_comments_sql = "
    SELECT * 
    FROM home_comments
    ORDER BY id DESC
";
  if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
        //$select_comments_stmt->bind_param("s", $user_id);
        $select_comments_stmt->execute();
        if (!$select_comments_stmt->errno) {
            //echo "error";
        }
        $select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date);

        $comment_array = array();
        while ($select_comments_stmt->fetch()) {
            $comment_array[] = $comment_user_id;
            $comment_array[] = $comment_username;
            $comment_array[] = $home_comments;
            $comment_array[] = $comment_date;
            if ($home_comments === NULL) {
                echo 'No comments found.';
            } else {
                echo $comment_username. "<br>";
                echo $home_comments. "<br><br><br>";
            }
        }   
  }
  

AJAX для INSERT

 $("#comment-form").on("submit", function (event) {
        event.preventDefault();

        var home_comment = $("#home_comment").val();

        $.ajax({ 
            url: "ajax-php/comment-send.php", 
            type: "POST",
            data: {
                "home_comment": home_comment
            },
            success: function (data) {
            //  console.log(data); // data object will return the response when status code is 200
                if (data == "Error!") {
                    alert("Unable to post comment!");
                    alert(data);
                } else {
                    $("#comment-form")[0].reset();
                    //$('.newsletter-popup').fadeIn(350).delay(2000).fadeOut();
                }
            },
            error: function (xhr, textStatus, errorThrown) {
                alert(textStatus   " | "   errorThrown);
                console.log("error"); //otherwise error if status code is other than 200.
            }
        });
    });
  

PHP-файл для INSERT

 $user = new User();

$home_comment = $_POST['home_comment'];
$username = $user->data()->username;
$okay = true;

if ( $okay ) { 

    $comment_insert = "
        INSERT INTO home_comments 
        (id, user_id, username, comment, date)
        VALUES(?, ?, ?, ?, NOW())
        ";
    $comment_stmt = $con->prepare($comment_insert);
    $comment_stmt->bind_param('ssss', $id, $user_id, $username, $home_comment);
    $comment_stmt->execute();
    }
  

Комментарии:

1. Все, что вам нужно знать, это успешно ли вставлена строка. Итак, если ваш скрипт insert может подтвердить это, вам не нужно ничего выбирать, поскольку у вас уже есть комментарий, доступный в javascript, home_comment переменная. Так что просто добавьте это к комментариям, которые уже есть.

2. Ну, я только отправляю данные комментария, но мне также нужно будет знать имя пользователя, дату и т.д. Для отображения на странице, но как мне добавить это к тому, что уже есть?

3. Я предположил, что у вас это тоже уже было доступно… Добавить новый комментарий легко с помощью jQuery, используя, например .append() .

4. Я просто не понимаю, как заставить это работать с этим.

Ответ №1:

Пожалуйста, попробуйте, как показано ниже

 <ul id="CommentsList">
        <?php
    $select_comments_sql = "
        SELECT * 
        FROM home_comments
        ORDER BY id DESC
    ";
      if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
            //$select_comments_stmt->bind_param("s", $user_id);
            $select_comments_stmt->execute();
            if (!$select_comments_stmt->errno) {
                //echo "error";
            }
            $select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date);

            $comment_array = array();
            while ($select_comments_stmt->fetch()) {
                $comment_array[] = $comment_user_id;
                $comment_array[] = $comment_username;
                $comment_array[] = $home_comments;
                $comment_array[] = $comment_date;


                echo '<li>';
                    if ($home_comments === NULL) {
                        echo '<p>No comments found.</p>';
                    } else {
                        echo '<p>'.$comment_username.'</p>';
                        echo '<p>'.$home_comments.'<p>';
                    }
                echo '</li>';
            }  }  ?>  </ul>
  

В Ajax :

Пожалуйста, добавьте приведенный ниже код для успешного выполнения

 success: function (data) {
           $('#CommentsList').prepend(data);
    },
  

PHP-файл для ВСТАВКИ :

Пожалуйста, добавьте приведенный ниже код (пожалуйста, исправьте, если есть какие-либо ошибки для извлечения данных) после вставки ($comment_stmt-> execute();)

 //Get the last insert id
    if($last_id = $comment_stmt->lastInsertId()){
        $sql = "SELECT * FROM home_comments where id=".$last_id;
        if ($select_comments_stmt = $con->prepare($sql)) {
            $select_comments_stmt->execute();
             $select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date);
             while ($select_comments_stmt->fetch()) {
              $comment_array[] = $comment_user_id;
                $comment_array[] = $comment_username;
                $comment_array[] = $home_comments;
                $comment_array[] = $comment_date;       
                echo '<li>';
                if ($home_comments === NULL) {
                    echo '<p>No comments found.</p>';
                } else {
                    echo '<p>'.$comment_username.'</p>';
                    echo '<p>'.$home_comments.'<p>';
                }
                echo '</li>';
             }
        }
    }
  

Комментарии:

1. Я создал пример jsfiddle для добавления. пожалуйста, проверьте это один раз jsfiddle.net/35x5r12w

2. Но как мне получить данные обратно из php, чтобы добавить их?

3. Что бы вы ни написали в файле php (comment-send.php ) это будет сохранено как параметр данных функции success .. поэтому я добавил эти данные в «div» ($(‘#CommentsList’).prepend(данные);)

Ответ №2:

На вашей странице формы комментариев: удалите select систему запросов. Вы просто добавляете div лайк <div class="comment-result"></div> . Если запрос Ajax выполнен успешно, то append данные в comment-result div

 <form action="" method="POST" id="comment-form">
    <label for="comment">Comment</label>
    <textarea cols="15" id="home_comment" name="comment" placeholder="Message" rows="5" maxlength="1000" required></textarea><br>
    <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
    <input id="comment-button" name="submit" type="submit" value="Post">
</form>

<div class="comment-result">

</div>
  

PHP-файл для ВСТАВКИ и ВЫБОРА. Я добавил Select запрос после insert комментария.

 <?php
$user = new User();

$home_comment = $_POST['home_comment'];
$username = $user->data()->username;
$okay = true;

if ( $okay ) { 
    $comment_insert = "
    INSERT INTO home_comments 
    (id, user_id, username, comment, date)
    VALUES(?, ?, ?, ?, NOW())
    ";
    $comment_stmt = $con->prepare($comment_insert);
    $comment_stmt->bind_param('ssss', $id, $user_id, $username, $home_comment);
    $comment_stmt->execute();

    //select all comment list
    $select_comments_sql = "SELECT *FROM home_comments ORDER BY id DESC";

    if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
        //$select_comments_stmt->bind_param("s", $user_id);
        $select_comments_stmt->execute();
        if (!$select_comments_stmt->errno) {
            //echo "error";
        }
        $select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date);

        $comment_array = array();
        while ($select_comments_stmt->fetch()) {
            $comment_array[] = $comment_user_id;
            $comment_array[] = $comment_username;
            $comment_array[] = $home_comments;
            $comment_array[] = $comment_date;
            if ($home_comments === NULL) {
                echo 'No comments found.';
            } else {
                echo $comment_username. "<br>";
                echo $home_comments. "<br><br><br>";
            }
        }   
    }
}
?>
  

AJAX для ВСТАВКИ и ВЫБОРА (я добавил новую строку $('.comment-result').prepend(data); )

 success: function (data) {
    if (data == "Error!") {
        alert("Unable to post comment!");
        alert(data);
    } else {
        $("#comment-form")[0].reset();
        $('.comment-result').append(data); //added new line
    }
}
  

Комментарии:

1. Разве удаление запроса select из моего файла комментариев не позволило бы отображать результаты, если кто-то не прокомментировал?