Codeigniter从数据库制作列表

弗兰克·赖特

我最近一直在尝试使用CodeIgniter 3,但在显示数据库中的数据时遇到了一些麻烦。通常我会执行以下功能:

function listOfPlayers($game, $uid) {
    $q = "SELECT * FROM users WHERE game='$game' ORDER BY id ASC";
    $result = $this->connection->query($q);
    $count = $result->num_rows;
    $i = 1;
    while($obj = $result->fetch_object()) {
    $id = $obj->id;
    $name = htmlspecialchars($obj->name);
    if ($uid == $id) {
    } else {
        echo 
        "<tr>
            <td><a href = \"#\">".$name."</a></td>
        </tr>";

        if($i != $count) {

        }
        $i++;
        }
    }
}

并直接在我的“视图”中调用它。但是现在由于MVC系统,我对如何使用CI感到困惑,因为这是我第一次使用MVC系统,所以不要对我苛刻:P

先感谢您!

Unixmiah

您的代码看起来还不错,但是您应该遵循MVC来操作数据。您应该如何真正拥有它是这样的,这是一个CI 3示例:

设置模型

应该将查询放置在模型中,而不是直接在控制器中编写数据库操作,以便以后可以轻松重用它们。模型是在数据库或其他数据存储中检索,插入和更新信息的地方。它们代表您的数据。

打开application/models目录并创建一个名为News_model.php的新文件,并添加以下代码。确保已按照此处所述正确配置数据库。

<?php
class News_model extends CI_Model {

        public function __construct()
        {
                $this->load->database();
        }
}

该代码看起来与之前使用的控制器代码相似。它通过扩展CI_Model来创建新模型并加载数据库库。这将通过$ this-> db对象使数据库类可用。

在查询数据库之前,必须创建数据库架构。连接到数据库并运行下面的SQL命令。还添加一些种子记录。

CREATE TABLE news (
        id int(11) NOT NULL AUTO_INCREMENT,
        title varchar(128) NOT NULL,
        slug varchar(128) NOT NULL,
        text text NOT NULL,
        PRIMARY KEY (id),
        KEY slug (slug)
);

现在已经建立了数据库和模型,您将需要一种方法来从数据库中获取我们所有的帖子。为此,使用了CodeIgniter随附的数据库抽象层(活动记录)。这样就可以一次编写“查询”,并使它们在所有受支持的数据库系统上工作。将以下代码添加到模型中。

public function get_news($slug = FALSE)
{
        if ($slug === FALSE)
        {
                $query = $this->db->get('news');
                return $query->result_array();
        }

        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
}

使用此代码,您可以执行两个不同的查询。您可以获取所有新闻记录,也可以按其条目获取新闻。您可能已经注意到$ slug变量在运行查询之前没有被清除。查询构建器会为您执行此操作。显示新闻

现在已经编写了查询,应该将模型绑定到将向用户显示新闻项目的视图。这可以在我们之前创建的页面控制器中完成,但是为了清楚起见,定义了一个新的“新闻”控制器。在application / controllers / News.php中创建新的控制器。

<?php
class News extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                $this->load->model('news_model');
        }

        public function index()
        {
                $data['news'] = $this->news_model->get_news();
        }

        public function view($slug = NULL)
        {
                $data['news_item'] = $this->news_model->get_news($slug);
        }
}

查看代码,您可能会发现与我们之前创建的文件有些相似。首先,__construct()方法:它调用其父类(CI_Controller)的构造函数并加载模型,因此可以在此控制器中的所有其他方法中使用它。

接下来,有两种方法可以查看所有新闻,一种是查看特定新闻。您可以看到$ slug变量在第二种方法中传递给了模型的方法。该模型正在使用此块来标识要返回的新闻项。

现在,控制器通过我们的模型检索了数据,但是什么都没有显示。接下来要做的就是将这些数据传递给视图。

public function index()
{
        $data['news'] = $this->news_model->get_news();
        $data['title'] = 'News archive';

        $this->load->view('templates/header', $data);
        $this->load->view('news/index', $data);
        $this->load->view('templates/footer');
}

上面的代码从模型中获取所有新闻记录,并将其分配给变量。标题的值也分配给$ data ['title']元素,所有数据都传递给视图。现在,您需要创建一个视图以呈现新闻项。创建application / views / news / index.php并添加下一段代码。

<h2><?php echo $title ?></h2>

<?php foreach ($news as $news_item): ?>

        <h3><?php echo $news_item['title'] ?></h3>
        <div class="main">
                <?php echo $news_item['text'] ?>
        </div>
        <p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p>

<?php endforeach ?>

在这里,每个新闻项目都循环播放并显示给用户。您可以看到我们用PHP和HTML混合编写了模板。如果您喜欢使用模板语言,则可以使用CodeIgniter的Template Parser类或第三方解析器。

现在已完成新闻概述页面,但是仍然缺少用于显示各个新闻项目的页面。先前创建的模型的制作方式很容易将其用于此功能。您只需要向控制器添加一些代码并创建一个新视图。返回新闻控制器,并使用以下命令更新view():

public function view($slug = NULL)
{
        $data['news_item'] = $this->news_model->get_news($slug);

        if (empty($data['news_item']))
        {
                show_404();
        }

        $data['title'] = $data['news_item']['title'];

        $this->load->view('templates/header', $data);
        $this->load->view('news/view', $data);
        $this->load->view('templates/footer');
}

传递$ slug变量而不是调用不带参数的get_news()方法,这样它将返回特定的新闻项。剩下要做的就是在application / views / news / view.php中创建相应的视图。将以下代码放入此文件。

<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];

路由

由于之前创建了通配符路由规则,因此您需要一条额外的路由来查看您刚创建的控制器。修改您的路由文件(application / config / routes.php),如下所示。这样可以确保请求到达新闻控制器,而不是直接到达页面控制器。第一行将带有条的URI路由到新闻控制器中的view方法。

$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

将浏览器指向文档根目录,然后指向index.php / news并观看新闻页面。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Codeigniter更新数据库记录列表

来自分类Dev

CodeIgniter-来自数据库的动态依赖下拉列表

来自分类Dev

在Codeigniter中使用数据库创建下拉列表

来自分类Dev

Codeigniter - 在表/列表中显示数据库记录

来自分类Dev

CodeIgniter更新数据库

来自分类Dev

Codeigniter数据库错误

来自分类Dev

Codeigniter 数据库配置

来自分类Dev

如何使用数据库值制作动态json列表/数组

来自分类Dev

使用Codeigniter将数据从数据库检索到下拉列表

来自分类Dev

如何从Codeigniter中的多个选择下拉列表中将数据插入数据库?

来自分类Dev

通过ajax在codeigniter中将数据库数据显示为列表

来自分类Dev

Codeigniter / JS:从数据库获取数据

来自分类Dev

CodeIgniter:无法从数据库获取数据

来自分类Dev

跟踪列表数据库

来自分类Dev

如何在codeigniter中显示数据库表名称列表

来自分类Dev

如何在codeigniter中显示数据库表名称列表

来自分类Dev

获取 codeigniter 中所有数据库查询的列表(在 ajax 请求中)

来自分类Dev

Codeigniter显示数据库查询结果

来自分类Dev

使用CodeIgniter从数据库返回String

来自分类Dev

将Firebird数据库与Codeigniter连接

来自分类Dev

CodeIgniter数据库会话错误

来自分类Dev

Codeigniter中的数据库错误1054

来自分类Dev

在CodeIgniter中显示数据库记录

来自分类Dev

Codeigniter中的数据库错误1146

来自分类Dev

Codeigniter远程数据库连接问题

来自分类Dev

Codeigniter MySql数据库连接问题

来自分类Dev

CodeIgniter检查数据库是否错误

来自分类Dev

Codeigniter多维数组插入数据库

来自分类Dev

REST应用+ Codeigniter +数据库