你的账单实际上是在正确的轨道上。今天几乎所有的网络软件都进行了大量的 URL 处理。传统上,您的 Web 根目录上有 php 页面,然后利用 URL 中的查询字符串来优化页面的输出。您已经了解了为什么不希望这样做。所以流行的替代方案是Front Controller 设计模式。基本上,我们将每个请求集中到您的 index.php 页面,然后将请求路由到 Web 根目录之外的内部页面或应用程序。这会很快变得复杂,而且似乎每个人都以独特的方式实现这种模式。
我们可以在没有路由的情况下使用这种模式,只需将我们的应用程序放在索引页面中即可。下面的脚本显示了您尝试以最简单的方式执行的操作的示例。我们的脚本基本上只有一页。我们可以通过更改 url 中的 id 查询字符串来请求虚拟页面。例如 www.demo.net/?id=0 可以用作您网站的索引。这应该与没有“id”查询的 www.demo.net 相同。即使你不知道问题是什么,也要继续一一解决这些问题。一旦您开始查看其他人的代码,您就可以开始查看其他人如何解决您遇到的相同问题。
下面的解决方案可以帮助您入门,但是当您需要管理页面时该怎么办?你如何验证用户?您是否为另一个页面重复了很多代码?如果你认真对待你的 CMS,那么你会想要在它下面实现某种框架。一个框架,用于处理 url、路由到您的应用程序、加载配置文件并可能管理您的数据库连接。是的,它会变得复杂,但如果你一次解决一个问题,那就不会了。利用类或函数来共享代码以开始。至少在页面顶部包含一个通用的“引导程序”文件来初始化通用功能,例如数据库连接。阅读堆栈溢出只是为了跟上正在发生的事情。您可以学习很多术语,并且可能会找到一些您甚至不知道自己想问的问题的答案。
下面假设我们有一个包含以下字段的表:
- page_id
- page_name
- page_title
- page_body
<?php
//<--------Move outside of web root-------------->
define('DB_HOST', 'localhost');
define('DB_USER', 'cms');
define('DB_PASS', 'changeme');
define('DB_DB', 'cms');
define('DB_TABLE', 'cms_pages');
//<---------------------------------------------->
//Display errors for development testing
ini_set('display_errors','On');
//Get the requested page id
if(isset($_GET['id']))
{
$id = $_GET['id'];
}
else
{
//Make page id '0' an index page to catch all
$id = 0;
}
//Establish a connection to MySQL
$conn = mysql_connect(DB_HOST,DB_USER,DB_PASS) or die(mysql_error());
//Select the database we will be querying
mysql_select_db(DB_DB, $conn) or die(mysql_error());
//Lets just grab the whole table
$sql = "SELECT * FROM ".DB_TABLE;
$resultset = mysql_query($sql, $conn) or die(mysql_error());
//The Select Query succeeded, but returned 0 result.
if (mysql_num_rows($resultset)==0)
{
echo "<pre>Add some Pages to my CMS</pre>";
exit;
}
//This is our target array we need to fill with arrays of pages
$result = array();
//Convert result into an array of associative arrays
while($row = mysql_fetch_assoc($resultset))
{
$result[] = $row;
}
//We now have all the information needed to build our app
//Page name - Short name for buttons, etc.
$name = "";
//Page title - The page content title
$title = "";
//Page body - The content you have stored in a table
$body = "";
//Page navigation - Array of formatted links
$nav = array();
//Process all pages in one pass
foreach($result as $row)
{
//Logic to match the requested page id
if($row['page_id'] == $id)
{
//Requested Page
$name = $row['page_name'];
$title = $row['page_title'];
$body = $row['page_body'];
$page = "<b>$name</b>";
}
else
{
//Not the requested page
$page = $row['page_name'];
}
//Build the navigation array preformatted with list items
$url = "./?id=" . $row['page_id'];
$nav[] = "<li><a href=\"$url\">$page</a></li>";
}
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>SimpleCMS | <?php echo $title; ?></title>
</head>
<body>
<div>
<div id="navigation" style="float:left;">
<ul>
<?php
foreach($nav as $item)
{
echo $item;
}
?>
</ul>
</div>
<div id="content"><?php echo $body;?></div>
</div>
</body>
</html>