【问题标题】:Commenting system on posts using ajax and php使用 ajax 和 php 对帖子进行评论系统
【发布时间】:2016-06-22 05:16:42
【问题描述】:

这是我的代码,我将comment 和post id(隐藏输入标签)传递给另一个php 文件comments.php,该文件应该将其插入db 并显示结果,但它没有发生。

这是我的表单 - echo 中引用的代码的一部分...我有一个自动递增 pid 与每个帖子相关联,因此对于每条评论,commentpid 都存储在数据库中:

<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 - 使用 onsubmit 为每个帖子的评论表单调用函数 comment()

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 应该返回的内容将显示在index.php 中的div 中,id = #postid 已在 index.php 中为每个帖子分配:

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

index.php 对于每个帖子都有这样的div,因此评论完成的帖子,评论将显示在每个帖子下方的div。任何帮助将不胜感激。

我运行两个 while 循环来显示每个帖子的所有 previuos cmets 像这样。 第一个循环显示帖子和一个嵌套的while循环,每个帖子显示每个帖子的评论..以及while循环中每个帖子的评论表单以及一个id = postid的div来显示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 .. 但它的工作不正常..请帮助

【问题讨论】:

  • 你能展示完整的脚本吗?在你的javascript中激活comment()
  • 这是我文件中唯一的 js 部分......还有什么?
  • 哦,对不起,我看到你做了什么,你有它内联。好吧无视!

标签: php ajax forms


【解决方案1】:

页面上是否有多个 &lt;form&gt; 元素?如果是这样,请尝试将 $('form').serialize() 更改为 $(this).serialize()

您能否提供更多关于您获得的结果的信息?您在数据库中看到任何条目吗?在 ajax 请求之后,您在 div 中看到的输出是什么?

您在使用 PDO 吗?将 else 条件添加到您的 if($r) 检查并添加 print_r($r-&gt;errorInfo())。尝试在 Firefox 的 Chrome / Firebug 中启用开发者工具面板并检查 ajax (XHR) 请求的结果。如果 sql 查询失败,它可能会引发PDOException。确保 XHR 请求返回 200 OK http 状态。

尝试以下代码并发布输出

<?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);
}

【讨论】:

  • 有在线版,我可以查一下吗?
  • no..no 插入数据库,但我认为它应该使用 pdo 来做..m
  • 也没有 div 的结果
  • 我正在使用本地主机..没有在线版本..我可以通过电子邮件将代码发送给您吗?
  • 用您的代码更改代码后..网址已从localhost/index.php更改为localhost/index.php?comment=jn&pid=102&submit=Submit
猜你喜欢
  • 1970-01-01
  • 2022-11-13
  • 2016-05-15
  • 2011-02-24
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 2019-04-08
相关资源
最近更新 更多