
一、首先建立数据库连接,单独把数据库连接代码写在一个db.php里,并在模板页header.php里导入db.php,使代码可重复使用且更精简。
<?php
header("Content-Type:text/html;charaset=utf-8");
$db=[
'type'=>'mysql',
'host'=>'127.0.0.1',
'dbname'=>'lyh',
'username'=>'root',
'password'=>'root'
];
$dsn=$db['type'].':host='.$db['host'].';dbname='.$db['dbname'];
try{
$pdo=new PDO($dsn,$db['username'],$db['password']);
}catch(PDOException $e){
die($e->getMessage());
}
?>点击 "运行实例" 按钮查看在线实例
二、读取电影详情,栏目,评论,底部版权,获取多行数据用fetchall(),单行用fetch(),评论和底部表情数据库如下


//电影详情
$sql='SELECT * FROM `movies`';
$stmt=$pdo->prepare($sql);
if($stmt->execute()){
$movies=$stmt->fetchALL();
}
// 栏目
$sql2='SELECT * FROM `category`';
$stmt2=$pdo->prepare($sql2);
if($stmt2->execute()){
$cates=$stmt2->fetchALL();
}
// 评论
$sql3='SELECT * FROM `comments`';
$stmt3=$pdo->prepare($sql3);
if($stmt3->execute()){
$comments=$stmt3->fetchALL();
}
//底部版权
$sql4='SELECT * FROM `copyrights` where `copyright_id`=3';
$stmt4=$pdo->prepare($sql4);
if($stmt4->execute()){
$copyrights=$stmt4->fetch();
} 点击 "运行实例" 按钮查看在线实例
三、index.php,需要从分类表和电影表遍历完name值
foreach ($cates as $cate) {
echo "<h2>{$cate['alias']}</h2>";
echo '<ol>';
// 遍历影视剧数组
foreach ($movies as $movie) {
// 判断当前影视剧所属栏目是否与当前栏目id相同?
if ($cate['cate_id'] == $movie['cate_id']) {
echo "<li><a href='detail.php?mov_id=" .$movie['mov_id']. "'>{$movie['name']}</a></li>";
}
}
echo '</ol>';
}点击 "运行实例" 按钮查看在线实例
四、list.php,分类表查询一行所以用fetch,电影表需要多行用fetchall,用get值查出分类表和电影表cate_id相等的数据,然后foreach遍历
// 将当前栏目id,, 使用GET方式,通过URL地址传递到列表模板list.php
$cate_id = $_GET['cate_id'];
// 注意: url中的内容都是字符串, 整数字符串先做类型转换才可以
//echo gettype($cate_id);die;
$cate_id = intval($cate_id); // 函数转换
// 将index.php中的主体代码简单修改一下
// 只显示一个栏目, 不需要做循环, 只需要作一个判断即可
// 在index.php基础上加一层判断,确定是否是当前栏目即可
// 如果上面的GET参数没有做类型转换, 那么这里就不能用===恒等
// 必须使用==, 以触发系统的类型自动转换机掉, 我还是建议全等操作
// == : 只比较值是否相等, === : 值与类型,都必须完全相同
// 栏目2
//$sql5='SELECT * FROM category a,movies b where a.cate_id=b.cate_id and b.cate_id=$cate_id;';
$sql5="SELECT * FROM `category` where `cate_id`=:cate_id;";
$stmt5=$pdo->prepare($sql5);
$stmt5->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
if($stmt5->execute()){
$cates=$stmt5->fetch();
}
$sql6="SELECT * FROM `movies` where `cate_id`=:cate_id;";
$stmt6=$pdo->prepare($sql6);
$stmt6->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
if($stmt6->execute()){
$movies=$stmt6->fetchall();
}
echo '</ol>';
echo "<h2>{$cates['alias']}</h2>";
echo '<ol>';
// 遍历影视剧数组
foreach ($movies as $movie) {
echo "<li><a href='detail.php?mov_id=" .$movie['mov_id']. "'>{$movie['name']}</a></li>";
}
echo '</ol>';点击 "运行实例" 按钮查看在线实例
五、详情页(含评论)detail.php,详情页通过网页跳转得到$_GET['mov_id']进行对比,遍历数据表得出的多条数据的$movie['id']}与之相等输出该条 数据。评论的添加使用占位符,和传统sql语句不同 insert into set。
$mov_id = intval($_GET['mov_id']);
// 复制list.php模板直接修改
foreach ($movies as $movie) {
if ($movie['mov_id'] == $mov_id) {
echo "<h3>{$movie['name']}</h3>";
echo '<img src="static/images/'.$movie['image'].'" alt="" width="300">';
echo "<p style='text-indent: 2em'>{$movie['detail']}</p>";
}
};
echo "<h3>热门评论</h3>";
foreach($comments as $comment){
if($mov_id==$comment['comment_id']){
echo "<h4>{$comment['comment_belonger']}:</h4>";
echo "{$comment['comment_content']}";
echo '<br>';
echo '<br>';
echo '<br>';
}
};
?>
<form action="" method="POST">
<table>
<tr><td>发表评论:</td><td> <input type="text" style="width:600px;height:100px" name="content" /></td>
<tr><td></td><td> <input type="hidden" name="belonger" value="小雷" style="width:600px;height:100px" name="content" /></td>
<tr><td> <input type="submit" name="submit" value="提交评论" /></td>
</table>
</form>
<?php
if(isset($_POST['submit'])){
$comment_belonger = $_POST['belonger'];
$comment_content=$_POST['content'];
$sql5="insert into `comments` set `comment_id`=:comment_id,`comment_content`=:comment_content,`comment_belonger`=:comment_belonger";
$stmt5=$pdo->prepare($sql5);
$stmt5->bindParam('comment_id', $mov_id, PDO::PARAM_INT);
$stmt5->bindParam('comment_content', $comment_content, PDO::PARAM_STR);
$stmt5->bindParam('comment_belonger', $comment_belonger, PDO::PARAM_STR);
if ($stmt5->execute()) {
if ($stmt5->rowCount() > 0) {
echo '成功添加';
}
} else {
die('<pre>' . print_r($stmt5->errorInfo(), true));
}
}
?>点击 "运行实例" 按钮查看在线实例
六.顶部分类页,list.php分类表查询一行用fetch,电影表需要多行用fetchall,用get值查出分类表和电影表cate_id相等的数据,然后foreach遍历。
// 将当前栏目id,, 使用GET方式,通过URL地址传递到列表模板list.php
$cate_id = $_GET['cate_id'];
// 注意: url中的内容都是字符串, 整数字符串先做类型转换才可以
//echo gettype($cate_id);die;
$cate_id = intval($cate_id); // 函数转换
// 将index.php中的主体代码简单修改一下
// 只显示一个栏目, 不需要做循环, 只需要作一个判断即可
// 在index.php基础上加一层判断,确定是否是当前栏目即可
// 如果上面的GET参数没有做类型转换, 那么这里就不能用===恒等
// 必须使用==, 以触发系统的类型自动转换机掉, 我还是建议全等操作
// == : 只比较值是否相等, === : 值与类型,都必须完全相同
// 栏目2
//$sql5='SELECT * FROM category a,movies b where a.cate_id=b.cate_id and b.cate_id=$cate_id;';
$sql5="SELECT * FROM `category` where `cate_id`=:cate_id;";
$stmt5=$pdo->prepare($sql5);
$stmt5->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
if($stmt5->execute()){
$cates=$stmt5->fetch();
}
$sql6="SELECT * FROM `movies` where `cate_id`=:cate_id;";
$stmt6=$pdo->prepare($sql6);
$stmt6->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
if($stmt6->execute()){
$movies=$stmt6->fetchall();
}
echo '</ol>';
echo "<h2>{$cates['alias']}</h2>";
echo '<ol>';
// 遍历影视剧数组
foreach ($movies as $movie) {
echo "<li><a href='detail.php?mov_id=" .$movie['mov_id']. "'>{$movie['name']}</a></li>";
}
echo '</ol>';点击 "运行实例" 按钮查看在线实例
七、底部版权,假设有多个版权,需要的id为3的标志,如下图

//底部版权
$sql4='SELECT * FROM `copyrights` where `copyright_id`=3';
$stmt4=$pdo->prepare($sql4);
if($stmt4->execute()){
$copyrights=$stmt4->fetch();
}点击 "运行实例" 按钮查看在线实例
<div class="footer"> <p class="copyright"> <?php echo $copyrights['copyright_value']; ?> © 版权所有</p> </div>
点击 "运行实例" 按钮查看在线实例
总结:通过这节学会了分离模板页,学会了pdo操作数据库,学会了占位符和绑定数据,工作繁忙,进度慢了很多,一天打算完成1.5-2个作业吧,争 取早点赶上进度。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号