2016-10-20 4 views
1

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

У меня есть уже сделанный запрос выбора (на странице комментариев), могу ли я просто добавить это в файл 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

Все, что вам нужно знать, если строка успешно вставлен. Поэтому, если ваш скрипт вставки может подтвердить это, вам не нужно выбирать что-либо, поскольку у вас уже есть комментарий, доступный в javascript, переменной 'home_comment'. Поэтому просто добавьте это к комментариям, которые уже есть. – jeroen

+0

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

+1

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

ответ

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>'; 
      } 
     } 
    } 
+0

К сожалению, это не сработало. – Paul

+0

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

+0

Но как я могу получить данные обратно из php, чтобы добавить его? – Paul

0

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

<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 файл для INSERT и SELECT. Я добавил 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 для INSERT и SELECT (я добавил новую линию $('.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 
    } 
} 
+0

Не удалял бы запрос выбора из моего файла комментариев, чтобы не показывать результаты, если кто-то не прокомментировал? – Paul