首页 > 编程技术 > php

web开发中PHP MySQL分页显示示例分析

发布时间:2016-11-25 16:16

Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。
 
  一、分页程序的原理
  分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。
  二、主要代码解析

$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_product",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数
$pages=intval($numrows/$pagesize);
//判断页数设置
if (isset($_GET['page'])){
 $page=intval($_GET['page']);
}
else{
 $page=1; //否则,设置为第一页
}
  三、创建用例用表myTable

create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id))
  四、完整代码

<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<?php
 $conn=mysql_connect("localhost","root","");
 //设定每一页显示的记录数
 $pagesize=1;
 mysql_select_db("mydata",$conn);
 //取得记录总数$rs,计算总页数用
 $rs=mysql_query("select count(*) from tb_product",$conn);
 $myrow = mysql_fetch_array($rs);
 $numrows=$myrow[0];
 //计算总页数
【1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到。当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。
 
  【2】Win32下apache2 用get方法传递中文参数会出错:
  test.php?a=你好&b=你也好
  传递参数是会导致一个内部错误
 
  解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)
   .............
  【3】win32下的session不能正常工作
  php.ini默认的session.save_path = /tmp
  这显然是linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,例如session.save_path = c:windows emp
  【4】显示错误信息
  当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽。
  例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo
  【5】Win32下mail()不能发送电子邮件
  在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件,修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)
  php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器。
  【6】初装的mysql如果没有设置密码,应该使用update mysql.user set password="yourpassword" where user="root" 修改密码
  【7】header already sent
  这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!
  【8】更改php.ini后没有变化
  重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置。
  【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)
  PHP4的php4isapi.dll好像和2003有些冲突,只能用CGI模式安装
  步骤一,先www.php.net 下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。安装好以后,在默认网站-->应用程序配置。
利用Apache中的mod_gzip模块,我们可以利用gzip的压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端的浏览器。如果是纯文本的内容,效果非常明显,大约可以压缩到原来的30%-40%,使用户的浏览速度大大加快。
 
  Gzip需要客户端浏览器支持,目前大部份浏览器都支持gzip,如IE,Netscape,Mozilla等,所以这种方法值得一试。我们可以利用PHP中的预定义变量$_SERVER['HTTP_ACCEPT_ENCODING’]来判断客户端浏览器是否支持gzip。
  gzip1.php

if(ereg('gzip',$_SERVER['HTTP_ACCEPT_ENCODING'])) {
 //浏览器支持
} else {
 //浏览器不支持,输出其它内容
}
?>
  接下来我们对上面这个PHP程序进行扩展,使用ob_start(ob_gzhandler)来将网页内容压缩,存入缓冲并发送给支持gzip的浏览器,浏览器会自动将压缩后的内容解压,显示。
  gzip2.php

define('MAX',100);
if(ereg('gzip',$_SERVER['HTTP_ACCEPT_ENCODING']))
{
 //浏览器支持gzip,将内容压缩并缓冲输出
 ob_start("ob_gzhandler");
 $output = '';
 for($i=0;$i<=MAX;$i )
 {
  $output .= "This is line $i ";
 }
 echo "浏览器支持gzip压缩输出";
 echo $output;
}
else
{
 //浏览器不支持,直接输出
 for($i=0;$i<=MAX;$i )
 {
  $output .= "This is line $i ";
 }
 echo "浏览器不支持gzip压缩输出 ";
 echo $output;
}
?>
  使用gzip压缩生成的网页的HTTP头信息与一般的网页相比中会多出这样的信息:

Content-Encoding: gzip
Content-Length: 270
  如果你想得到更详细的信息,请参看mod_gzip项目主页:
  http://sourceforge.net/projects/mod-gzip/
  类似地,我们也可以利用mod_deflate,压缩率比mod_gzip略低一些。调用zip函数需要耗用服务器内存,所以要慎用,视需求而定。
Perl是一种深受世界各地开发者喜爱的实用摘要和报表语言,虽然它是在Unix上诞生和发展起来的,但在Windows编程领域也已经占有一席之地。
 
在ActiveState等公司的领导之下,从1995年中期开始Perl开始了稳定地发展,不仅增加了标准的Perl功能,而且增加了许多面向Windows的功能,比如OLE和COM集成等。
 
事实上,到目前为止所有Perl程序员都已经能够确信,自己为UNIX服务器写的Perl应用移植到Windows服务器后同样能够流畅、稳定地运行,即使是fork实现这类长期以来最令人头疼的移植问题也已经得到解决。
 
而且我们有理由相信,Perl/Windows集成还将进一步发展。自Windows版Perl开发初期开始Microsoft已经成为它的主要资助者,这一事实足以证实Microsoft所承诺的对Perl的支持。按照最近Microsoft和ActiveState所签署的为期三年的投资协议,Perl无疑将成为未来Windows发展的一部分。
 
如果你正在寻找有关Windows版Perl的更多信息,你可以从网络上找到许多优秀的网站,其中包括:



本文通过介绍一些技巧介绍了针对PHP木马攻击的防御之道,通过这些方面你可以更好的防范木马程序。
 
1、防止跳出Web目录
首先修改httpd.conf,如果你只允许你的php脚本程序在web目录里操作,还可以修改httpd.conf文件限制php的操作路径。比如你的web目录是/usr/local/apache/htdocs,那么在httpd.conf里加上这么几行:
php_admin_value open_basedir /usr/local/apache/htdocs
这样,如果脚本要读取/usr/local/apache/htdocs以外的文件将不会被允许,如果错误显示打开的话会提示这样的错误:
Warning: open_basedir restriction in effect. File is in wrong directory in /usr/local/apache/htdocs/open.php on line 4
等等。
 
2、防止php木马执行webshell
打开safe_mode,在php.ini中设置
disable_functions= passthru,exec,shell_exec,system
二者选一即可,也可都选
3、防止php木马读写文件目录
在php.ini中的disable_functions= passthru,exec,shell_exec,system
后面加上php处理文件的函数
主要有
fopen,mkdir,rmdir,chmod,unlink,dir
fopen,fread,fclose,fwrite,file_exists
closedir,is_dir,readdir.opendir
fileperms.copy,unlink,delfile
即成为
disable_functions= passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir
,fopen,fread,fclose,fwrite,file_exists
,closedir,is_dir,readdir.opendir
,fileperms.copy,unlink,delfile
ok,大功告成,php木马拿我们没辙了,遗憾的是这样的话,利用文本数据库的那些东西就都不能用了。
如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限,这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。
net user apache fuckmicrosoft /add
net localgroup users apache /del
ok.我们建立了一个不属于任何组的用户apche。
我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,重启apache服务,ok,apache运行在低权限下了。
 
实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。
标签:[!--infotagslink--]

您可能感兴趣的文章: