2016-11-25 5 views
0

私が今問題を抱えているのは、MySQLから検索したトピックを投稿するwhileループがあることです。私がデータを入力するまで、完璧に動作します。私は最近、コメントシステムを作成しました。そこでは、各トピックに対して、提出するコメントボックスがあります。問題は、whileループが何度も何度も繰り返し実行することです。そのため、1つのトピックのコメントを入力すると、すべてのトピックに投稿されます。ここ は私のコードです: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でチェックしてコメントを1つの投稿に追加してください。 (これはあなたが望むものだと思いますか?) – Enstage

答えて

0

また、ニュースIDもフォームに含めます。これのために隠された入力フィールドを持つことができます。挿入している間、このニュース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()を試すことができます。

関連する問題