SQL插入查询循环

时间:2014-05-17 22:03:41

标签: php html mysql

您好我正在做这个学校的分配,我已经制作了一个对应于帖子ID的评论系统,我知道它循环三次,但我给了它的帖子ID。我知道postID一直在变化。我只是不知道如何解决这个错误的任何想法?

<?php require_once("menu.php");
$connection = connectToMySQL();

$selectPostQuery = "SELECT * FROM (SELECT * FROM `tblposts` ORDER BY id DESC LIMIT 3) t ORDER BY id DESC";

$result = mysqli_query($connection,$selectPostQuery)
    or die("Error in the query: ". mysqli_error($connection));
while ($row = mysqli_fetch_assoc($result)) 
{
    $postid = $row['ID'];

        if (!empty($_POST['comment']) ) #To insert new comments in the database
        {
            $comment = $_POST['comment'];
            $userid = $_SESSION['userID'];
            $insertCommentQuery = "INSERT INTO `tblcomments` (`Content`,`UserID`,`PostID`,`Timestamp`) VALUES ('$comment','$userid','$postid',CURRENT_TIMESTAMP)";

            $resultComment = mysqli_query($connection, $insertCommentQuery)
                or die("Error in the query: ". mysqli_error($connection));
        }

    echo "<div class=\"wrapper\">";
    echo "<div class=\"titlecontainer\">";
    echo "<h1>$row[Title]</h1>";
    echo "</div>";
    echo "<div class=\"textcontainer\">";
    echo "<span>$row[Content]</span>";
    echo "</div>";

    if (!empty($row['ImagePath'])) #This will check if there is an path in the textfield
    {
    ?>
        <div class="imagecontainer">
        <img src="images/<?php echo "$row[ImagePath]"; ?>">
        </div>
<?php
    }
    echo "<div class=\"timestampcontainer\">";
    echo "<b>Date posted :</b>$row[TimeStamp] ";
    echo "<b>Author :</b> Admin";
    echo "</div>";

    #Selecting comments corresponding to the post
    $selectCommentQuery = "SELECT * FROM `tblcomments` LEFT JOIN `tblusers` ON tblcomments.userID = tblusers.ID WHERE tblcomments.PostID ='$postid'";

    $commentResult = mysqli_query($connection,$selectCommentQuery)
        or die ("Error in the query: ". mysqli_error($connection));

    while ($commentRow = mysqli_fetch_assoc($commentResult)) 
    {
        echo "<div class=\"commentcontainer\">";
        echo "<div class=\"commentusername\"><h1>Username :$commentRow[Username]</h1></div>";
        echo "<div class=\"commentcontent\">$commentRow[Content]</div>";
        echo "<div class=\"commenttimestamp\">$commentRow[Timestamp]</div>";
        echo "</div>";
    }


    if (!empty($_SESSION['userID']) ) 
    {
        echo "<form method=\"POST\" action=\"\" class=\"post-frm\">";
        echo "<label>New Comment</label>";
        echo "<textarea id=\"comment\" name=\"comment\"> </textarea>";
        echo "<input id=\"submit\" type=\"submit\" name =\"submit\" class=\"button\"/>" ;
        echo "</form>";
    }
    echo "</div>";
    echo "<br /> <br /><br />"; 
}

require_once(&#34; footer.php&#34;)?&gt;

1 个答案:

答案 0 :(得分:0)

嗯,这正是你的脚本所做的。它查询所有帖子,循环遍历它们,然后对所有帖子执行插入。要解决此问题,请在评论表单中存储帖子的ID。发布表单时,只需插入一条注释并使用表单中的id。

看起来像这样:

<?php
if (array_key_exists('postid', $_POST))
{
  $postid = $_POST['postid'];
  $comment = $_POST['comment'];

  // Perform a single insert here, and use $postid and $comment.
}

// Then, start rendering the page:

require_once(menu.php);
$connection = connectToMySQL();

$selectPostQuery = SELECT * FROM (SELECT * FROM `tblposts` ORDER BY id DESC LIMIT 3) t ORDER BY id DESC;

$result = mysqli_query($connection,$selectPostQuery)
    or die(Error in the query: . mysqli_error($connection));
while ($row = mysqli_fetch_assoc($result)) 
{
  $postid = $row['ID'];
  // Render the post itself here.
?>
  <div class="wrapper">;
  <div class="titlecontainer">;
  <h1><?=$row['Title']?></h1>;
  </div>;
  <div class="textcontainer">;
  <span><?=$row['Content']?></span>;
  </div>; 
<?php
  // Render a comment form for each post (is that what you did?)
  if (!empty($_SESSION['userID']) ) 
  {?>
  <form method=POST action= class=post-frm>
    <label>New Comment</label>
    <textarea id=comment name=comment></textarea>
    <input type=hidden name=postid value=<?=$postid?>/>
    <input id=submit type=submit name =submit class=button/>
  </form>    
  <?}
}

您的大多数代码都是相同的,现在只在循环之前完成后期数据的处理。

否则,我只修复了一些小的句法事物(也许是介绍了新的,我还没有测试过)。

另外,我把HTML带出了回声。当然,这是一个品味问题,但经验告诉我,echo语句中的大块HTML不是非常易读或可维护。而只需关闭PHP标记,输出原始HTML并仅回显其中的变量。您可以使用简短表示法:<?= $value ?>,这基本上代表<?php echo $value ?>