2016-11-25 137 views
0

我现在有什么问题,是有一个while循环来发布从MySQL检索我的主题。完美的工作,直到我输入数据。我最近创建了评论系统,每个主题都会有一个评论框提交。问题在于while循环一遍又一遍地运行它,所以当我为一个主题键入注释时,它会发布到所有主题。 这里是我的代码:MYSQL和PHP循环失败

//MYSQLI LOGIN DETAILS 
     $servername = "***"; 
     $username = "***"; 
     $password = "***"; 
     $dbname = "***"; 
     //MYSQLI CREATE CONNECTION 
     $constatus = new mysqli($servername, $username, $password, $dbname); 
     //MYSQLI CHECK CONNECTION 
     if ($constatus->connect_error) { 
      die("Connection failed: " . $constatus->connect_error); 
     } 
     //MYSQLI COUNT COLUMNS 
     $sql = "SELECT NEWSID, AUTHOR, ADMINSTS, DATE, HEADING, ARTICLE FROM news ORDER BY NEWSID DESC"; 
     $result = $constatus->query($sql); 

     if ($result->num_rows > 0) { 
      // output data of each row 
      while($row = $result->fetch_assoc()) { 
       echo 
       "<div class=newsboard_topic>" . 
        "<div class=newsboard_authordate>" . $row["AUTHOR"]; 
       if ($row["ADMINSTS"] == admin) { 
        echo 
        "<div class=newsboard_adminfx> 
         Admin 
        </div>"; 
       } else if ($row["ADMINSTS"] == sadmin) { 
        echo 
        "<div class=newsboard_sadminfx> 
         Super Admin 
        </div>"; 
       } 
       if ($_SESSION['adminsts'] == 'admin' || $_SESSION['adminsts'] == 'sadmin') { 
        echo "<span class=newsboard_adminactions> <img src='/image/remove.png' style='width:20px; height:20px;'> </span>"; 
       } 
       echo 
        "<span class=date>" . $row["DATE"] . 
        "</span></div> 
        <h1>" . $row["HEADING"]. 
        "</h1><p class=newsboard_topic_article>" . 
         $row["ARTICLE"] . 
        "</p>"; 
       $sqlcomments = "SELECT newscomments.USERID, newscomments.COMMENT, userdata.FIRSTNAME, userdata.LASTNAME, userdata.ADMINSTATUS FROM newscomments JOIN userdata ON newscomments.USERID=userdata.ID WHERE NEWSID=$row[NEWSID] ORDER BY COMMENTID DESC"; 
       $resultcomments = $constatus->query($sqlcomments); 
       echo "<div class=newsboard_comments> 
        Comments 
        <br>"; 
       while($rowcomments = $resultcomments->fetch_assoc()) { 
        echo $rowcomments["FIRSTNAME"] . " " . $rowcomments["LASTNAME"] . " " . $rowcomments["COMMENT"] . "<br>"; 
       } 
       if (isset($_SESSION['loggedon']) && $_SESSION['loggedon'] == true) { 
        echo ' 
         <form method="post"> 
          <input class=postheadline type="text" name="comment" /> 
          <input class=submit type="submit" id="submit" name="submit" value="Comment"/> 
         </form>'; 
        if (isset($_POST[submit])) { 
         if (!empty($_POST[comment])) { 
          $sqlcommentpost = "INSERT INTO newscomments (NEWSID, USERID, COMMENT) VALUES ('$row[NEWSID]', '$_SESSION[profileid]', '$_POST[comment]')"; 
          if ($constatus->query($sqlcommentpost) === TRUE) { 
           echo "Posted Successfully!"; 
           break; 
          } else { 
           echo "Fatal Error. Please try again"; 
           break; 
          } 
         } 
        } 
       } 
       echo "</div></div>"; /*Ends newsboard_topic Div & newsboard_comments Div*/ 
      } 
     } else { 
      echo "0 results"; 
     } 

活生生的例子是在网上www.geovillageva.com但是你不能看评论,因为它是注册会员,只是因为它有海报的名称。

+0

如果我理解正确的话,添加一个隐藏字段定义它属于,那么就用PHP检查,只有添加评论的一个帖子里面的新闻信息的每条评论框。 (认为​​这是你想要的?) – Enstage

回答

0

让我们在表单中包含新闻标识。你可以有一个隐藏的输入字段。然后在插入时使用此新闻ID $_POST[nid]

 if (isset($_SESSION['loggedon']) && $_SESSION['loggedon'] == true) { 
         echo ' 
          <form method="post"> 
    <input class=postheadline type="text" name="comment" /> 
    <input type="hidden" name="nid" value="'.$row[NEWSID].'" /> 
    <input class=submit type="submit" id="submit" name="submit" value="Comment"/> 
          </form>'; 
       if (isset($_POST[submit])) { 
        if (!empty($_POST[comment])) { 
    $sqlcommentpost = "INSERT INTO newscomments (NEWSID, USERID, COMMENT) VALUES ('$_POST[nid]', '$_SESSION[profileid]', '$_POST[comment]')"; 
           if ($constatus->query($sqlcommentpost) === TRUE) { 
            echo "Posted Successfully!"; 
            break; 
           } else { 
            echo "Fatal Error. Please try again"; 
            break; 
           } 
          } 
         } 
        } 
0

所以,你的输入块

 if (isset($_SESSION['loggedon']) && $_SESSION['loggedon'] == true) { 
       echo ' 
        <form method="post"> 
         <input class=postheadline type="text" name="comment" /> 
         <input class=submit type="submit" id="submit" name="submit" value="Comment"/> 
        </form>'; 
       if (isset($_POST[submit])) { 
        if (!empty($_POST[comment])) { 
         $sqlcommentpost = "INSERT INTO newscomments (NEWSID, USERID, COMMENT) VALUES ('$row[NEWSID]', '$_SESSION[profileid]', '$_POST[comment]')"; 
         if ($constatus->query($sqlcommentpost) === TRUE) { 
          echo "Posted Successfully!"; 
          break; 
         } else { 
          echo "Fatal Error. Please try again"; 
          break; 
         } 
        } 
       } 
      } 

需要由它自己的显示循环之前去。在使用$row[NEWSID]插入的查询中,您需要使用$_POST['newsid']来代替(并且您可能需要将其添加到要与注释一起发布的表单中)。

Please note that you need to beef up the security on this considerably or you will be hacked.

0

您可以在表单上尝试.reset()提交成功(在休息前)之后。