博客列表 >把影视网站,数据全部从 数据库中读取

把影视网站,数据全部从 数据库中读取

琥珀的博客
琥珀的博客原创
2019年10月21日 20:05:35953浏览

1.gif

一、首先建立数据库连接,单独把数据库连接代码写在一个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(),评论和底部表情数据库如下

        1.jpg

        2.jpg

        

实例

   //电影详情
	$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的标志,如下图

3.jpg

实例

        //底部版权
	$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个作业吧,争                取早点赶上进度。


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议