当我使用循环中的表单字段发布评论时,博客的特定ID不会转移到php脚本。因此,评论不会分配到博客的目的地。
<?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 .... • $row[date] • <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] • $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);
?>
答案 0 :(得分:1)
这是因为你用内部while()循环覆盖了$ row变量。将内部变量名称从$ row更改为$ sub,您将发现行为正常工作。
答案 1 :(得分:0)
不要对两个循环使用相同的变量($row
)......
将第二个循环更改为:
while($row2 = mysql_fetch_array($result2)){...}
并将第二个结果中的所有值更改为$row2["COLUMN_NAME"]
另外 - 不要忘记用引号括起数组索引...它可以工作但是会创建一个通知,并使服务器工作更加困难
即:$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 .... • {$row["date"]} • <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"]} • {$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"]}
如果您希望在一个查询中获取所有注释 - 这很好,但是您需要安排它们,然后只显示每个“博客”的相关内容,当您在嵌套循环中获取它们时 - 第二个查询只会给你一行(因为在第二次 - 它已经是空的)