print '<div id="wrap">';
print "<table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"3\">";
for($i=0; $i<count($news_comments); $i++)
{
print '
<tr>
<td width="30%"><strong>'.$news_comments[$i]['comment_by'].'</strong></td>
<td width="70%">'.$news_comments[$i]['comment_date'].'</td>
</tr>
<tr>
<td></td>
<td>'.$news_comments[$i]['comment'].'</td>
</tr>
';
}
print '</table></div>';
$ news_comments是来自其他地方的函数返回的mysqli_fetch_assoc的3个维数数组,由于某种原因,我的for循环返回数组的总数,如[0] [2]等,直到它从计算的$达到最大数量news_comments var是LIMIT 10的返回函数。我的问题是如果我在for循环中添加任何text / html / icons,它会在这种情况下打印11次,即使只有数组1和2有数据。我该如何解决这个问题?
我的函数查询如下:
function news_comments()
{
require_once '../data/queries.php';
// get newsID from the url
$urlID = $_GET['news_id'];
// run our query for newsID information
$news_comments = selectQuery('*', 'news_comments', 'WHERE news_id='.$urlID.'', 'ORDER BY comment_date', 'DESC', '10'); // requires 6 params
// check query for results
if(!$news_comments)
{
// loop error session and initiate var
foreach($_SESSION['errors'] as $error=>$err)
{
print htmlentities($err) . 'for News Comments, be the first to leave a comment!';
}
}
else
{
print '<div id="wrap">';
print "<table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"3\">";
for($i=0; $i<count($news_comments); $i++)
{
print '
<tr>
<td width="30%"><strong>'.$news_comments[$i]['comment_by'].'</strong></td>
<td width="70%">'.$news_comments[$i]['comment_date'].'</td>
</tr>
<tr>
<td></td>
<td>'.$news_comments[$i]['comment'].'</td>
</tr>
';
}
print '</table></div>';
}
}// End function
非常感谢任何帮助。
编辑: 这是我对kemp和/或其他任何可能修复它的人的selectQuery(),它仍然是一个WIP,所以它不完整。
$_SESSION['errors'] = array();
function selectQuery($select, $tbl, $where, $order, $scroll, $limit)
{
global $mysqli;
require_once '../config/mysqli.php';
$query = "SELECT $select FROM $tbl $where $order $scroll LIMIT $limit";
if($result = mysqli_query($mysqli, $query))
{
$num = mysqli_num_rows($result);
if(!$num > 0)
{
array_push($_SESSION['errors'], 'No Results found : ');
}
else
{
for($i=0; $i<=$limit; $i++)
{
$data[$i] = mysqli_fetch_assoc($result);
}
return $data;
mysqli_free_result($result);
}
}
else
{
print('Error: ' . mysqli_error($mysqli));
}
}
答案 0 :(得分:0)
据我所知,你的代码。
$ news_comments应该是sql查询的数据结果。只是为了澄清限制10并不强制结果为10行。返回的行数取决于您的sql结果。
您正在使用 for($ i = 0; $ i
如果您想循环浏览所有$ news_comments,您可以执行
foreach ($news_comments as $i=>$news_comment) {
printf($news_comment);
}
$ news_comment将等于您的$ news_comments [$ i]
答案 1 :(得分:0)
MySQL的LIMIT就是这样;最高限额。它不会强制返回结果的数量。如果返回一个包含10个元素的数组,则selectQuery()函数的行为是错误的,无论找到的结果数是多少。我会修复这种行为,而不是解决它。
如果由于某种原因无法实现,您可以在for循环中添加条件:
for($i=0; $i<count($news_comments); $i++)
{
if( ! empty($news_comments[$i])
{
print '<tr>...</tr>';
}
}
为了记录,我和DarkerStar在foreach上。在某些情况下需要传统的for循环,但是你的不是其中之一。
foreach($news_comment as $comment)
{
echo $comment['comment'];
echo $comment['comment_by'];
echo $comment['comment_date'];
}
答案 2 :(得分:0)
从您的评论来看,我认为问题出在构建$news_comments
数组的函数中,即它总是构建一个包含11个值的数组,关键是如果你不打印它们不添加外部内容,因为它只打印空行/单元格。如果只更改内部打印的内容,则循环不能执行不同的次数。
您应该发布selectQuery()
功能。