Комментирование системы на сообщениях с использованием ajax и php

Это мой код, в котором я передаю comment и идентификатор сообщения (скрытый тег ввода) в другой файл php comments.php который должен вставлять его в db и показывать результат, но его не происходит.

Это моя форма – часть кода, цитируемого в echo … У меня есть auto increment pid связанный с каждым сообщением, поэтому для каждого комментария, comment и pid хранятся в базе данных:

 <form method=\"POST\" onSubmit=\"comment(); return false;\"> <input id=\"comment\" type=\"text\" placeholder=\"Add Comment...\" name=\"comment\"> <input type=\"hidden\" name=\"pid\" value=\"".$row['pid']."\"> <div class=\"z\"><input type=\"submit\" name=\"submit\" ></div> </form> 

JavaScript – функция comment() вызывается для формы комментария каждого сообщения, используя onsubmit .

 function comment() { jQuery.ajax({ url: "comments.php", data: $('form').serialize(), type: "POST", success:function(data){ $("#".$row['pid']).html(data); }, error:function (){ } }); } 

Это код comments.php :

 <?php session_start(); include 'db.php'; $j =$_POST['comment']; $k = $_POST['pid']; $l =$_SESSION['uname']; $sql = "INSERT INTO comments (pid,name,comment) values ('$k','$l','$j')"; $r = $conn->prepare($sql); $r->execute(); if($r) { echo '<div class="comment"> <a class="avatar"> <img style="height:30px;"src="zmf.jpg"> </a> <div class="content"> <a class="author">'.$l.'</a> <div class="metadata"> <span class="date">Today at 5:42PM</span> </div> <div class="text">'; echo $j.'</div> <div class="actions"> </div> </div> </div> '; } ?> 

Возвращение comments.php должно быть показано в div в index.php имеющем id = #postid который уже назначен в этом index.php для каждого сообщения:

 <div id=\"".$row['pid']."\"> </div> 

index.php имеет такой div для каждого сообщения, поэтому пост, на котором делается комментарий, будет показан комментарий в том, что div помещается под каждым сообщением. Любая помощь будет оценена по достоинству.

Я запускаю два цикла while, чтобы показать все комментарии previuos для каждого сообщения, как это. первый цикл показывает сообщение и вложенный цикл while с каждым сообщением, который показывает комментарий к каждому сообщению .. и форму комментария для каждого сообщения в цикле while, а div имеет id = postid, чтобы показать результат ajax.

  $q = $conn->prepare("SELECT * FROM posts ORDER BY pid DESC"); $q->execute(); while($row = $q->fetch(PDO::FETCH_ASSOC)) { #my post in div #comment form <form method=\"POST\" onsubmit=\"comment()\"> <input id=\"comment\" type=\"text\" placeholder=\"Add Comment...\" name=\"comment\"> <input type=\"hidden\" name=\"pid\" value=\"".$row['pid']."\"> <div class=\"z\"><input type=\"submit\" name=\"submit\" ></div> </form> #div where recent comment is shown using ajax <div id=\"".$row['pid']."\"> </div> #nested while loop for comments $zmf = "SELECT * FROM comments WHERE pid = '" . $row['pid'] . "' ORDER BY comid DESC"; $zed = $conn->prepare($zmf); $zed->execute(); $run = $zed->fetch(); while($run = $zed->fetch()) { my div code and all..for comments } } 

каждый пост имеет id pid .. но его nt working ..plz help

У вас есть несколько элементов <form> на странице? Если это так, попробуйте изменить $('form').serialize() на $(this).serialize() .

Можете ли вы предоставить немного больше информации о том, какой результат вы получаете? Вы видите какую-либо запись в базе данных? Каков результат, который вы видите в div после запроса ajax?

Вы используете PDO? Добавьте условие else к вашей проверке if($r) и добавьте print_r($r->errorInfo()) . Попробуйте включить панель инструментов разработчика в Chrome / Firebug в Firefox и проверить результат запроса ajax (XHR). Если запрос sql не работает, он может вызвать PDOException . Убедитесь, что запрос XHR возвращает 200 OK http status.

Попробуйте следующий код и опубликуйте вывод

 <?php session_start(); include 'db.php'; $j = $_POST['comment']; $k = $_POST['pid']; $l = $_SESSION['uname']; $sql = "INSERT INTO comments (pid,name,comment) values ('$k','$l','$j')"; print_r($_POST); try { $r = $conn->prepare($sql); $r->execute(); if ($r) { echo '<div class="comment"> <a class="avatar"> <img style="height:30px;"src="zmf.jpg"> </a> <div class="content"> <a class="author">' . $l . '</a> <div class="metadata"> <span class="date">Today at 5:42PM</span> </div> <div class="text">' . $j . '</div> <div class="actions"> </div> </div> </div> '; } else { print_r($r->errorInfo()); } } catch (\Exception $e) { print_r($e); }