这周做了个分页,虽说代码不长,但理解起来还是有一定难度的。就把中间碰到的一系列问题以及自己的解决过程记录下来吧。
实现分页需要两个文件。
pDivided.php用来显示第一页的内容、连接数据库、包括一些数据库的操作方法以及页数$P
(本页中$p的值默认为1)的传递。
index.php用来显示其他页数,接受$p
参数,在URL中显示当前页数。
效果如下:
首先是数据库的连接(之前做过一次了,所以问题不大 )
设置每页显示的留言数$pagesize(设置的3)
确定页数p参数$p = $_GET['p']?$_GET['p']:1
这里是一个条件表达式,先用$_GET[]
方法获取URL中p值,若p不存在(未通过超链接打开的页面即第一页没有p),则将1赋给$p;
创建数据指针$offset
通过$offset的值来控制本页显示的数据
//数据指针
$offset = ($p-1)*$pagesize;
//查询本页显示的数据
$query_sql = "SELECT * FROM guestbook ORDER BY id DESC LIMIT $offset , $pagesize";
循环输出
while($gblist = mysql_fetch_array($result)){
echo '<a href="',$gblist['nickname'],'">',$gblist['nickname'],'</a>';
echo '发表于:',date("Y-m-d H:i", $gblist[createtime]),'<br />';
echo '内容:',$gblist['content'],'<br /><hr />';
}
计算总的页数和留言总数
//计算留言总数
$count_result = mysql_query("SELECT count(*) as count FROM guestbook");
$count_array = mysql_fetch_array($count_result);
//计算总的页数
$pagenum=ceil($count_array['count']/$pagesize);
echo '共 ',$count_array['count'],'条留言';
最后是输出各页数目及超链接
if ($pagenum > 1) {
for($i=1;$i<=$pagenum;$i++) {
//若为当前页则加[]区别
if($i==$p) {
echo ' [',$i,']';
} else {
echo ' <a href="index.php?p=',$i,'">',$i,'</a>';
}
}
}
中文乱码问题:一开始把教程上的源代码下下来看一下效果,发现有的中文正常显示,有的则是乱码。为解决问题在php代码的一开始加上了header('Content-type:text/html;charset=utf-8');
这里我选用的是utf-8编码,因为网上有介绍说mysql最好用这种编码,所以我把配置文件my.ini也修改了一下。
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-storage-engine=MyISAM
在[mysqld]下加入:
default-collation=utf8_bin
init_connect='SET NAMES utf8'
另一种方法是在需要做数据库操作中的php程序前加my_query(“setnames‘编码’”);
,编码和php编码一致,如果php编码是gb2312那mysql编码就是gb2312,如果是utf-8那mysql编码就是utf8,这样插入或检索数据时就不会出现乱码了 。
效果如下
乱码解决了,但是出现了NOTICE,虽不是致命错误,但是看起来非常不舒服,所以找到的答案是这样的。
关闭 PHP 提示的方法
搜索php.ini:
error_reporting = E_ALL
改为:
error_reporting = E_ALL & ~E_NOTICE
然而这个方法并没有在我的例子中起效果,┑( ̄Д  ̄)┍
—————————————————————————————————————————
这是一条更新分割线
在第二次打开wampserver时,程序图标呈现黄色,并且mysql无打开
上网找了一下,发现有些答案提及到编码问题,所以应该是自己有些地方改多了,内部编码方式被修改导致数据库打不开。所以将修改的my.ini的代码全部注释掉。方法可行,而且不影响中文留言的显示,唉,只能说别人的方法并不一定能完全解决自己的问题,有时还可能带来不必要的麻烦。
好吧,就到这里。