1

嗨一整天我一直在努力寻找解决方案。我试过这个 嵌套数组。第三级正在消失 ,这试图在 PHP和许多其他方式中获取线程/嵌套注释,但可能是由于我缺乏知识,我无法获得所需的结果。这就是我寻求帮助的原因。我想为我的新闻网站创建嵌套评论。

我在 mySQL 中有一个带有 CommentID 和 ParentID 的表

有一个班级帖子,我可以在其中获得所有指定的评论

case Comments:
    if ($this->iPostID != 0) {
        $sSQL = "SELECT CommentID, ParentID FROM Comment WHERE PostID=" . $this->iPostID;

        $rsComment = $this->dDatabase->query($sSQL);

        while ($aComment = $this->dDatabase->fetch_array($rsComment)) {
            $sComment = new comment();
            $sComment->load($aComment['CommentID']);
            $this->aComments[] = $sComment;
        }

    }
    return $this->aComments;
    break;

那就是我从 $this->aComments 中得到的数组:

Array
(
    [0] => comment Object
        (
            [iCommentID:comment:private] => 1
            [iDatePosted:comment:private] => 17 July 2012
            [sContent:comment:private] => Very nice it works now
            [iUserID:comment:private] => 1
            [iPostID:comment:private] => 1
            [iParentID:comment:private] => 0
            [dDatabase:comment:private] => database Object
                (
                    [sqliConnection:database:private] => mysqli Object
                        (
                            [affected_rows] => 1
                            [client_info] => 5.5.9
                            [client_version] => 50509
                            [connect_errno] => 0
                            [connect_error] => 
                            [errno] => 0
                            [error] => 
                            [field_count] => 6
                            [host_info] => Localhost via UNIX socket
                            [info] => 
                            [insert_id] => 0
                            [server_info] => 5.5.9
                            [server_version] => 50509
                            [sqlstate] => 00000
                            [protocol_version] => 10
                            [thread_id] => 2929
                            [warning_count] => 0
                        )

                )

        )

...
    [3] => comment Object
    (
        [iCommentID:comment:private] => 4
        [iDatePosted:comment:private] => 22 July 2012
        [sContent:comment:private] => thies is the first reply for a comment
        [iUserID:comment:private] => 4
        [iPostID:comment:private] => 1
        [iParentID:comment:private] => 1
        [dDatabase:comment:private] => database Object
            (
                [sqliConnection:database:private] => mysqli Object
                    (
                        [affected_rows] => 1
                        [client_info] => 5.5.9
                        [client_version] => 50509
                        [connect_errno] => 0
                        [connect_error] => 
                        [errno] => 0
                        [error] => 
                        [field_count] => 6
                        [host_info] => Localhost via UNIX socket
                        [info] => 
                        [insert_id] => 0
                        [server_info] => 5.5.9
                        [server_version] => 50509
                        [sqlstate] => 00000
                        [protocol_version] => 10
                        [thread_id] => 2929
                        [warning_count] => 0
                    )

            )

    )

这是我每次尝试对这个数组做任何事情时都会遇到的错误

致命错误:无法在第 15 行的 /Applications/MAMP/htdocs/News/includes/thread.php 中使用注释类型的对象作为数组

Thread.PHP 是http://www.jongales.com/blog/2009/01/27/php-class-for-threaded-comments/的精确副本

谁能帮帮我。

谢谢你。

4

2 回答 2

0

谢谢大家的帮助和回复,你们帮了我很多。我稍微修改了我的评论系统,最后是结果

PHP:

public function load($iCommID)
{
    $sSQL = "SELECT CommentID, DATE_FORMAT(DatePosted, '%d %M %Y') as DatePosted, Content, UserID, PostID, ParentID FROM Comment WHERE CommentID=" .$iCommID;

    $aComment = $this->dDatabase->query($sSQL);

    $rsComment = $this->dDatabase->fetch_array($aComment);
    $this->iCommentID = $rsComment['CommentID'];
    $this->iDatePosted = $rsComment['DatePosted'];
    $this->sContent = $rsComment['Content'];
    $this->iUserID = $rsComment['UserID'];
    $this->iPostID = $rsComment['PostID'];
    $this->iParentID = $rsComment['ParentID'];

    $sSQL = "SELECT CommentID FROM Comment WHERE ParentID=" .$iCommID;

            $resParent = $this->dDatabase->query($sSQL);

            while($aReply = $this->dDatabase->fetch_array($resParent))
            {

                $oReply = new comment();
                $oReply->load($aReply['CommentID']);

                $this->aReply[] = $oReply;
            }

}

使成为:

public static function renderSingleComment($comComment)
{
    $aReplies = $comComment->Replies;
    $sHTML = "";
    $sHTML .= '<li class="comment">
                        <a id="'.$comComment->CommentID.'"></a>
                        <div class="comm-container">
                            <div class="comm-container-header">
                                <img src="img/avatar1.jpg" alt="avatar1" width="55" height="60" class="avatar"/>
                                <span class="commentator">Igor Revenko</span>
                                <br/>
                                <span class="date">'.$comComment->DatePosted.'</span>
                                <span><a href="#'.$comComment->ParentID.'">#</a></span>
                                <div class="clear"></div>
                            </div>
                            <div class="comm-container-entry" id="rev">
                                <p>'.$comComment->Content.'</p>

                                    <a class="comment-reply-link" id="replyLink-'.$comComment->CommentID.'" href="#'.$comComment->CommentID.'" onclick="javascript:moveForm(this); findID(\'replyLink-'.$comComment->CommentID.'\')"></a>

                            </div>
                        </div>';
                    for($i=0;$i<count($aReplies); $i++)
                    {
                        $sHTML .= '<ul class="children">';
                        $sHTML .= PageView::renderSingleComment($aReplies[$i]);
                        $sHTML .= '</ul>';
                    }
    $sHTML .= ' </li>';


    return $sHTML;
}


public static function renderComment ($pvPostID){


    $sHTML = "";

    $aComments = $pvPostID->Comments;

    $sHTML .= '<div class="clear"></div>
            <div id="comments">
                <h3>COMMENTS TO "'.$pvPostID->PostName.'"</h3>
                <ol class="comments-list">';

    for($i=0; $i<count($aComments); $i++)
    {
        $sHTML .= PageView::renderSingleComment($aComments[$i]);
    }

再次感谢您的帮助。

于 2012-07-25T07:18:46.310 回答
0

该错误已经足够详细了,thread.php假设它$commment是一个包含以下键的数组parent_idid......而在您的情况下它是一个对象。

所以你有两个选择

  • 更改您的代码以使其兼容thread.php(强烈不推荐)
  • 或修改thread.php以使其处理您的对象。

thread.php再次修改,您有两个选择,因为您的Comment类属性是private您可以

  • 将访问修饰符更改为public.
  • 或者设置一些吸气剂

然后在thread.php你看到的每个地方都可以看到$comment['parent_id']make it $comment->parent_id(或者$comment-getParentId如果你使用了 getter)等等

于 2012-07-22T08:05:09.960 回答