2012-04-15 66 views
0

我使用PHP創建了一個簡單的網站,用戶可以提交博客,其他用戶(已登錄的用戶)可以發表評論。我在每個博客下面創建了一個名爲「評論」的鏈接,點擊後鏈接將顯示/隱藏與特定博客相關的所有評論(同樣,如果用戶已登錄,它將顯示一個表單域,用於提交新評論) 。所以基本上每個博客都會有多個評論。我爲此做了兩個不同的代碼,但它們都有相同的問題,每個註釋出現兩次(一切正常)。有誰能指出原因嗎?執行兩次的循環結果

mysql_select_db ("ooze"); 
$result = mysql_query ("select * from blog") or die(mysql_error()); 
$i = 1; 
while($row = mysql_fetch_array($result)) 
{ 
    echo "<h1>$row[title]</h1>"; 
    echo "<p class ='second'>$row[blog_content]</p> "; 
    echo "<p class='meta'>Posted by .... &nbsp;&bull;&nbsp; $row[date] &nbsp;&bull;&nbsp; <a href='#' onclick=\"toggle_visibility('something$i'); return false\">Comments</a><div id='something$i' style='display: none;'>";  
    $i++; 
    $a = $row["ID"]; 
    $result2 = mysql_query ("select * from blog, blogcomment where $a=blogID") or die(mysql_error()); 
    while($sub = mysql_fetch_array($result2)) 
    { 
    echo "<p class='third' >$sub[commentdate] &nbsp;&bull;&nbsp; $sub[username]</p><p>said:</p> <p>$sub[comment]</p>"; 
    } 
if (isset ($_SESSION["gatekeeper"])) 
{ 
    echo '<form method="post" name="result_'.$row["ID"].'" action="postcomment.php"><input name="ID" type = "hidden" value = "'.$row["ID"].'" /><input name="comment" id="comment" type="text" style="margin-left:20px;"/><input type="submit" value="Add comment" /></form>'; 
} 
else 
{ 
    echo '<p class="third"><a href="register.html">Signup </a>to post a comment</p>'; 
} 
echo "</div>"; 
} 
mysql_close($conn); 

//第二內環的版本://

if (isset ($_SESSION["gatekeeper"])) 
{ 
    while($sub = mysql_fetch_array($result2)) 
    { 
    echo "<p class='third' >$sub[commentdate] &nbsp;&bull;&nbsp; $sub[username] said:</p> <p>$sub[comment]</p>"; 
    } 
echo '<form method="post" name="result_'.$row["ID"].'" action="postcomment.php"><input name="ID" type = "hidden" value = "'.$row["ID"].'" /><input name="comment" id="comment" type="text" style="margin-left:20px;"/><input type="submit" value="Add comment" /></form>'; 
} 
else 
{ 
    while($sub = mysql_fetch_array($result2)) 
    { 
    echo "<p class='third' >$sub[commentdate] &nbsp;&bull;&nbsp; $sub[username] said:</p> <p>$sub[comment]</p>"; 
    } 
echo '<p class="third"><a href="register.html">Signup </a>to post a comment</p>'; 
} 
echo "</div>"; 
} 
mysql_close($conn); 
+0

請檢查您的第二個查詢:'select * from blog,blogcomment where $ a = blogID'您要加入兩個表格但未指定導致「交叉連接」的關係(http://en.wikipedia .org/wiki/Join_(SQL)#Cross_join) – Yaniro 2012-04-15 11:23:48

回答

0

你的問題就出在從第一例此查詢。

$result2 = mysql_query ("select * from blog, blogcomment where $a=blogID") 

您已查詢博客表,因此無需再次查詢。只需將其更改爲

$result2 = mysql_query ("select * from blogcomment where $a=blogID") 

應解決問題。

但是有很多事情需要考慮。

  • 你爲什麼要重新發明輪子?那裏有很多好的博客應用程序。你最好使用其中之一。
  • 不建議再使用mysql_系列函數。走開並學習mysqli_或更好的PDO
  • 您應該瞭解separation of concerns。至少您應該確保您的數據訪問/業務邏輯與顯示邏輯分開。 MVC在PHP中很常見。
  • 您還應該瞭解JOIN。即使在這個簡單的內聯腳本中,您也可以在循環內進行查詢,但效率不高。你可以將你的查詢合併成一個(就像你用內部查詢嘗試過的那樣)。區別在於一個查詢應該在主循環之外。
+0

我正在爲uni項目做這個工作,所以我只是在練習我演講過的東西。感謝您的回答,它的工作 – ozzysmith 2012-04-15 11:32:10

+0

@ozzysmith足夠公平,這回答我的第一點。其他都是相關的。如果你的講師展示了你上面發佈的代碼,我希望你不會爲這門課程付費。我會索要你的錢。 – liquorvicar 2012-04-15 11:37:55