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>

三、界面效果

时间: 2025-01-31 05:17:21

PHP之分页显示数据-新闻系统的相关文章

Flask分页显示数据

在做网页的过程中,随着展示的数据增多,如果要在一页中显示全部内容,浏览速度会变慢且不符合实际需求.在 Web 浏览器中, 内容多的网页需要花费更多的时间生成.下载和渲染, 所以网页内容变多会降低用户体验的质量.这一问题的解决方法是分页显示数据,进行片段式渲染. 在页面中渲染数据 <span style="font-size:18px;">app/main/views.py</span> @main.route('/userManage_admin', metho

jQuery+Ajax+PHP+Mysql实现分页显示数据

css <style type="text/css"> #loading{ position: absolute; top: 200px; left:400px; } #container .pagination ul li.inactive, #container .pagination ul li.inactive:hover{ background-color:#ededed; color:#bababa; border:1px solid #bababa; curs

分页显示数据----前端(将数据库中的信息分页显示到网页)

在上篇文章中,我们已经完成了分页显示的后台处理,现在进行前端的处理. 期望显示结果: 由于对于不同的项目.不同的数据库数据部分不同,所以我们将分页部分提取出来,单独建立jsp页面: 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib prefix="c"

repeater 分页显示数据

表名:ChinaStates 控件:Repeater 查询代码DA: public class ChinaStatesDA { private DataClassesDataContext Context;              // 构建LINQ public ChinaStatesDA() { Context = new DataClassesDataContext(); } public List<ChinaStates> Select(int nowye,int numbers)

JSP页面分页显示数据

效果如上图所示!最多显示10条:完整jsp和后台代码如下: <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/j

Sqlite 数据库分页查询(ListView分页显示数据)

下面介绍一下我的这个demo. 流程简述: 我在raw文件夹下面放了名称为city的数据库,里面包含全国2330个城市,以及所属省,拼音简写等信息. 首先 在进入MainActivity的时候,创建数据库并读入sd卡文件中data/data/databases/city. 然后 我再开启子线程去读取前50条数据,显示在ListView中. 当用户浏览数据, 前50条不够时,他会滑动ListView以查看更多数据,此时,listview的数据源会递增,50 ,100,150,.... 以50为增量

第一个smarty例子--分页显示数据

模板页index.tpl: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv=&qu

使用ivx实现分页获取数据的经验总结

在实际案例中我们经常需要展示一些数据,而这些数据都是存放在后台的数据库之中的而且可能数量庞大,在前台的界面中一下子全都展示出来肯定是不现实的,另外一次性让后台传输如此多的数据到前台也会有很大的延迟,使用户体验较差.因此,我们就需要采取一种分页的方式来少量多次的获取数据,这样用户每次操作之后都能很快得到反馈,同时前台也不用存放很多数据造成案例卡顿,今天就来说说如何实现这种分页效果.1.组件结构Demo中的结构比较简单,页面下放置了一个列作为案例主体,列内添加了一个分页组件,还有一个for容器用于循

新闻发布系统(分页显示)

根据上次的新闻发布展示页面效果,进行分页操作: 分页实现: 实现数据的分页显示,需要以下几个关键步骤: ①确定每页显示的总页数 ②计算显示的总页数 ③编写SQL语句 一.页面效果图 1.创建util包,Page类,定义相关属性并进行封装: package cn.news.util; import java.util.List; import cn.news.entity.NewsDetail; public class Page { //当前页 private int pageIndex; //