我正在建立的网站上有评论和回复部分。回复部分设置为向左移动,保证金为10%。但是当我测试代码时,它会将每个回复转移到右边而不是所有回复一起转移。我被困了,因为回复在评论中循环,我不知道如何解决它。这是代码......
// Comments section
// Get Username and ID from database
if ($login->isLoggedIn()) {
$userquery = "SELECT * FROM settings WHERE user_id=$userid";
$usersql = mysql_query($userquery) or die('SQL Error :: '.mysql_error());
$userqueryrow = mysql_fetch_assoc($usersql);
$usercommentname = $userqueryrow['display_name'];
} else {
}
// Posted Comments
$commentquery = "SELECT * FROM comments WHERE listing_id=$listingid AND response_to_id='0' ORDER BY comment_ts ASC";
$commentsql = mysql_query($commentquery) or die('SQL Error :: '.mysql_error());
if(mysql_num_rows($commentsql) == 0){
echo '<div align="center">No comments have been posted yet.</div>';
} else {
while($commentrow=mysql_fetch_array($commentsql))
{
// Get comment display name from database
// Get Username and ID from database
$commentid = $commentrow['comment_id'];
$commenterid = $commentrow['user_id'];
$commenterquery = "SELECT * FROM settings WHERE user_id=$commenterid";
$commentersql = mysql_query($commenterquery) or die('SQL Error :: '.mysql_error());
$commenterqueryrow = mysql_fetch_assoc($commentersql);
$commentername = $commenterqueryrow['display_name'];
echo '<div class="comment"><a href="mypage.php?user='.$commenterid.'">'.$commentername.'</a> said: '.stripslashes($commentrow['comment']).'';
if ($login->isLoggedIn()) {
// Has this user already reported this comment?
$reportedcommentquery = "SELECT * FROM report WHERE comment_id=$commentid AND reporter_id=$userid AND listing_id=$listingid";
$reportedcomment = mysql_query($reportedcommentquery) or die('SQL Error :: '.mysql_error());
if (mysql_num_rows($reportedcomment) > "0") {
echo ' <span class="small_gray">-Reported and under review-</span>';
} else {
echo ' <a href="item.php?item='.$listingid.'&report='.$commentid.'" class="small_graylink">Report</a>';
}
echo '</div>';
// Get responses
$responsesquery = "SELECT * FROM comments WHERE listing_id=$listingid AND response_to_id=$commentid ORDER BY comment_ts ASC";
$responsessql = mysql_query($responsesquery) or die('SQL Error :: '.mysql_error());
if(mysql_num_rows($responsessql) == 0){
echo '';
} else {
while($responsesrow=mysql_fetch_array($responsessql))
{
// Get responder display name from database
$responderid = $responsesrow['user_id'];
$responseid = $responsesrow['comment_id'];
$responderquery = "SELECT * FROM settings WHERE user_id=$responderid";
$respondersql = mysql_query($responderquery) or die('SQL Error :: '.mysql_error());
$responderqueryrow = mysql_fetch_assoc($respondersql);
$respondername = $responderqueryrow['display_name'];
$responderid = $responderqueryrow['user_id'];
echo '<div class="response"><a href="mypage.php?user='.$responderid.'">'.$respondername.'</a> said: '.stripslashes($responsesrow['comment']).'';
if ($login->isLoggedIn()) {
// Has this user already reported this comment?
$reportedresponsequery = "SELECT * FROM report WHERE comment_id=$responseid AND reporter_id=$userid AND listing_id=$listingid";
$reportedresponse = mysql_query($reportedresponsequery) or die('SQL Error :: '.mysql_error());
if (mysql_num_rows($reportedresponse) > "0") {
echo' <span class="small_gray">-Reported and under review-</span>';
} else {
echo' <a href="item.php?item='.$listingid.'&report='.$responsesrow['comment_id'].'" class="small_graylink">Report</a>';
}
}
}
echo '</div>';
echo '<div class="clear"></div>';
}
}
// Response form
if ($login->isLoggedIn()) {
echo '<div class="responsebox">Respond to this comment:<br /><form id="newresponseto" name="newresponseto" method="post" action="item.php?item='.$listingid.'&comment='.$commentrow['comment_id'].'">
<textarea name="new_response" cols="43" rows="2">'.$usercommentname.' says:</textarea><br />
<input type="submit" name="Submit" value="Submit" /></form></div><hr>';
} else {
}
}
}
// Comment form
if ($login->isLoggedIn()) {
echo' <div class="commentbox">Post a comment:<br /><form id="newcommentform" name="newcommentform" method="post" action="item.php?item='.$listingid.'">
<textarea name="new_comment" cols="50" rows="2">'.$usercommentname.' says:</textarea><br />
<input type="submit" name="Submit" value="Submit" />
</form></div>';
} else {
echo '<div align="center">Log in to post comments or responses.</div>';
}
这是相应的CSS ..
.comment {
float: left;
width: 100%;
background-color:#CCCCCC;
margin-bottom: 10px;
}
.commentbox {
float: left;
width: 100%;
margin-bottom: 10px;
}
.response {
float: left;
background-color:#EDEFF4;
margin-bottom: 10px;
}
.responsecontainer {
float: left;
margin-left: 10%;
width: 90%;
margin-bottom: 10px;
}
.responsebox {
float: left;
margin-bottom: 10px;
}
任何想法如何保持嵌套循环,但强制响应(实际上任何后续注释)布局而不循环左边距?
答案 0 :(得分:1)
我在您发布的代码中没有看到您调用了.responsecontainer
类,这会将边距设置为10%。
但是responses
的嵌套是因为你没有关闭你的
<div class="response">
循环中的while
,仅在关闭循环后的最后。所以你会得到这样的情况 -
<div class="response"><a href="mypage.php?user=1">user1</a> said: Yes
<div class="response"><a href="mypage.php?user=2">user2</a> said: I agree
<div class="response"><a href="mypage.php?user=3">user3</a> said: Are You Sure?
</div>
所以最后2个将嵌套在第一个<div>
中,而不是直接嵌在下面。
您需要在<div class="responsecontainer">
response
循环周围添加while
,然后在循环中添加</div>
。
截断脚本 -
// Get responses
...
echo '<div class="responsecontainer">'; // Add <div class="responsecontainer"> to make all responses margin-left 10% as a group
if(mysql_num_rows($responsessql) == 0){
...
while($responsesrow=mysql_fetch_array($responsessql))
{
// Get responder display name from database
$responderid = $responsesrow['user_id'];
$responseid = $responsesrow['comment_id'];
$responderquery = "SELECT * FROM settings WHERE user_id=$responderid";
$respondersql = mysql_query($responderquery) or die('SQL Error :: '.mysql_error());
$responderqueryrow = mysql_fetch_assoc($respondersql);
$respondername = $responderqueryrow['display_name'];
$responderid = $responderqueryrow['user_id'];
echo '<div class="response"><a href="mypage.php?user='.$responderid.'">'.$respondername.'</a> said: '.stripslashes($responsesrow['comment']).'';
if ($login->isLoggedIn()) {
// Has this user already reported this comment?
$reportedresponsequery = "SELECT * FROM report WHERE comment_id=$responseid AND reporter_id=$userid AND listing_id=$listingid";
$reportedresponse = mysql_query($reportedresponsequery) or die('SQL Error :: '.mysql_error());
if (mysql_num_rows($reportedresponse) > "0") {
echo' <span class="small_gray">-Reported and under review-</span>';
} else {
echo' <a href="item.php?item='.$listingid.'&report='.$responsesrow['comment_id'].'" class="small_graylink">Report</a>';
}
}
echo '</div>'; // Missing </div> inside while loop
}
echo '</div>'; // Ends <div class="responsecontainer">
echo '<div class="clear"></div>';
}
答案 1 :(得分:0)
首先连接输出以获得对它的更多控制..
每次要打印内容时都不使用echo:
echo '<div class="response"><a href="mypage.php?user='.$responderid.'">'.$respondername.'</a> said: '.stripslashes($responsesrow['comment']).'';
将输出集中在一个变量中:
$output = '<div class="response">';
$output .= '<a href="mypage.php?user='.$responderid.'">'.$respondername.'</a> ';
$output .= 'said: '.stripslashes($responsesrow['comment']);
$output .= '</div>';