PHP页面静态化学习笔记之五:简易新闻系统v1.1

这是本人根据自己学习PHP技术页面静态化的过程所写的学习笔记,希望能够对大家有所帮助。


1、基本思想

(1)当我们添加或者更新新闻的时候,同步的创建或更新html页面,解决实时性问题,将生成的html文件的路径放在数据库;

(2)设计一个模版文件,通过模版创建静态页面;

(3)以后每次直接访问html静态页面;

2、数据库沿用上面的数据库结构,数据最好清空

3、代码

news_list.php(新闻列表页面)

<?php
    //新闻列表
    //查询数据库,获取信息=>SqlHelper.class.php

    $conn = mysql_connect("localhost", "root", "root");
    if (!$conn) {
        die("连接失败");
    }
    mysql_select_db("static_pages_news", $conn);
    mysql_query("set names utf8");
    
    $sql = "select * from news order by id";
    $res = mysql_query($sql);
    
	header("content-type:text/html;charset=utf-8");
    echo "<h1>新闻列表</h1>";
    echo "<a href='add_news.html'>添加新闻</a><hr/>";
    echo "<table>";
    echo "<tr><td>id</td><td>标题</td><td>查看新闻</td><td>修改新闻</td></tr>";
    while ($row = mysql_fetch_assoc($res)) {
        echo "<tr><td>{$row['id']}</td><td>{$row['title']}</td><td><a href='newsfile/news_id{$row['id']}.html'>查看详情</a></td><td><a href='update_newsui.php?id={$row['id']}'>修改详情</a></td></tr>";
    }
    echo "</table>";
    
    mysql_free_result($res);
    mysql_close($conn);
?>

add_news.html(添加新闻页面)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>添加新闻</title>
	</head>
	<body>
		<form action="newsAction.php" method="post">
			<table>
				<tr>
					<td>新闻标题</td>
					<td><input type="text" name="title" /></td>
				</tr>
				<tr>
					<td>新闻内容</td>
					<td><textarea cols="50" rows="10" name="content"></textarea></td>
				</tr>
				<tr>
					<td><input type="submit" value="添加" /></td>
					<td><input type="reset" value="重新填写" /></td>
					<!--隐藏域-->
					<input type="hidden" name="oper" value="add" />
				</tr>
			</table>
		</form>
		
	</body>
</html>

update_newsui.php(修改新闻页面)

<?php
    //接受要修改的新闻的ID
    $id = $_GET['id'];
    
    //通过id从数据库中获取新闻信息
    $conn = mysql_connect("localhost", "root", "root");
    if (!$conn) {
        die("连接失败");
    }
    mysql_select_db("static_pages_news", $conn);
    mysql_query("set names utf8");
    
    $sql = "select * from news where id = $id";
    $res = mysql_query($sql);
    
    if ($row = mysql_fetch_assoc($res)) {
        echo "<form action='newsAction.php' method='post'>";
        echo "<input type='hidden' name='oper' value='update'/>";
        echo "<input type='text' name='id' value={$row['id']} readonly/><br/>";
        echo "<input type='text' name='title' value={$row['title']} /><br/>";
        echo "<textarea cols='50' rows='10' name='content'>{$row['content']}</textarea><br/>";
        echo "<input type='submit' value='修改'>";
        echo "<input type='reset' value='重置'><br/>";
        echo "<form action='newsAction.php' method='post'>";
    }else {
        echo "您所查看的新闻不存在";
    }
    
?>

newsAction.php(添加、修改新闻请求处理页面)

<?php
    //处理添加、修改、删除新闻请求
    //接收一下操作类型
    $oper = $_REQUEST['oper'];
    //接受title和content
    $title = $_POST['title'];
    $content = $_POST['content'];
    
    //检查存放静态页面的文件夹是否存在,若不存在则创建
    if (!file_exists("./newsfile/")) {
        mkdir("newsfile");
    }
    
    //打开数据库
    $conn = mysql_connect("localhost", "root", "root");
    if (!$conn) {
        die("连接失败");
    }
    mysql_select_db("static_pages_news", $conn);
    mysql_query("set names utf8");
    
    //根据接受的参数来确定操作
    if ($oper == 'add') {
        //把数据放入数据库,同时创建静态页面
        //添加到数据库中
        //开始事务
        mysql_query("BEGIN");
        $sql = "insert into news(title, content) values('$title', '$content')";
        if (mysql_query($sql)) {
            //获取刚刚插入数据的ID号
            $id = mysql_insert_id();
            //构建文件名
            $html_filename = "newsfile/news_id". $id .".html";
            //创建HTML文件
            createHTML($html_filename, $title, $content);
            //将静态页面的路径放入数据库
            $sql = "update news set filename='$html_filename' where id = '$id'";
            if (mysql_query($sql)) {
                //事务提交
                mysql_query("COMMIT");
                echo "添加到数据库并成功创建html文件<a href='news_list.php'>返回列表</a>";
            }else { 
                //事务回滚
                mysql_query("ROLLBACK");
            }
            header("Location:news_list.php");
        }else {
            //事务回滚
            mysql_query("ROLLBACK");
        }
    }else if ($oper == 'update') {
        //接收修改的id
        $id = $_POST['id'];
        //开始事务
        mysql_query("BEGIN");
        $sql = "update news set title='$title', content='$content' where id=$id";
        if (mysql_query($sql)) {
            //修改数据库成功
            $html_filename = "newsfile/news_id". $id .".html";
            unlink($html_filename);
            //创建HTML文件
            createHTML($html_filename, $title, $content);
            //事务提交
            mysql_query("COMMIT");
            echo "更新到数据库并重新创建html文件<a href='news_list.php'>返回列表</a>";
        }
    }
    //关闭数据库
    mysql_close($conn);

/**
 * 替换函数
 */
function replace($row, $title, $content) {
    $row = str_replace("%title%", $title, $row);
    $row = str_replace("%content%", $content, $row);
    return $row;
}

/**
 * 创建HTML文件
 */
function createHTML($file, $title, $content) {
    //创建HTML文件
    $fp_tmp = fopen("template.tpl", "r");
    $fp_html_file = fopen($file, "w");
    //逐行读取模版,替换内容,写入静态页面
    while (!feof($fp_tmp)) {
        $row = fgets($fp_tmp);
        //替换内容
        $new_row = replace($row, $title, $content);
        //把替换后的内容写进静态页面
        fputs($fp_html_file, $new_row);
    }
    //关闭文件
    fclose($fp_tmp);
    fclose($fp_html_file);
}
?>

template.tpl(新闻展示页面的模版)

<!-- 这是一个模版文件,根据你希望显示的样式来设计 -->
<html>
<head>
<!--%title%是一个占位符-->
<title>%title%</title>
<meta http-equiv='Cache-Control' content='no-cache'/>
<meta http-equiv='Expires' content='-1'/>
<meta http-equiv='Pragma' content='no-cache'/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>%title%</h1>
<hr />
<pre>%content%</pre>
<pre><a href='../news_list.php'>返回列表</a></pre>
</body>
</html>


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值