2013-10-12 36 views
0

有人可以帮我清理这个功能并使其正常工作吗?循环功能不能正常工作

它应该看起来像这样:http://gyazo.com/04c31a3edaabeca5f5c6376f1cb607ca.png 除了在类别下它应该只列出与cat_id匹配的类别,它可以工作。

但是页面看起来很奇怪。 这是它看起来像现在:http://gyazo.com/f217603bede98210dce21328e1aab34f.png

function getcatposts($cat_id) 
{ 
    $sql = mysql_query("SELECT COUNT(*) FROM `topics`"); 
    if(!$sql){ 
     echo 'Error: ',mysql_error(); 
    } 
    $r = mysql_fetch_row($sql); 

    $numrows = $r[0]; 
    $rowsperpage = 10; 

    $totalpages = ceil($numrows/$rowsperpage); 

    echo ' 
<table class="table table-striped table-bordered table-hover"> 
     <thead> 
      <tr class="info"> 
      <th>Title</th> 
      <th>Username</th> 
      <th>Date</th> 
      <th>Category</th> 
      </tr> 
     </thead>'; 
    if(isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) { 
     $currentpage = (int) $_GET['currentpage']; 
    } else { 
     $currentpage = 1; 
    } 

    if($currentpage > $totalpages) { 
     $currentpage = $totalpages; 
    } 

    if($currentpage < 1) { 
     $currentpage = 1; 
    } 

    $offset = ($currentpage - 1) * $rowsperpage; 

    $sql = mysql_query("SELECT * FROM `topics` ORDER BY topic_id DESC LIMIT $offset, $rowsperpage"); 
    if(!$sql){ 
     echo 'Error: '.mysql_error(); 
    } 
    $link = mysqli_connect("localhost", "lunar_lunar", "", "lunar_users"); 
    $qc = mysqli_query($link, "SELECT * FROM topics WHERE topic_cat='$cat_id'"); 

    while($row = mysqli_fetch_array($qc)) 
    { 
     $topic_title[]=$row['topic_subject']; 
     $topic_id[]=$row['topic_id']; 
    } 

    $qc2 = mysqli_query($link, "SELECT * FROM categories WHERE cat_id='$cat_id'"); 

    while($row2 = mysqli_fetch_array($qc2)) 
    { 
     $cat_name[]=$row2['cat_name']; 
    } 
    for ($i=0; $i < count($topic_id); $i++) 
    { 
     echo ' 
     <tbody><tr> 
      <td><a href="topic.php?id='.$topic_id[$i].'">'.$topic_title[$i].'</a></td> 
      <td><a href="../public.php?id='.$res['topic_by'].'">'.getOwner($res['topic_by']).'</td></a> 
      <td>'.$res['topic_date'].'</td> 
      <td>'.$cat_name[$i].'</td> 
     </tr></tbody> 
      '; 
    } 
} 
+3

两条链接都重定向到同一页面。至少对于我来说。 – Kaarel

+0

对不起,我忘了你需要登录后才会更新屏幕截图。 –

+1

与您的问题不完全相关,但由于安全问题,mysql_ *函数已被弃用。改为使用PDO或mysqli,并为分页查询使用准备好的语句,这很容易受到SQL注入的影响。 – Snowburnt

回答

2

首先,我看不出其中$资源的定义,这可以解释为什么按主题和话题日期没有显示任何东西。也许你忘了更改变量名称?

第二,您选择特定类别的名称,因此只会有一个结果行。当您循环显示第一个主题时,cat_name [1]和cat_name [2]将显示为空。既然你知道你只是选择一个类别,只需将结果分配给一个变量而不是数组。 cat_name代替cat_name []

你说:

SELECT * FROM categories WHERE cat_id='$cat_id' 

假设CAT_ID是你永远不会比一个结果多表的主键。

当你把它分配给cat_name []你是这样的:

while($row2 = mysqli_fetch_array($qc2)) 
    { 
     $cat_name[]=$row2['cat_name']; 
    } 

它将获取一行并将其分配给$ cat_name [0]。

,问题就出现在这里:

<td>'.$cat_name[$i].'</td> 

循环$ I内部递增,它将在这种情况下,经过3次。 $ cat_name [0]将返回“web开发”。但$ cat_name [1]和$ cat_name [2]不会有任何结果。或者只需调用$ cat_name [0]而不是$ cat_name [$ i],或者将值赋给$ cat_name并在循环中调用它。

+0

没关系,我现在明白了。但是,如果我在页脚上方调用函数方式时出于某种原因将它显示在页脚下,可以帮助我解决这个问题吗? –

+0

谢谢!现在所有的数据都能正确显示,只要我在下面显示的页脚上面调用函数时,任何想法为什么?我可以粘贴整个文件,如果你喜欢, –

+0

你没有给我们足够的信息来解决这个问题。它可能与如何设置div定位或其他HTML格式问题有关。 你能告诉我们完成的输出HTML吗? – Snowburnt