PHP之分页显示数据-新闻系统

一、项目设计

1.项目要求

2.主页面使用frame框架进行设计,内容如下:

   index.php

<span style="font-family:SimSun;font-size:18px;"><html>
<frameset rows="80%,20%" frameborder="no" border="0" cols="900px">
	<frameset cols="10%,80%,10%" >
		<frame src="sidebar.php" name="sidebar" noresize="noresize" scrolling="no">
		<frameset rows="20%,80%">
			<frame src="navigationbar.php" name="navigation" noresize="noresize" scrolling="no">
			<frame src="home.php" name="content" noresize="noresize" scrolling="yes">
		</frameset>
		<frame src="sidebar.php" name="sidebar" noresize="noresize" scrolling="no" >
	</frameset>

	<frame src="footer.php" name="footer">
</frameset>
</html>
</span>
二、准备工作

1.创建项目文件夹,定义配信息

   文件夹名称:news

   配置文件名:config.php

<span style="font-size:18px;"><?php
	define("HOST","localhost");
	define("USERNAME","root");
	define("PASSWORD","");
	define("CHARSET","utf8");
?></span>

2..创建项目数据库

   create_db.php

<span style="font-size:18px;"><!--执行该页面用于创建一个数据库-->
<html>
	<head>
		<meta http-equiv="content-Type" content="text/html;charset=utf-8"/>
		<title>创建数据库</title>
	<head>
	<body>
	<?php
		require_once 'config.php';
		$conn=mysql_connect(HOST,USERNAME,PASSWORD);
		if(!$conn)
			die('Coucld not connect:'.mysql_error());
		$result=mysql_query("CREATE DATABASE news default character set utf8");
		if($result)
		{
			echo "Database create successful!";
		}else
		{
			die('Could not connect:'.mysql_error());
		}
		mysql_close($conn);
	?>
	</body>
</html>

</span>

3.设计数据表,并创建数据表

     强烈建议,在创建数据表之前,一定要先设计好数据表,并反复思量,是否有问题。

     create_table.php

<span style="font-size:18px;"><!--执行该页面用于创建数据表-->
<html>
	<head>
		<meta http-equiv="content-Type" content="text/html;charset=utf-8"/>
		<title>创建数据表</title>
	</head>
	<body>
		<?php
		require_once 'config.php';
			$conn = mysql_connect(HOST,USERNAME, PASSWORD);
			mysql_query("set names utf8");

			if (!$conn){
				die('Could not connect:'.mysql_error());
			}
			mysql_select_db("news");
			
			#分页表格-数据表
			$sql = "CREATE TABLE content(
				id int primary key auto_increment,
				name varchar(30),
				age varchar(12)
			)";
			#统计页面浏览次数-数据表
			$sql2 ="CREATE TABLE count_number(	
				id int primary key auto_increment,
				content_id	int,
				number int,
				is_first varchar(10)
			)";

			$sql3="insert into count_number(content_id,number,is_first) values(100,0,'true')";

			#mysql_query($sql2);
			#mysql_query($sql3);

			
			/*
				创建新闻主体表,字段解释
				id 主键
				news_id	新闻的标识,通过该id可以找到新闻的详情
				image	新闻的图片
				title	新闻的标题
			*/
			$sql4 = "create table news_content(
				id int primary key auto_increment,
				news_id int ,
				image varchar(150),
				title varchar(150),
				content varchar(150)
			)ENGINE=MyISAM DEFAULT CHARSET=utf8";
			

			/*
				插入新闻内容
			*/
			$sql5 = "insert into news_content(news_id,image,title,content) values(
				1001,
				'http://img1.cache.netease.com/catchpic/9/9E/9E3EC2A48299CBD7AD007DFF54060EE9.jpg',
				'人民日报梳理习近平这一年:累并快乐着',
				'http://news.163.com/14/1211/08/AD5URVP800014SEH.html')";
			$sql6 = "insert into news_content(news_id,image,title,content) values(
				1002,
				'http://img1.cache.netease.com/catchpic/8/86/86394708E37A7B759771855337792EED.jpg',
				'香港警方今日将全面清障 \"占中\"者内部发生分歧',
				'http://news.163.com/14/1211/00/AD53FEM900014JB6.html')";
			$sql7 = "insert into news_content(news_id,image,title,content) values(
				1003,
				'http://img4.cache.netease.com/cnews/2014/12/10/2014121019041607f5e.jpg',
				'太原市委组织部长李志江被调查 曾\"失踪\"14天',
				'http://news.163.com/14/1211/02/AD5BFC5700014AED.html')";
			$sql8="insert into news_content(news_id,image,title,content) values(
				1004,
				'http://img1.cache.netease.com/catchpic/B/BB/BB09886F9B84329626E13115159CB164.jpg',
				'媒体揭秘中情局八大酷刑 花8000万美元请人设计',
				'http://news.163.com/14/1211/02/AD5BFJJP00014AED.html')";

			#mysql_query($sql4);
			#mysql_query($sql5);
			#mysql_query($sql6);
			#mysql_query($sql7);
			#mysql_query($sql8);
			/*
			插入测试数据
			*/
			for($x = 0; $x<100;$x++){
				$sql ="Insert into content(name,age) values('zhangsan',($x+5))";
				#mysql_query($sql);
			}

			mysql_close($conn);
		?>
	</body>
</html>

</span>

4.设计各个辅助页面

    home.php

   打开http://localhost/news/index.php时,显示给用户的信息

<span style="font-size:18px;"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>content</title>
</head>
<body leftmargin=0 topmargin=0>
<table  border="1" width="100%" rules="none" > 
	<tr><td><?php include 'content_table.php';?></td></tr>
</table>
</body>
</html></span>

   sidebar.php

   左右侧边栏的广告信息

<span style="font-size:18px;"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sidebar</title>
</head>
<body  width="150px" leftmargin=0 topmargin=0>
	<img src="./pic/baner1.jpg" width="150px"/><br/>
	<img src="./pic/baner2.jpg" width="150px"/><br/>
	<img src="./pic/baner3.jpg" width="150px"/><br/>
	<img src="./pic/baner4.jpg" width="150px"/><br/>
	<img src="./pic/baner1.jpg" width="150px"/><br/>
	<img src="./pic/baner2.jpg" width="150px"/><br/>
	<img src="./pic/baner3.jpg" width="150px"/><br/>
	<img src="./pic/baner4.jpg" width="150px"/><br/>

</body>
</html></span>

    navigationbar.php

    页面导航信息

<span style="font-size:18px;"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>navigatiobar</title>
</head>
<body leftmargin=0 topmargin="10px" >
	<center width="100%" height="150px">
		<img src="./pic/header1.jpg" width="100%" height="120px"/><br>
		<font size="5px" >
		<a href="http://news.163.com/" target="content">首页</a>
		<a href="content_news.php" target="content">新闻	</a>
		<a href="home.php" target="content">表格	</a>
		<!--下面的url-->
		<a href="http://tech.163.com/" target="content">科技	</a>
		<a href="http://ent.163.com/" target="content">娱乐	</a>
		<a href="http://sports.163.com/" target="content">体育	</a>
		<a href="http://news.163.com/" target="content">要闻	</a>
		<a href="http://money.163.com/" target="content">财经	</a>
		<a href="http://lady.163.com/" target="content">时尚	</a>
		<a href="http://book.163.com/" target="content">文化	</a>
		<a href="http://edu.163.com/" target="content">教育	</a>
		<a href="http://digi.163.com/" target="content">数码	</a>
		</font>
	</center>
	
</body>
</html></span>

    footer.php

    页面底部信息

<span style="font-size:18px;"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>footer</title>
</head>
<body>
	<center> 
		<hr/>
		<font size="5px">页面底部信息</font>
	</center>
</body>
</html></span>


5.操作数据库的类

   mysqlhelper.php

   该类用于对数据库进行一些基本操作

<span style="font-size:18px;"><html>
<head>
	<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<?php
	require_once 'config.php';

	class MySQLHelper{
	private $table;
	/*
		构造函数:
		参数1:主机名
		参数2:数据库用户名
		参数3:数据库密码
		参数4:要操作的数据库
		参数5:操作数据库的字符编码

		初始化对象的同时,进行连接数据库操作
	*/
	function __construct($table){	
	  $this->table=$table;
	  $this->connect();
	}
	
	function connect(){
		 $link=mysql_connect(HOST,USERNAME,PASSWORD) or die("连接数据库失败".mysql_error());
		 mysql_select_db($this->table,$link) or die ("没有该数据库:".$this->table);
		 mysql_query("SET NAMES ".CHARSET);
	  
	}


	//受影响的行数
	 function affected_rows(){		
		 return mysql_affect_rows();
	 }

	//数据条数
	 function num_rows($query){		
		 return $mysql_num_rows($query);
	 }

	//插入的数据所在的id
	 function insert_id(){	
		 return mysql_insert_id();
	 }
	 //处理返回的结果
	 function fetch_row($query){
		 return mysql_fetch_row($query);
	 }
	//服务器版本
	 function version(){		
		 return mysql_get_server_info();
	 }
	 
	//增
	 function fn_insert($table,$name,$value){
	  //insert into[表名] values('','',......顺序排列的数据);
	   mysql_query("insert into $table ($name) values ($value)");
	 }
		
	 //删
	 function fn_del($table,$data){
	  //delete from [表名] where ([条件]);
		 mysql_query("delete from $table where (id=$data)");
	 }
		
	 //查询全部结果
	 function fn_search($table){
		$res = mysql_query("select * from $table");
		return $res;
	 }
		
	 //改
	 function fn_update($table,$name1,$value,$name2,$id){
		 //UPDATE [表名] SET [修改内容如name = 'Mary'] WHERE [条件];
		 mysql_query("update $table set $name1='$value' where $name2='$id'");
	 }
}

?>
</html></span>

6.设计分页数据主页面

    content_table.php

    分页显示数据,每一页的数据是一张表格。

<span style="font-size:18px;"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>page</title>
</head>
<body >
	<?php require_once 'mysqlhelper.php';?>
		<table	align="center" border="1" width="500px" height="10px">
			<tr bgcolor="silver" align="center"><td width="30%">id</td><td width="40%">name</td><td width="30%">age</td></tr>
			<tr>
			<?php
				$db = new MySQLHelper("news");
				$res = $db->fn_search("content");
				//var_dump($res);

				
				//声明一些变量
				$page_size="10";//每一页的条数
				$count=mysql_num_rows($res);//总的条数
				$page_number=ceil($count/$page_size);//向上舍入,获得最大页数

				//当前的页数
				if(empty($_GET['page']) || $_GET['page'] <0){
					$current_page = 1;
				}else{
					$current_page = $_GET['page'];
				}
				
				$offset = $page_size*($current_page-1);	//当前页的第一条数据
				$sql="SELECT * FROM content limit $offset,$page_size";	//查询当前页数据,10条
				$res = mysql_query($sql);
				
				while($row = mysql_fetch_row($res)){
					//var_dump($row);
			?>	
					<td align="left"><?php echo $row[0]?></td>
					<td align="center"><?php echo $row[1]?></td>
					<td align="center"><?php echo $row[2]?></td>
			</tr>
			<?php
				}
			?>	
		</table>
		<p></p>
		<table border="0" align="center"  cellpadding="5px">
			<tr >
				<?php
					$key='';
					if($current_page ==1){	//当前页是首页
						$key.='首页';	
						$key.='  上一页';
					}else{
						$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=1\">首页  </a>";
						$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".($current_page-1)."\">    上一页  </a>";
					}
					
					/*for($x = $current_page ; $x < $current_page+8,$x<$page_number; $x++){
						//$key.=$x;
						$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".$x."\">  $x </a>";
					}*/
					//中间页码策略:中间页数左右偏移2个页码
					for($x = 0 ; $x<5;$x++){	//中间只显示5个页码
						if($current_page <=6){
							$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".($current_page+$x)."\">"
							." ".($current_page+$x)."</a>";
						}else{
							$y =6+$x;
							$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".$y."\">"
							." ".$y."</a>";
						}
					}
					
					if($current_page == $page_number){	//当前页是尾页
						$key.='  下一页';
						$key.='  尾页';
					}else{
						$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".($current_page+1)."\">     下一页  </a>";
						$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".$page_number."\">尾页</a>";
					}

					

				?>
				<td><?php echo $key;?></td>
					
			</tr>
			<tr>
				<td colspan="10">浏览次数:
					<?php
						//查询数据库的次数
						$sql="SELECT * FROM count_number where content_id=100";
						$res = mysql_query($sql);
						#echo mysql_num_rows($res);
						#var_dump($res);
						
						//获取数据库的浏览次数
						while($row = mysql_fetch_array($res)){
							$number =  $row['number'];
						}

						//次数+1
						$sql = "UPDATE count_number set number =".($number+1)." WHERE content_id=100";
						mysql_query($sql);
					
						//显示次数
						echo $number;
					?>
				<td>
			</tr>
		</table>
	
</body>
</html>


</span>

    content_news.php

    分页显示数据信息,每一页的数据是一个新闻列表,文字和图片都可以点击,并进入新闻详情页面。

<span style="font-size:18px;"><html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body margin=0>
<table border="1" rules="none" width="100%" cellpadding="5px" bgcolor="#F8F8F8" >
	<tr>

<?php 

	require_once 'mysqlhelper.php';
	header("Content-type:text/html;charset=utf-8");
	

	$helper = new MySQLHelper("news");
	$res = $helper->fn_search("news_content");
	//声明一些变量
	$total_count = mysql_num_rows($res);	//总的数据行数
	$page_count=6;	//每页显示的数据条数
	$page_number=ceil($total_count / $page_count);//总的页数
	
	//获取当前的页码
	if(empty($_GET['page'])){
		$current_page=1;
	}else{
		$current_page=$_GET['page'];
	}
	//当前页的第一条数据应该是
	$offset=$page_count*($current_page-1);

	$sql="select * from news_content limit $offset,$page_count";
	$res = mysql_query($sql);	//查询当前页的数据
	
	while($row = mysql_fetch_array($res)){
		#echo $row['id']."<br>";
		#echo $row['image']."<br>";
		#echo $row['title']."<br>";
?>
	<td width="100px">
		<a href="content.php?news_id=<?php echo $row['news_id'];?>">
			<img src="<?php echo $row['image'];?>"  width="80px" height="80px"/>
		</a>
	</td>
	<td><a href="content.php?news_id=<?php echo $row['news_id'];?>">
		<?php echo $row['title'];?></a>
	</td>
	</tr>
<?php	
	}
?>
<?php
	$key="";

	
	$key.="总页数:".$current_page."/".$page_number."  ";

	if($current_page == 1){
		$key.="首页 ";
		$key.="上一页 ";
	}else{
		$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=1"."\">首页 </a>";
		$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".($current_page-1)."\">上一页 </a>";
	}
	
	if($current_page == $page_number){
		$key.="下一页 ";
		$key.="尾页 ";
	}else{
		$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".($current_page+1)."\">下一页 </a>";
		$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".$page_number."\">尾页 </a>";
	}
	
	$key.="  总的数据条数:".$total_count;
?>
</table>
<p></p>
<?php echo $key;?>
	
</body>
</html></span>


7.设计单条数据详情页面

  content.php

<span style="font-size:18px;"><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script>
	function jump(url){
		//alert(url);
		window.location.href=url;//页面重定向
	}
</script>
</head>
<body>
	<?php
		require_once 'mysqlhelper.php';
		$helper = new MySQLHelper("news");
		//print_r($_GET);
			

		$news_id =$_GET['news_id'];	//获取新闻的id
		
		$sql = "select * from count_number where content_id=".$news_id;
		$res = mysql_query($sql);
		//判断是否是第一次进来
		if(mysql_num_rows($res) == 0){
			$sql = "insert into count_number(content_id,number,is_first) values($news_id,1,'true')";
			#echo "第一次进来";
			mysql_query($sql);
			$number=1;
		}else{
			$sql="select number from count_number where content_id=".$news_id;	
			#echo "不是第一次进来";
			$res = mysql_query($sql);
			$row = mysql_fetch_array($res);
			$number = $row['number']+1;
			$sql="update count_number set number=".$number." where content_id=".$news_id;
			mysql_query($sql);
		}
		
		
		$sql = "select * from news_content where news_id=".$news_id."";
		$res = mysql_query($sql);
		$row = mysql_fetch_array($res);


		echo "<p></p>";
		echo "<center><font size=5px color=red>".$row['title']."</font><p></p></center>";
		echo "<br/>";
		echo "<center><img src=".$row['image']." /></center>";
		
		//显示浏览次数
		echo "页面浏览次数:".$number."     ";

		//点击超链接,跳转到详情页面
		$st =$row['content'];
		echo "<a href='javascript:void(0)' onclick=jump('$st')>跳转到详情页面</a>";
	?>
</body>
</html></span>
三、界面效果


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。