<?php
// index.php
$link = mysql_connect('localhost', 'dbuser', 'dbpassword');
mysql_select_db('blog', $link);
$result = mysql_query('SELECT id, title FROM post', $link);
?>
<!DOCTYPE html>
<html>
<head>
<title>文章列表</title>
</head>
<body>
<h1>文章列表</h1>
<ul>
<?php while ($row = mysql_fetch_assoc($result)): ?>
<li>
<a href="/show.php?id=<?php echo $row['id'] ?>">
<?php echo $row['title'] ?>
</a>
</li>
<?php endwhile; ?>
</ul>
</body>
</html>
<?php
mysql_close($link);
?>
以上代码建议使用mysqli或者pdo方法。
这样一个页面将所有的操作做完,但是维护起来很麻烦,尤其是扩展性十分低。
<?php
// index.php
$link = mysql_connect('localhost', 'dbuser', 'dbpassword');
mysql_select_db('blog', $link);
$result = mysql_query('SELECT id, title FROM post', $link);
$posts = array();
while ($row = mysql_fetch_assoc($result)) {
$posts[] = $row;
}
mysql_close($link);
// 包含HTML的代码
require 'templates/list.php';
下面是单独的html显示界面,文件里嵌套模板风格的php代码:
<!--templates/list.php-->
<html>
<head>
<title>文章列表</title>
</head>
<body>
<h1>文章列表</h1>
<ul>
<?php foreach ($posts as $post): ?>
<li>
<a href="/read?id=<?php echo $post['id'] ?>">
<?php echo $post['title'] ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
从应用程序中将核心行为和数据访问功能分离出来放入新的model.php文件中。
<?php
// model.php
function open_database_connection()
{
$link = mysql_connect('localhost', 'dbuser', 'dbpassword');
mysql_select_db('blog', $link);
return $link;
}
function close_database_connection($link)
{
mysql_close($link);
}
function get_all_posts()
{
$link = open_database_connection();
$result = mysql_query('SELECT id, title FROM post', $link);
$posts = array();
while ($row = mysql_fetch_assoc($result)) {
$posts[] = $row;
}
close_database_connection($link);
return $posts;
}
现在我们的index.php就是一个控制器,她变成了这个样子:
//index.php
<?php
require_once 'model.php';
$posts = get_all_posts();
require 'templates/list.php';
现在控制器的作用仅仅是从model(model.php)层中得到数据,然后调用一个模板来呈现这些数据。一个最简单的MVC诞生了。