使用文本框数组正确回复评论

时间:2017-02-07 00:19:25

标签: php forum

我正在论坛页面上工作。现在发生了什么,当用户提交对主题的回复时:该回复被提交给所有评论。与主题相比,我需要检查数组值的位置。例如主题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>

1 个答案:

答案 0 :(得分:0)

我没有清楚地知道你正在使用什么,但我会做一个我确定会有所帮助的例子。我假设您正在使用MYSQLI

步骤:

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

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

步骤3)创建关系(外键)

步骤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。

度过愉快的一天,我希望这有助于:)

修改

对不起,您似乎已经改变了您的问题。

在这种情况下,我建议您在表单中使用隐藏字段,如下所示:

<input type="hidden" name="OPID" value="$IDoftheOP"/>

现在,无论何时加载主题,只需使用其ID填充隐藏输入的值。在PHP中读取formdata时,只需将其读出来即可获得所需的ID。