2013-04-29 30 views
0

首先:我知道这是一个非常混乱的代码,而不是正确的方法来做到这一点。但它的第一次尝试写一个类和功能..使用功能显示内容无法正常工作

什么,我想它做的事:输出中的“文章”表中的所有行,在一个DIV(DIV再次“重复”的每一行)和按ID和日期排序。稍后我想通过页面ID对其进行过滤。

做些什么:只给出了1排的输出,不显示其他行..

我希望我的解释是有道理的..

这就是我的“物品”表看起来像现在:

| id | | PAGE_ID | |标题| |内容| |日期| |位置|

标题为纯文本,html内容来自adminpanel中所见即所得编辑器,日期为DD-MM-YYYY。

这就是我的 “阶级” 的模样:

include_once('./includes/config.php'); 
class Content { 


public $id; 
public $page_id; 
public $title; 
public $content; 
public $position; 



var $conn; 

function Content() 
     { 
       $this->conn = mysql_connect(Config::DB_HOST, Config::DB_USER, Config::DB_PASS); 
       mysql_select_db(Config::DB_NAME, $this->conn); 
     } 


function get_content_articles() 
{ 
    $sql = "SELECT id, page_id, title, content, date, position FROM articles ORDER BY id, position"; 
    $result = mysql_query($sql, $this->conn); 

       if (!$result) 
         return false; 
    $fetch_all = array(); 

    while($article = mysql_fetch_assoc($result)) 
    $fetch_all[] = $article; 

return $fetch_all; 
} 


public function display_content() { 
    $this->article = $this->get_content_articles(); 
    foreach ($this->article as $article) 

    $content = '<div class="blok"> 
     <h2>[id:'.$article['id'].'] 
     </br> 
     [title: '.$article['title'].']</h2> 
     </br> 
     [content: '.$article['content'].'] 
     </br> 
     [date: '.$article['date'].'] 
    </div>'; 

    return $content; 
    } 
} 

这是我如何使用它:

$content = new Content(); 

回声$内容 - > display_content();

测试页面在这里:http://thepiratehenk.nl/pgwe/testcontent.php

是否有人对如何解决这一问题有何建议? (请原谅我的英语不好而凌乱的问题,我希望这一切是很有意义的。)


好了,感谢您的答案为止。我知道我不应该在类中使用mysql_函数..但它是我现在最了解的唯一方法。

我改变了display_content()函数来此:

public function display_content() { 
    $this->article = $this->get_content_articles(); 
    foreach ($this->article as $article) 
    $content = ""; 
    $content .= '<div class="blok"> 
     <h2>[id:'.$article['id'].'] 
     </br> 
     [title: '.$article['title'].']</h2> 
     </br> 
     [content: '.$article['content'].'] 
     </br> 
     [date: '.$article['date'].'] 
    </div>'; 

    return $content; 
    } 
} 

这是你的意思是它是的方式?无论如何,结果并没有改变..

+0

你验证多少行查询返回? – reikyoushin 2013-04-29 18:39:43

+0

您需要将每个结果联合到'$ content'上 - 每当您运行foreach循环时,您现在都会覆盖它。试试'$ content。= ....'来代替。 – andrewsi 2013-04-29 18:40:38

+3

_But第一次尝试编写一个类和函数.._ ..然后开始避免使用[mysql_ *](http://php.net/manual/en/function.mysql-query.php)函数。 – dbf 2013-04-29 18:41:06

回答

1

这是正确的做法,什么@bwoebi建议:

public function display_content() { 
    $this->article = $this->get_content_articles(); 
    $content = ""; 
    foreach ($this->article as $article) { 

    $content .= '<div class="blok"> 
     <h2>[id:'.$article['id'].'] 
     </br> 
     [title: '.$article['title'].']</h2> 
     </br> 
     [content: '.$article['content'].'] 
     </br> 
     [date: '.$article['date'].'] 
     </div>'; 
    } 
     return $content; 
    } 
+0

谢谢你们!它现在有效! – jediah 2013-04-29 19:33:29

3
$content = '<div class="blok">...'; 

您重新分配变量$content在你的foreach循环的每次迭代的项的值。所以$content将只包含最后一个条目。

使用附加运算符.=

$content .= '<div class="blok">...'; 

编辑:如由@JoseAreas评论说,你应该进入你的循环之前写:

$content = ""; 

避免一些通知。

+0

首先,在循环之前将其定义为空白,以避免警告。 – 2013-04-29 18:44:13

+0

@JoseAreas忘记了,谢谢;添加。 – bwoebi 2013-04-29 18:46:13

+0

我确实将它添加到代码中,但它不会改变结果。 – jediah 2013-04-29 19:06:13