2012-04-14 61 views
0

當我使用循環中的表單字段發佈註釋時,博客的特定ID不會轉移到php腳本。所以評論沒有被分配到博客的目的地去。來自MySql的ID值在while循環中丟失

<?php 
$conn = mysql_connect("localhost", "ooze", ""); 
mysql_select_db ("ooze"); 
$result = mysql_query ("select * from blog") or die(mysql_error()); 
$result2 = mysql_query ("select * from blog, blogcomment where blog.ID = blogcomment.blogID") 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++; 
while($row = mysql_fetch_array($result2)) 
{ 
echo "<p class='third' >$row[commentdate] &nbsp;&bull;&nbsp; $row[username]</p><p>said:</p> <p>$row[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); 
?> 
+3

如果你正確縮進你的代碼,它會更可讀...。 – hakre 2012-04-14 14:53:15

回答

0

不使用兩個迴路相同的變量($row)...

改變你的第二個環爲看:

while($row2 = mysql_fetch_array($result2)){...} 

,並從第二個結果來改變所有的值$row2["COLUMN_NAME"]

另外 - 不要忘記用引號包圍數組索引...它的工作原理,但創建一個通知,並使服務器工作一littl Ë有點難

即:$row[username]應該是$row["username"]

這是一個嘗試做一點點順序代碼:

<?php 
$conn = mysql_connect("localhost", "ooze", ""); 
mysql_select_db ("ooze"); 
$result = mysql_query ("select * from blog") or die(mysql_error()); 
$result2 = mysql_query ("select * from blog, blogcomment where blog.ID = blogcomment.blogID") or die(mysql_error()); 
$i = 1; 
while($row = mysql_fetch_array($result)){ 
    echo <<<str 
    <h1>{$row["title"]}</h1> 
    <p class ='second'>{$row["blog_content"]}</p> 
    <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;'> 
str; 

    $i++; 
    while($comment = mysql_fetch_array($result2)){ 
     echo "<p class='third' >{$comment["commentdate"]} &nbsp;&bull;&nbsp; {$comment["username"]}</p><p>said:</p> <p>{$comment["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); 

畢竟,如果我理解正確的是你所試圖實現 - 比你的腳本不好,第二個查詢應該在第一個循環內部,並且最後包含WHERE blogID={$row["ID"]}

如果你希望在一個查詢中獲得所有評論 - 這很好,但你需要排列它們,然後只顯示相關的每個「博客」,當你在一個嵌套循環中獲取它們時 - 第二個查詢將只給你一行(因爲第二次 - 它已經是空的)

+0

試過,沒有修復它 – ozzysmith 2012-04-14 15:00:07

+0

修復你的腳本的縮進並提供表格的列名......它真的很難理解你在那裏試圖做什麼 – 2012-04-14 15:02:15

+0

看看我粘貼的腳本,並注意我以後說什麼..好像你的行動順序是錯誤的 – 2012-04-14 15:14:24

1

它是因爲你用內部的while()循環覆蓋了$ row變量。將內部變量名稱從$ row更改爲$ sub,您會發現行爲像預期的那樣工作。