#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 из моего файла комментариев не позволило бы отображать результаты, если кто-то не прокомментировал?