0117(春节大作业)PHP动态化蜂鸟网(部分)
目录结构
- css 单独css
- inc 初始化文件
- public 公共资源
- static 图片等杂七杂八的
view 模板
数据表结构
数据库就不到导出了inc文件内容(conn.php数据库连接,MySQL.php(基于PDO简单封装了操作))
首先我继承了PDO封装了一下,这样子用起来可以简单一点嘛
//继承PDO自己封装一个简简单单的数据库操作类
class Mysql extends PDO
{
private $dsn = 'mysql:host=localhost;dbname=';
private $username;
private $password;
private $conn;
//来一手构造方法实例化类的时候就连接数据库;
public function __construct($dbn, $username = 'root', $password = 'root')
{
$this->dsn .= $dbn . ';';
$this->username = $username;
$this->password = $password;
$this->conn = PDO::__construct($this->dsn, $username, $password);
//搞定数据库编码为utf8;
parent::exec('set names utf8');
}
//执行一条select查询语句
/**
* @param string $sql 待执行的SQL语句
* @param string $fetch_style 以那种数据形式返回 FETCH_ASSOC 或者 FETCH_NUM 另一种反正我不用 FETCH_BOTH
* @param array
*/
public function aQuery($sql, $fetch_style = PDO::FETCH_ASSOC)
{
try {
//query发送一条sql语句
$stmt = $this->query($sql);
//全部取出数据数据格式为fetch_style
return $stmt->fetchAll($fetch_style);
//出错了就报错么!
} catch (Throwable $th) {
die($th->getMessage());
}
}
/**
* 执行带有绑定参数的SQL语句
*
* @param string $sql 要执行的SQL语句
* @param array $array 绑定的参数
* @param string $fetch_style 以哪种形式返回数据 PDO::FETCH_ASSOC PDO::FETCH_NUM PDO::FETCH_BOTH 等
* @return array or bool
*/
public function moreExec($sql, $array = array(), $fetch_style = PDO::FETCH_ASSOC)
{
try {
//先拟定一个查询对象
$stmt = $this->prepare($sql);
//然后嘛将数组里面的键名和键值绑定起来
if (count($array) > 0) {
foreach ($array as $k => $v) {
$stmt->bindValue($k, $v);
}
}
//接下来就搞一手执行查询的给你们看看
//如果SQL语句是查询语句
if (substr(trim($sql), 0, 6) === 'select') {
//执行SQL语句execute
$stmt->execute();
return $stmt->fetchAll($fetch_style);
}
//如果是update
//如果是delete
//如果是insert
} catch (Throwable $th) {
die($th->getMessage());
}
}
//关闭数据库链接
public function __destruct()
{
unset($this->conn);
}
}
然后整了一个初始化的文件解决一下路径问题编码问题等
//引入数据库操作类
//设定字符集
header("Content-Type:text/html;charset=utf-8");
//设置时区
date_default_timezone_set('PRC');
//实例化对象
//传入参数,数据库名,用户名,密码
define('ROOT' ,dirname( __DIR__));
require ROOT.'/inc/Mysql.php';
$conn = new Mysql('fnw','root','root');
//秘技 三维变二维
function ttt($array){
foreach($array as $value){
foreach($value as $er){
$cc[] = $er;
}
}
return $cc;
}
//秘技二维变一维
function tto($array){
foreach($array as $value){
$cc = $value;
}
return $cc;
}
接下来是我做的两个页面的控制器
INDEX.php首页控制器
//引入初始化文件
require './inc/conn.php';
//开始获取首页数据
$sql = 'select name,url from fn_header';
$header = $conn->aQuery($sql);
//新闻处三张图
$sql = 'select temp,id,title from fn_article where isimg = 1 order by createtime desc limit 2';
$news_isimg = $conn->aQuery($sql);
$sql = 'select temp,id,title from fn_article where isbanner = 1 order by createtime desc limit 1';
$news_isbanner = $conn->aQuery($sql);
//新闻数据获取
$sql = 'select name,cateid from fn_cate where cateid = :cateid or cateid = :cateid2';
//获取类型数据
$newscate = $conn->moreExec($sql,['cateid'=>0,'cateid2'=>1]);
//获取新闻类型数据分类为 0 ,1各9条
$sql = 'select title,ishot,temp,cateid,id from fn_article where cateid = :nowcate order by createtime desc limit 9';
$news[] = $conn->moreExec($sql,['nowcate'=>0]);
$news[] = $conn->moreExec($sql,['nowcate'=>1]);
//获取一下图片美女的类型分类
$sql = 'select name,cateid from fn_cate where cateid in(:cateid1,:cateid2,:cateid3)';
$img_cate = $conn->moreExec($sql,['cateid1'=>2,'cateid2'=>3,'cateid3'=>4]);
$sql = 'select title,temp,cateid from fn_img_article where cateid = :nowcate order by createtime desc limit 4';
$imgs[] = $conn->moreExec($sql,['nowcate'=>2]);
$imgs[] = $conn->moreExec($sql,['nowcate'=>3]);
$imgs[] = $conn->moreExec($sql,['nowcate'=>4]);
// var_dump($img_cate);
// 秘技 三维数组转二维数组
$imginfos = ttt($imgs);
//二手分类
$sql = 'select * from fn_mn_article order by createtime desc limit 8';
$twocate = $conn->aQuery($sql);
//二手列表
$sql = 'select title,temp,tip,price from fn_mn_article order by createtime desc limit 8';
$twoarticle = $conn->aQuery($sql);
//输出合作伙伴
$sql = 'select name,url from fn_link';
$links = $conn->aQuery($sql);
include ROOT . '/view/index.html';
news_detail.php新闻页控制器
//先判断一下是不是get请求
if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') === 'GET') {
//判断一下有没有传一个叫newsid的值过来
if (filter_has_var(INPUT_GET, 'newsid')) {
//过滤一下其他字符,限定一下必须是整数
$newsid = filter_var(filter_input(INPUT_GET, 'newsid', FILTER_SANITIZE_NUMBER_INT), FILTER_VALIDATE_INT);
//如果都OK的话开始引入我们的初始化文件
require './inc/conn.php';
//开始写SQL获取数据
//这边使用传值的过滤的写法(学姐说不能相信用户传的任何值)
$sql = 'select title,content,author from fn_article where id = :id';
$data = $conn->moreExec($sql, ['id' => $newsid]);
//因为data是二维数组没必要秘技二维变一维;
if (empty($data)) {
//假设有憨憨瞎输直接给他跳回去
header("Location:/index.php");
exit();
}
$info = tto($data);
// echo $info['title'];
$sql = 'select name,url from fn_header';
$header = $conn->aQuery($sql);
//然后都木得问题了就引入模板
include ROOT . '/view/article_detail.html';
}
}
首页模板index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 当前文档要用到阿里字体图标-->
<link rel="stylesheet" href="css/index.css">
<link rel="stylesheet" href="static/font/iconfont.css">
<title>全站首页</title>
</head>
<body>
<!--公共页眉-->
<nav class="public-header">
<?php foreach($header as $v):?>
<a href="<?php echo $v['url']?>"><?php echo $v['name']?></a>
<?php endforeach?>
<span>
<a href=""><i class="iconfont icon-huiyuan2"></i>登陆</a>
<a href="">免费注册</a>
</span>
</nav>
<!--主体全部放在main元素中-->
<main>
<!-- 首页头部导航与轮播-->
<div class="index-header">
<div class="content">
<!--logo与搜索框,快速入口-->
<div class="log-search">
<a href="" class="logo"><img src="../static/images/logo.png" alt=""></a>
<div class="search">
<input type="search" name="search" id="search">
<label for="search" class="iconfont icon-jinduchaxun"></label>
</div>
<div class="quick-entry">
<a href="" class="iconfont icon-huiyuan1"></a>
<a href="" class="iconfont icon-danmu1"></a>
<a href="" class="iconfont icon-fabu"></a>
<a href="" class="iconfont icon-fangda"></a>
<a href="" class="iconfont icon-huiyuan2"></a>
<a href="" class="iconfont icon-dianzan"></a>
</div>
</div>
<!--主导航-->
<div class="main-nav">
<!--导航详情1-->
<div class="nav-detail">
<!--左侧图标与描述-->
<div class="pic">
<span class="iconfont icon-gongdan"></span>
<div>
<span>资讯</span>
<span>学习</span>
</div>
</div>
<!--右侧导航链接-->
<div class="links">
<a href="">器材</a>
<a href="">大师</a>
<a href="">学院</a>
<a href="">实战</a>
<a href="">大赛</a>
<a href="">裤子</a>
<a href="">影视</a>
<a href="">其它</a>
</div>
</div>
<!--导航详情2-->
<div class="nav-detail">
<!--左侧图标与描述-->
<div class="pic">
<span class="iconfont icon-renwujincheng"></span>
<div>
<span>爱好</span>
<span>姐妹</span>
</div>
</div>
<!--右侧导航链接-->
<div class="links">
<a href="">有品</a>
<a href="">图片</a>
<a href="">喝水</a>
<a href="">飞机</a>
<a href="">坦克</a>
<a href="">气球</a>
<a href="">毛线</a>
<a href="">其它</a>
</div>
</div>
<!--导航详情3-->
<div class="nav-detail">
<!--左侧图标与描述-->
<div class="pic">
<span class="iconfont icon-gongdan"></span>
<div>
<span>软件</span>
<span>技能</span>
</div>
</div>
<!--右侧导航链接-->
<div class="links">
<a href="">学习</a>
<a href="">爱国</a>
<a href="">敬业</a>
<a href="">友善</a>
<a href="">富强</a>
<a href="">互助</a>
<a href="">仁义</a>
<a href="">其它</a>
</div>
</div>
<!--导航详情4-->
<div class="nav-detail">
<!--左侧图标与描述-->
<div class="pic">
<span class="iconfont icon-DOC"></span>
<div>
<span>编程</span>
<span>美女</span>
</div>
</div>
<!--右侧导航链接-->
<div class="links">
<a href="">吃饭</a>
<a href="">周易</a>
<a href="">黄山</a>
<a href="">合肥</a>
<a href="">上海</a>
<a href="">杭州</a>
<a href="">北京</a>
<a href="">其它</a>
</div>
</div>
</div>
<!--轮播图-->
<div class="slider">
<a href=""><img src="../static/images/2.jpg" alt=""></a>
<a href=""><img src="../static/images/banner-right.jpg" alt=""></a>
</div>
</div>
</div>
<!-- 新闻资讯-->
<!--引入大标题组件-->
<div class="public-headline">
<span>新闻资讯</span>
</div>
<div class="index-news">
<!-- 左侧图片列表-->
<div class="imgs">
<a href=""><img src="<?php echo $news_isbanner[0]['temp'];?>" alt="" class="first-img"></a>
<?php foreach($news_isimg as $v):?>
<div>
<a href=""><img src="<?php echo $v['temp']?>" alt=""></a>
<a href=""><?php echo $v['title']?></a>
</div>
<?php endforeach?>
</div>
<!-- 中间与右边信息列表共用样式-->
<?php foreach($newscate as $v):?>
<div class="list">
<?php foreach($news[$v['cateid']] as $hot):?>
<?php if($hot['ishot'] === '1'):?>
<a href=""><?php echo $hot['title']?></a>
<?php endif?>
<?php endforeach?>
<ul>
<?php foreach($news[$v['cateid']] as $info):?>
<li><span>[<?php echo $v['cateid']==0?'新闻':'促销'?>]</span><a
href="news_detail.php?newsid=<?php echo $info['id']?>"><?php echo $info['title']?></a></li>
<?php endforeach?>
</ul>
</div>
<?php endforeach?>
</div>
<!--引入大标题组件-->
<div class="public-headline">
<span>图片专区</span>
</div>
<!-- 图文列表专区-->
<div class="public-image-list">
<?php foreach($img_cate as $v):?>
<div class="list">
<div class="title">
<a href=""><?php echo $v['name']?></a>
<span>纵观摄影艺术</span>
</div>
<div class="img-list">
<?php foreach($imginfos as $info):?>
<?php if($info['cateid'] === $v['cateid']):?>
<div>
<a href=""><img src="<?php echo $info['temp']?>" alt=""></a>
<a href=""><?php echo $info['title']?></a>
</div>
<?php endif?>
<?php endforeach?>
</div>
</div>
<?php endforeach?>
</div>
<!-- 二手交易专区-->
<!--引入大标题组件-->
<div class="public-headline">
<span>二手交易</span>
</div>
<!--二手交易专区-->
<div class="public-second-hand">
<!-- 标题1-->
<div class="title1">
<a href="">抢好货</a>
<span>0低价, 便捷,安全,快速</span>
</div>
<!-- 标题2-->
<div class="title2">
<span>热门分类</span>
<?php foreach($twocate as $v):?>
<a href=""><?php echo $v['name']?></a>
<?php endforeach?>
</div>
<!--商品展示区-->
<div class="goods">
<!--左侧商品列表-->
<div class="goods-list">
<!-- 商品简介-->
<?php foreach($twoarticle as $v):?>
<div class="intro">
<a href=""><img src="<?php echo $v['temp']?>" alt="" width="176" height="120"></a>
<a href=""><?php echo $v['title']?></a>
<div>
<span>¥ <?php echo $v['price']?></span>
<span><?php echo $v['tip']?></span>
</div>
</div>
<?php endforeach?>
<!-- <div class="intro">
<a href=""><img src="../static/images/shop/shop2.jpg" alt="" width="176" height="120"></a>
<a href="">美女性感写真海报墙艺术装饰画贴画图2</a>
<div>
<span>¥ 678</span>
<span>素人</span>
</div>
</div> -->
</div>
<!--右侧功能快速入口-->
<div class="quick-entry">
<a href=""><img src="../static/images/ad/1.png" alt=""></a>
<a href=""><img src="../static/images/ad/2.png" alt=""></a>
<a href=""><img src="../static/images/ad/3.png" alt=""></a>
<a href=""><img src="../static/images/ad/4.png" alt=""></a>
<div>
<a href=""><img src="../static/images/ad/image.png" alt=""></a>
<a href=""><img src="../static/images/ad/ad2.jpg" alt=""></a>
</div>
</div>
</div>
</div>
<!-- 大标题-->
<div class="public-headline">
<span>合作单位</span>
</div>
<!-- 合作友情链接-->
<div class="index-frend-links">
<?php foreach ($links as $k => $v) : ?>
<a href="<?php echo $v['url'] ?>"><?php echo $v['name'] ?></a>
<?php endforeach ?>
</div>
</main>
<!--公共页脚-->
<footer class="public-footer">
<div>
<a href="">简介</a>
<a href="">联系我们</a>
<a href="">招聘信息</a>
<a href="">友情链接</a>
<a href="">用户服务协议</a>
<a href="">隐私权声明</a>
<a href="">法律投诉声明</a>
</div>
<div><span>LOGO</span></div>
<div>
<p>2019 fengniao.com. All rights reserved . 安徽闹着玩有限公司(无聊网)版权所有</p>
<p>皖ICP证150110号 京ICP备14323013号-2 皖公网安备110108024357788号</p>
<p>违法和不良信息举报电话: 0551-1234567 举报邮箱: admin@baidu.com</p>
</div>
<div>
<p>关注公众号</p>
<img src="../static/images/erwei-code.png" alt="">
</div>
</footer>
</body>
</html>
详情页模板news_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 当前文档要用到阿里字体图标-->
<link rel="stylesheet" href="/static/font/iconfont.css">
<link rel="stylesheet" href="css/article_detail.css">
<title>文章系统详情页</title>
</head>
<body>
<!--公共页眉-->
<nav class="public-header">
<?php foreach($header as $v):?>
<a href="<?php echo $v['url']?>"><?php echo $v['name']?></a>
<?php endforeach?>
<span>
<a href=""><i class="iconfont icon-huiyuan2"></i>登陆</a>
<a href="">免费注册</a>
</span>
</nav>
<!--文章系统公共头部-->
<div class="article-header">
<div class="content">
<img src="../static/images/ar-logo.png" alt="">
<a href="">新闻</a>><span>正文</span>
<div class="search">
<input type="search" id="search" placeholder="搜索关键字">
<label class="iconfont icon-sousuo2" for="search"></label>
</div>
</div>
</div>
<!--将列表与评论放在一个main元素中-->
<main>
<!--公共评论列表-->
<div class="public-comment-list">
<h3>最新评论</h3>
<ul>
<li><a href="">4K单反王佳能EOS90D,新一代单反神器</a></li>
<li><a href="">或本周亮相, 尼康Z6/Z7即将迎来新固件</a></li>
<li><a href="">逃避都市光污染,震撼的8K延时寻找最美银河</a></li>
<li><a href="">自拍榜第一超广角自拍华为nova6 5G热卖中</a></li>
<li><a href="">微软公布新XBOX/国行Switch销量火爆</a></li>
<li><a href="">爱琴海上的璀璨明珠 丰满迷人的泳装身姿</a></li>
<li><a href="">律动的城市乐章2020城市摄影大赛</a></li>
<li><a href="">价值百万摄影机,却只是星球大战纪念品</a></li>
<li><a href="">有温度的课程,得到的不只是专业!</a></li>
<li><a href="">终于来了,索尼α7sIII首张外观谍照曝光</a></li>
</ul>
</div>
<!--文章系统内容详情-->
<div class="article_detail">
<h1><?php echo $info['title']?></h1>
<div>
<span>发布时间:2019年12月16日</span>
<span>来源: 环球时报</span>
<span>阅读量:12545</span>
<span>评论数:145</span>
</div>
<div>
<?php echo $info['content']?>
</div>
</div>
<!--点赞-->
<div class="article-detail-like">
<span>赞</span>
<span>踩</span>
</div>
<!--公共评论与回复-->
<div class="public-comment-reply">
<!-- 评论区-->
<div class="comment">
<h3>我要评论</h3>
<div>
<label for="comment"><img src="../static/images/user.png" alt=""></label>
<textarea name="" id="comment"></textarea>
</div>
<button>发表评论</button>
</div>
<!-- 回复区-->
<div class="reply">
<h3>最新回复</h3>
<div>
<img src="../static/images/user.png" alt="">
<div class="detail">
<span>用户昵称</span>
<span>留言内容: php中文网,是一个有温度,有思想的学习平台</span>
<div>
<span>2019-12-12 15:34:23发表</span>
<span><i class="iconfont icon-dianzan"></i>回复</span>
</div>
</div>
</div>
<div>
<img src="../static/images/user.png" alt="">
<div class="detail">
<span>用户昵称</span>
<span>留言内容: php中文网,是一个有温度,有思想的学习平台</span>
<div>
<span>2019-12-12 15:34:23发表</span>
<span><i class="iconfont icon-dianzan"></i>回复</span>
</div>
</div>
</div>
<div>
<img src="../static/images/user.png" alt="">
<div class="detail">
<span>用户昵称</span>
<span>留言内容: php中文网,是一个有温度,有思想的学习平台</span>
<div>
<span>2019-12-12 15:34:23发表</span>
<span><i class="iconfont icon-dianzan"></i>回复</span>
</div>
</div>
</div>
<div>
<img src="../static/images/user.png" alt="">
<div class="detail">
<span>用户昵称</span>
<span>留言内容: php中文网,是一个有温度,有思想的学习平台</span>
<div>
<span>2019-12-12 15:34:23发表</span>
<span><i class="iconfont icon-dianzan"></i>回复</span>
</div>
</div>
</div>
</div>
</div>
<!--文章系统公共推荐图文列表-->
<div class="article-public-recommend">
<h3>推荐阅读</h3>
<div class="img-list">
<div>
<a href=""><img src="../static/images/img1.jpg" alt=""></a>
<a href="">惠若琪 |坚持热爱,活成一束光,照亮自己,成就更好的他</a>
</div>
<div>
<a href=""><img src="../static/images/img2.jpg" alt=""></a>
<a href="">惠若琪 |坚持热爱,活成一束光,照亮自己,成就更好的他</a>
</div>
<div>
<a href=""><img src="../static/images/img3.jpg" alt=""></a>
<a href="">惠若琪 |坚持热爱,活成一束光,照亮自己,成就更好的他</a>
</div>
<div>
<a href=""><img src="../static/images/img4.jpg" alt=""></a>
<a href="">惠若琪 |坚持热爱,活成一束光,照亮自己,成就更好的他</a>
</div>
<div>
<a href=""><img src="../static/images/img5.jpg" alt=""></a>
<a href="">惠若琪 |坚持热爱,活成一束光,照亮自己,成就更好的他</a>
</div>
<div>
<a href=""><img src="../static/images/img6.jpg" alt=""></a>
<a href="">惠若琪 |坚持热爱,活成一束光,照亮自己,成就更好的他</a>
</div>
<div>
<a href=""><img src="../static/images/img7.jpg" alt=""></a>
<a href="">惠若琪 |坚持热爱,活成一束光,照亮自己,成就更好的他</a>
</div>
<div>
<a href=""><img src="../static/images/img8.jpg" alt=""></a>
<a href="">惠若琪 |坚持热爱,活成一束光,照亮自己,成就更好的他</a>
</div>
</div>
</div>
</main>
<!--公共页脚-->
<footer class="public-footer">
<div>
<a href="">简介</a>
<a href="">联系我们</a>
<a href="">招聘信息</a>
<a href="">友情链接</a>
<a href="">用户服务协议</a>
<a href="">隐私权声明</a>
<a href="">法律投诉声明</a>
</div>
<div><span>LOGO</span></div>
<div>
<p>2019 fengniao.com. All rights reserved . 安徽闹着玩有限公司(无聊网)版权所有</p>
<p>皖ICP证150110号 京ICP备14323013号-2 皖公网安备110108024357788号</p>
<p>违法和不良信息举报电话: 0551-1234567 举报邮箱: admin@baidu.com</p>
</div>
<div>
<p>关注公众号</p>
<img src="../static/images/erwei-code.png" alt="">
</div>
</footer>
</body>
</html>
效果图
动态化的部分为新闻咨询,图片专区,二手交易,合作单位这四处部分,这不是我的第一个版本作业,我有一个做了8页面,但是觉得写法欠佳,换了一种思路写了一个看上去简洁一点的上交。写的时候最大的问题就是开头万事开头难,数据库设计是第一步,一个是否合理的数据库可以帮你在开发的时候减少一些不必要的麻烦。
个人作业第一版中在数据库中写了很多SQL的存储过程,和存储函数,个人喜欢在数据库中完成大部分数据的处理(未参加过工作不知道这样子好不好),PHP处理数据能力欠佳。所以我最终提交的作业是第二版。