【问题标题】:Correctly reply to comment using textbox array使用文本框数组正确回复评论
【发布时间】:2017-02-09 01:33:08
【问题描述】:

我正在开发一个论坛页面。现在发生了什么,当用户提交对主题的回复时:该回复被提交给所有 cmets。与主题相比,我需要检查数组值的位置。例如主题 3,用户回复:它只回复该主题,不回复其他主题。

                <form enctype="metadata/form-data" method="post">
                    <?php
                        $reply = $_POST["reply"];
                        $submit = $_POST["submit"];
                        $uID = $newRow["ID"];
                        $cID = $comment["comment_ID"];
                        $ucID = $comment["ID"];

                            //this is where I've been stuck.
                            if(isset($submit)){
                                foreach($reply as $myReply){
                                    echo $myReply.'<br />';
                                }
                            }
                            else{
                                echo "No result here.";
                            }
                        ?>
                    <div class="textInput">
                        <textarea name="reply[]" maxlength="255"></textarea>
                    </div>
                    <div class="submitInput">
                        <input type="submit" name="submit" value="reply" />
                    </div>
                 </form>

【问题讨论】:

  • 对于如此复杂的东西,这段代码看起来很乱。您将图像存储在数据库中,对吧?无论如何,我有点不确定你想要实现什么。在没有非常明确的意图的情况下阅读也是大量代码。请尝试更好地总结您的主要代码,清理它并更清楚您想要发生的事情。
  • 这是一个论坛。就像您在 Facebook 上看到的那样:您可以发表评论并回复该评论。如何检查正确的评论 ID 以插入回复?

标签: php forum


【解决方案1】:

我不清楚您正在使用什么,但我会举一个例子,我相信它会有所帮助。我假设您使用的是MYSQLI

步骤:

步骤 1 ) 将您的原始帖子存储在表格中(从现在开始原始帖子将成为 OP)

步骤 2 ) 为回复创建一个表格

第三步)创建关系(外键)

第 4 步)获取您想要显示的原始帖子(或者只有一个?)

步骤 5 ) 获取相关回复

步骤 6 ) 将相关回复作为子数组放入 OP 数组中。

示例:

首先,获取 OP。 第 4 步

<?php
  //In case of multiple:
  $getOP = "SELECT * FROM original_posts WHERE ID IN(1,2,3)";
  //In case of single:
  $getOP = "SELECT * FROM original_posts WHERE ID = 1";
 ?>

现在,在 PHP 中获取这些 ID。

<?php 

  //in case of multiple:
  $IDArray = array();
  $getOPResult= mysqli_query($con, $getOP);

  foreach($getOPResult as $row){
    $IDArray[] = $row['ID'];
  }

  //In case of single, no need for a loop
  $result = $getOPResult->fetch_object();
  $OPID = $result->ID;
?>

现在,跟进回复第 5 步

<?php

  //In case of multiple
  $getReplies = "SELECT * FROM table_replies WHERE OPID IN(".implode(',', $IDArray).")";

  //In case of single
  $getReplies = "SELECT * FROM table_replies WHERE OPID = $OPID;

?>

现在,我们将融合数组。单个 OP 甚至不需要此步骤:

<?php

  $myReplies = mysqli_query($con, $query);

  $fusedArray = array();
  foreach($myReplies as $row){
    //put the replies into an array with the OP's ID as a key
    $fusedArray[$row['OPID']] = $row;
  }

?>

最后一步 - 全部渲染:

<?php 

  $html = '';
  foreach($getOPresult as $OP){
    //set replies array
    $thisOPID = $OP['ID'];
    $relatedReplies = $fusedArray[$thisOPID];

    //From this point on, you can easily loop over the replies for every OP
    $html .= '<div class="myPost">';
    $html .= 'I'm going to output OP data here';
    $html .= '<div class="myReplies">';

    //Start looping over the replies and outputting it here
    foreach($relatedReplies as $reply){
      $html .= 'I'm rendering reply data here';
    }

    $html .= '</div>';
    $html .= '</div>';
  }

  echo $html;

?>

关闭

现在,这不是很具体,因为我没有太多信息,但逻辑是存在的,这个逻辑在大多数情况下应该足够了。

在开始讨论之前,请记住这只是结构和逻辑的一个例子。

您想要输出的 HTML 和编码风格都在您身上。无论您是否想使用procedural mysqli 或如何保护它免受 MYSQL 注入等,都与这个问题无关,因此不应该讨论。我只是想帮助 OP 完成这一切的后勤工作。

祝你有美好的一天,我希望这会有所帮助:)

编辑:

抱歉,您的问题似乎已更改。

在这种情况下,我只是建议您使用如下形式的隐藏字段:

&lt;input type="hidden" name="OPID" value="$IDoftheOP"/&gt;

现在,每当加载一个主题时,只需用它的 ID 填充隐藏输入的值。在 PHP 中读取 formdata 时,只需将其读取出来,这就是您需要与之耦合的 ID。

【讨论】:

  • 感谢 Babydead,这很有帮助。 :)
猜你喜欢
  • 2018-09-03
  • 2012-08-23
  • 2020-02-12
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多