Blogger Information
Blog 49
fans 2
comment 1
visits 21988
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
07-25作业:数据库改写管理网站内容
子傅
Original
837 people have browsed it

说明:

案例使用自己设计的数据表结构,完成一个简易小说网站的数据管理,基本功能:

1、首页 index.php  首页展示的是各个分栏目推荐的小说,以数据表种的推荐标识作为识别,首页推荐位有4个。只展示当前状态正常且设置了推荐表示的书籍

2、分类页 type.php 根据数据库种的分类id标识,将分类id通过GET方式携带到分类页,并在分类页通过后台数据的查找,展示出需要的分类书籍信息,每类分类信息优先图文展示具有分类推荐标识的六本书籍。

3、书目介绍页 list.php 用户通过点击书名或图书图片连接跳转到数目介绍页面,本页面包括书籍介绍和已有的书籍目录列表。用户可以同点击选取查看对应的章节内容。

4、内容页 content.php 通过用户点击提交的GET请求,直接从后台查询出对应的内容ID,并显示在内容区块,由于本页设置会出现上下页的功能,所以要注意当读者在第一页 和最后一页时 点击上一页或下一页要做对应的判断处理,只有当前页不是第一页的情况下上一页才会生效,只有当前页不是最后以页的情况下,下一页才会生效。

5、本次案例过程中,因为使用了文件引入的模块操作,include  引入了文件头,而文件头中已设置启用了对应的sql实例,所以,在对应的不同文件主体中就不用再次设置新的数据库实例,可以直接使用PDO。

6、关于数据表设计:char(10) 标示只能输入10个字符 如纯英文10个字母  10个数字 10个汉字  总之长度最大为10的字符串。  varchar(10) 变长的,总之长度最大为10的字符串。

7、数据表机构

1.png

其中:

navType = 书籍分类表   bookInfo =书籍详情表   bookList = 图书列表    account= 用户登录表    userInfo = 用户信息表  

用户权限角色管理 还没弄明白怎么实现,预留的,慢慢试。。。。

role=用户校色表(还未设置对应功能) menu = 菜单表    user_role 用户角色关联表   role_menu 角色权限关联表

实例样图:index.php

222.png

分类页 type.php

333.png

目录页 list.php

444.png

内容页  content.php

555.png


实例代码:

文件头 header.php  和文件底 footer.php(footer页太简单不提供代码了。。。)

实例

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>蒜球小说网</title>
    <style>
        /*通用标签预设样式*/
*{margin: 0;padding: 0;}
body{background-color:lightgrey;}
a { text-decoration:none;color:black;}
a:hover { text-decoration:none;color:red;}
ul{ list-style-type: none;}
p{line-height: 26px}

/*头部样式设置*/
.header{width: 100%;color: #e2e2e2;}
.row{width:100%;height: 70px;background-color:white;}
.header_main{width:1000px;height: 70px;margin: auto;line-height: 60px;}
.logo{width: 400px;height: 70px;float: left;}
.logo img{width: 280px;height: 60px;margin-top: 5px;}
.seo{float: left;width: 400px;height: 70px;line-height: 70px;}
.seo input{width:300px;height: 26px;border-radius:5px ;}
.seo button{width:90px;height: 34px;margin-top: 2px;border-radius:5px ;}
.login{float: left;margin-left: 30px;width: 160px;height: 60px;color: #000000;}
.login ul{width: 160px;height: 60px;line-height: 60px;list-style-type: none;}
.login ul li{float: right;display: inline-block;width: 40px;padding: 0 10px; }

/*导航条样式设置*/
.header .nav{clear: both;width:960px;height: 30px;margin: 10px auto;padding: 0 20px;line-height: 30px;border-radius: 4px;background-color:coral;}
.nav ul{list-style-type: none;color: white;}
.nav ul li{float: left;width: 100px;text-align: center;display: inline-block;}
.nav ul li:hover {float: left;width: 100px;text-align: center;display: inline-block;background-color: #FF0000;}
.nav ul li a{color: white;}

/*主体外框样式 所有页面通用*/
.main{width: 1000px;margin: 10px auto;}

/*首页左浮动主体设置*/
.main_left{width: 694px;height: 340px;float: left;margin:0 5px 0 0;background-color: cornsilk;border:3px solid #A9A9A9;}
.main_left .item{width:335px;height:154px;float: left;padding:10px 0 0 10px;background-color: cornsilk;}
.main_left .item ***age{width:120px;float: left;}
        .main_left .item ***age img{
            width:120px;
            height: 150px;
        }
        .main_left .item dl{
            width:190px;
            height: 153px;
            float: right;
            font-size: 12px;
        }
        .main_left .item dt{
            height: 25px;
            line-height: 25px;
            overflow: hidden;
            font-size:16px;
            padding-bottom: 4px;
            font-weight: bold;
            border-bottom: 1px dotted cornflowerblue;
        }
        .main_left .item dt a{
            color: black;
}
        .main_left .item dt a:hover{
             color: red;
}
        .main_left .item dt span{
            color: 	#A9A9A9;
            font-size:16px;
            font-weight: bold;
            float: right;
        }
        .main_left .item dd{
            margin-top: 4px;
            text-indent:24px;
            height: 128px;
            line-height: 20px;
            overflow: hidden;
            text-align: justify;
        }
        /*首页右浮动主体设置*/
        .main_right{
    width: 282px;
            height: 340px;
            float: right;
            margin-left: 7px;
            background-color: cornsilk;
            border:3px solid #A9A9A9;
        }
        .main_right h3{
    height: 30px;
            line-height: 30px;
            padding-left: 10px;
            font-size: 18px;
            background-color: lightgrey;
        }

        .main_right .item{
            width:272px;
            height:154px;
            float: left;
            margin:  5px 5px 0 5px;
            overflow: hidden;
            background-color: cornsilk;
        }

        .main_right .item ***age{
            width:120px;
            float: left;
        }
        .main_right .item ***age img{
             width:120px;
            height: 150px;
        }
        .main_right .item ***g_text{
            /*width:152px;*/
            font-size: 14px;
            float: right;
            line-height: 25px;
        }
        .main_right .item ***g_text li{
            width:140px;
            display: block;
            margin: 4px 0 3px 5px;
            border-bottom: 1px dotted cornflowerblue;
        }

.main_right .item ***g_text a{color: #000000;}
.main_right .item ***g_text a:hover{color: red;}

        /*分栏目页 主体样式*/
        .main_type{
    width: 994px;
            height: 340px;
            background-color: cornsilk;
            border:3px solid #A9A9A9;
        }
        .main_type .item{
    width:320px;
            height:154px;
            float: left;
            padding:10px 0 0 10px;
            background-color: cornsilk;
        }

        .main_type .item ***age{
    width:120px;
            float: left;
        }
        .main_type .item ***age img{
    width:120px;
            height: 150px;
        }
        .main_type .item dl{
    width:190px;
            height: 153px;
            float: right;
            font-size: 12px;
        }
        .main_type .item dt{
    height: 25px;
            line-height: 25px;
            overflow: hidden;
            font-size:16px;
            padding-bottom: 4px;
            font-weight: bold;
            border-bottom: 1px dotted cornflowerblue;
        }
        .main_type .item dt a{
    color: black;
}
        .main_type .item dt a:hover{
    color: red;
}
        .main_type .item dt span{
    color: 	#A9A9A9;
    font-size:16px;
            font-weight: bold;
            float: right;
        }
        .main_type .item dd{
    margin-top: 4px;
            text-indent:24px;
            height: 128px;
            line-height: 20px;
            overflow: hidden;
            text-align: justify;
        }
        /*  文档目录页 list.php */
.main_list{width: 994px;height: 250px;background-color: cornsilk;border:3px solid #A9A9A9;}
.main_list .nav{width: 100%;height: 30px;background-color:lightskyblue;border-bottom: 2px solid #A9A9A9;}
.main_list .pic{width: 180px;height: 210px;float: left;margin: 5px 0 0 10px;}
.main_list .pic img{ width: 160px;height: 200px;float: left;border-radius: 3px;}
.main_list .main_info{width: 794px;height: 200px;float: left;margin-top: 5px;}
.main_list .main_info .title{width: 100%;}
.main_list .main_info .title p{height: 25px;line-height: 25px;float: left; width: 350px;margin-top: 5px;padding-top: 5px;}
.main_list .main_info .content{width: 100%;height: 80px;line-height: 25px;text-align: justify;border-top: 1px dotted #A9A9A9;padding-top: 5px;margin-top: 5px;}
.main_list .main_info .content p{line-height: 25px;float: left;display: inline-block;}
.main_list .main_info .content span{margin-top: 10px;display: inline-block;}
.main_list .main_info .content ul{float: left;display: inline-block;}
.main_list .main_info .content li{float: left;display: inline-block;}
.main_list .main_info .content li a{color: red;}
.main_list .main_info .content li a:hover{color: black;}
.main .content_list{width: 980px;height: 100%;border-radius: 5px;background-color: cornsilk;margin-top: 15px;padding: 10px 7px;border:3px solid #A9A9A9;}
.main .content_list dd{color: black;display: block;width: 195px;height: 30px;float: left;border-bottom: 1px dashed #A9A9A9;}
.main .content_list dd a{color: black;display: block;width: 155px;height: 30px;float: left;line-height: 30px;padding-left: 40px;}

/*内容页样式 content.php */
.main_con {width: 994px;height: 100%; background-color: cornsilk;border: 3px solid #A9A9A9;}
.main_con .main_info{height: 26px;padding: 10px 0 10px;text-align: center;}
.main_con .nav{width: 100%;height: 30px;background-color:lightskyblue;border-bottom: 2px solid #A9A9A9;
.main_con .list{width: 994px; height: 26px;padding: 10px 0 10px; text-align: center;}
.main_con .list ul li{float: none;width:100px;text-align: center;display: inline-block;}
.main_con .content{ width:944px;padding: 15px 25px;font-size: 20px;line-height: 26px;letter-spacing:3px;white-space:pre-line;text-align: justify;}


/*全站通用底部样式*/
.footer{width: 1000px;height: 80px;margin: auto;background-color: black;color: #ffffff;text-align: center;opacity: 0.5;}
.author{margin-top: 20px;padding-top: 15px;}
.clear{ clear: both;}
    </style>
<?php

//数据库连接 实例化
try{
    $pdo =new PDO("mysql:host=127.0.0.1;dbname=book","root","root");

}catch (PDOException $e){
    die("数据库连接失败:".$e->getMessage());
}
//在图书类型表中 查询状态正常的书籍分类 ID 名称
$sql = "SELECT `navName`,`typeID` FROM `navType` WHERE `state`= :state";

//绑定SQL语句
$stmt = $pdo->prepare($sql);

//预处理执行语句 
$stmt->execute(['state'=>0]);
//获取执行结构集合
$rows =$stmt->fetchAll();

?>
</head>
<body>
<div class="header">
    <div class="row">
      <div class="header_main">
         <div class="logo"><img src="../../images/logo.png" alt=""></div>
         <div class="seo">
            <form action="">
                <label for="text"></label>
                <input type="text" id="text" name="text" placeholder="请输入要查询的书名">
                <button type="button">查询</button>
            </form>
         </div>
        <div class="login">
            <ul><li>登录</li>
                <li>注册</li>
            </ul>
        </div>
      </div>
    </div>
    <div class="nav">
        <ul>
            <li><a href="index.php">首页</a></li>
             <!-- foreach 循环输出获取的图书类型ID 和分类名称 -->
            <?php foreach($rows as $val) { ?>
            <!-- 分类模板页type.php 配合GET方式加上图书分类ID 实现分类模板页跳转  type.php?typeID=变量 -->
            <li><a href="type.php?typeID=<?php echo $val['typeID'] ?>"><?php echo $val['navName'] ?></a></li>
            <?php }?>

        </ul>
    </div>
</div>

运行实例 »

点击 "运行实例" 按钮查看在线实例


一、首页 index.php页 代码

实例

<?php

include __DIR__."./lib/model/header.php";
//引用的文件头已有数据库是实例,所以不再新建实例
//查询首页推荐标志位的书籍信息
$sql = "SELECT `bookName`,`author`,`pic`,`summary`,`bookID` FROM `bookList` WHERE `recommendIndex` = :index";
//绑定查询语句
$stmt = $pdo->prepare($sql);
//参数绑定执行预处理
$stmt->execute(["index"=>0]);
//获得处理结果,并将结果集赋值给变量 用于推荐区块的数据显示
$left_rows =$stmt->fetchALL(PDO::FETCH_ASSOC );


$sql = "SELECT `bookName`,`author`,`pic`,`summary`,`bookID`  FROM `bookList` WHERE `recommendIndex` = :index AND `recommendType` = :typeID";

$stmt = $pdo->prepare($sql);

$stmt->execute(["index"=>1,"typeID"=>0]);

$right_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

?>
<div class="main">
    <div class="main_left">
        <?php foreach($left_rows as $val){ ?>
        <div class="item">
            <div class="image">
                <a href="list.php?bookID=<?PHP echo $val['bookID']?>">
                    <img src="./images/<?php echo $val['pic'] ?>" alt="">
                </a>
            </div>
            <dl>
                <dt>
                    <a href="list.php?bookID=<?PHP echo $val['bookID']?>"><?php echo $val['bookName'] ?></a>
                    <span><?php echo $val['author'] ?></span>
                </dt>
                <dd>
                    <?php echo $val['summary'] ?>
                </dd>
            </dl>
            <div class="clear"></div>
        </div>
        <?php }?>

    </div>
    <div class="main_right">
        <h3>好书推荐</h3>
        <div class="item">
<!--            --><?PHP //foreach($right_rows as $val){?>
            <div class="image">
                <a href="">
                    <img src="./images/10001.jpg" alt="">
<!--                    <img src="./images/--><?php //echo $val['pic']?><!--" alt="">-->
                </a>
            </div>
            <div class="img_text">
             <ul>
<!--                <li><a href="">--><?php //echo $val['bookName']?><!--</a></li>-->
<!--                 --><?php //}?>
                <li><a href="">凡人修仙传之仙界篇</a></li>
                <li><a href="">凡人修仙传之仙界篇</a></li>
                <li><a href="">凡人修仙传之仙界篇</a></li>
                <li><a href="">凡人修仙传之仙界篇</a></li>
             </ul>
            </div>
        </div>
        <h3 class="clear">完本好书</h3>
    </div>
    <div class="clear"></div>
</div>

<?php

include __DIR__."./lib/model/footer.php";

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例


二、图书分类页type.php

通过GET 方式获得分类查询需要的ID 经过查询进而显示所需页面内容

实例

<?php
include "lib/model/header.php";
//获取图书分类的ID
$id = $_GET['typeID'];
//生成根据图书分类ID查询的语句  推荐位***6个 所以获取六个数据即可
$sql = "SELECT `bookName`,`author`,`pic`,`summary`,`bookID` FROM bookList WHERE `typeID` = :id LIMIT 0,6";
$stmt = $pdo->prepare($sql);
$stmt->execute(["id"=>$id]);
//获取结果记录集
$rows =$stmt->fetchALL(PDO::FETCH_ASSOC);

?>
<div class="main">
    <div class="main_type">
        <?php foreach($rows as $val ){?>
        <div class="item">
            <div class="image">
                <!-- GET方式传递图书的识别ID到图书目录列表模板页,用于页面内容查询 -->
                <a href="list.php?bookID=<?php echo $val['bookID']?>">
                                                 <!--图书配图-->
                    <img src="./images/<?php echo $val['pic']?>" alt="">
                </a>
            </div>
            <dl>
                <dt>
                    <!-- GET方式传递图书的识别ID到图书目录列表模板页,用于页面内容查询 -->
                    <a href="list.php?bookID=<?php echo $val['bookID']?>"><?php echo $val['bookName']?></a>
                    <!--图书作者-->
                    <span><?php echo $val['author']?></span>
                </dt>
                <dd>
                     <!--图书简介-->
                    <?php echo $val['summary']?>
                </dd>
            </dl>
            <div class="clear"></div>
        </div>
        <?php }?>
    </div>

</div>

<?php
include "lib/model/footer.php";
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

三、图书目录页 list.php

实例

<?php
include __DIR__."./lib/model/header.php";

//GET获得图书的识别ID
$bookID = $_GET['bookID'];
//根据ID查询该图书主要信息
$sql ="SELECT `bookName`,`author`,`summary`,`typeID`FROM bookList WHERE `bookID` = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(["id"=>$bookID]);
$bookInfo =$stmt->fetch(PDO::FETCH_ASSOC);

//根据ID查询该图书所归属的分类信息  可以获得图书归属分类的数据 仙侠小说
$typeID = $bookInfo['typeID'];
$sql = "SELECT `navName`,`typeID` FROM navType WHERE `typeID` = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(["id"=>$typeID]);
$typeInfo =$stmt->fetch(PDO::FETCH_ASSOC);

//根据ID查询该图书的详细信息  包括章节 内容 等
$sql ="SELECT `nodeID`,`nodeName`,`createTime` FROM `bookInfo` WHERE `bookID` =:id  ORDER BY `nodeID` ASC ";
$stmt = $pdo->prepare($sql);
$stmt->execute(["id"=>$bookID]);

$count = $stmt->rowCount();
//统计当前章节总数,如章节总数不是5的整倍数 则为变量 $num赋值 在页面循环,主要是为了主体页面美观
$i= $count % 5;
$num = 0;
if ($i!=0){
    $num = 5-$i;
}
//获得图书的详细的数据集合
$rows = $stmt->fetchALL(PDO::FETCH_ASSOC);

?>
<div class="main">
    <div class="main_list">
       <div class="nav"></div>
        <div class="pic">
            <img src="./images/10001.jpg" alt="">
        </div>
        <div class="main_info">
             <div class="title">
                 <h1><?php echo $bookInfo['bookName']?></h1>
                 <p>本 书 作 者 : <?php echo $bookInfo['author']?></p>
                 <p>文 章 类 别 : <?php echo $typeInfo['navName']?></p>
                 <p>最 新 章 节 : 第<?php echo $count?>章 树倒猢狲散</p>
                 <p>更 新 时 间 : 2019-07-22 12:45</p>
             </div>
             <div class="content clear">
                 <p><?php echo $bookInfo['summary']?></p>
                <span> <p>过往作品集合:</p>
                 <ul>
                     <li><a href="">《凡人修仙传》</a></li>
                     <li><a href="">《魔天记》</a></li>
                     <li><a href="">《玄界之门》</a></li>
                 </ul>
                </span>
             </div>
        </div>
    </div>
    <div class="content_list">
        <dl>
            <!--循环输出图书详细信息-->
            <?php foreach($rows as $val){?>
            <!-- GET方式传递章节ID信息到内容模板页,用于模板页查询显示   -->
            <dd><a href="content.php?nodeID=<?php echo $val['nodeID']?>">
                <!--  章节计数 -->
                第<?php echo $val['nodeID']?>章
                <!--  章节名称 -->
                <?php echo $val['nodeName']?></a>
            </dd>
            <?php }?>
            <!-- 如果当前章节未满足一行5个章节的显示样式,空的位置由空章节填补-->
            <?php
            for($j=0;$j<$num;$j++){
            ?>
            <dd></dd>
            <?php }?>
        </dl>
        <div class="clear"></div>
    </div>
</div>

<?php
include __DIR__."./lib/model/footer.php";
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

四、content.php 内容显示模板页

实例

<?php
include __DIR__."./lib/model/header.php";
//获取文章节点ID
$nodeID =$_GET['nodeID'];
//根据文章节点ID查询对应ID的文章内容
$sql = "SELECT `nodeID`,`nodeName`,`content`,`bookID` FROM `bookInfo` WHERE `nodeID` = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(["id"=>$nodeID]);
$result =$stmt->fetch(PDO::FETCH_ASSOC);

$bookID=$result['bookID'];
//根据图书的ID查询统计当前一共有多少个章节点 用于设置下一页的ID参数
$sql = "SELECT `nodeID`,`nodeName`,`content`,`bookID` FROM `bookInfo` WHERE `bookID` = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(["id"=>$bookID]);
//如果当前页数的ID等于统计值,则标识当前页为最后一页,即下一页无效.
$count = $stmt->rowCount();


?>
<div class="main">
    <div class="main_con">
        <div class="nav"></div>
       <div class="main_info">
           <!--  输出章节数 与章节内容-->
           <h2>第<?php echo $nodeID?>章 <?php echo $result['nodeName']?></h2>
       </div>
       <div class="list">
         <ul>
            <!-- 当前页为第一页时 上一页 内容无效-->
            <li><a href="content.php?nodeID=<?php echo ($nodeID-1>0)?$nodeID-1:$nodeID ?>">上一章</a></li>
            <li><a href="list.php?bookID=<?php echo $result['bookID']?>">章节列表</a></li>
            <!-- 当前页为最后一页时 下一页 无效-->
            <li><a href="content.php?nodeID=<?php echo ($nodeID+1<=$count)?$nodeID+1:$nodeID ?>">下一章</a></li>
         </ul>
       </div>
       <div class="content">
        <?php echo $result['content']?>
       </div>
        <div class="list">
            <ul>
                <li><a href="content.php?nodeID=<?php echo ($nodeID-1>0)?$nodeID-1:$nodeID ?>">上一章</a></li>
                <li><a href="list.php?bookID=<?php echo $result['bookID']?>">章节列表</a></li>
                <li><a href="content.php?nodeID=<?php echo ($nodeID+1<=$count)?$nodeID+1:$nodeID ?>">下一章</a></li>
            </ul>
        </div>
    </div>
</div>


<?php
include __DIR__."./lib/model/footer.php";
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例




Correction status:unqualified

Teacher's comments:写完再提交
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!