php翻页
<?php
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_password = '';
$mysql_database = 'testdb';
///*Connect to the local server,可以在函数名前加上 @ 来抑制失败时产生的错误信息。
$link = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die(mysql_error());
mysql_select_db($mysql_database) or die(mysql_error());
//set charset 设定字符集解决汉字问题
mysql_query("set names 'gbk'");
$rowsPerPage = 3; //定义每页的行数
$row = mysql_fetch_assoc(mysql_query("SELECT count(*) AS c FROM testmsg")); //查询表中的总记录数
$rows = $row['c']; //得到表中总记录数
$pages = ceil($rows / $rowsPerPage); //计算出页数
$curPage = 1; //当前要显示第几页,默认显示第1页
//$_REQUEST变量比较大,一般不用。常用的是$_POST,$_GET,二者与form表单method保持一致。$_GET还支持url传值
if(isset($_GET['curPage'])) //假如用户提交了指定的页数
$curPage = $_GET['curPage']; // 就将欲显示的页数设定为用户指定的值
//倒序查询
//echo $curPage;
$sql = "SELECT * FROM testmsg ORDER BY id DESC"." LIMIT ".($curPage -1)*$rowsPerPage.", $rowsPerPage"; //修改sql语句,使得可以查询出指定的结果集
//echo $sql;
$result = mysql_query($sql) or die(mysql_error());
//列表显示----------显示部分内容不变
while($row = mysql_fetch_assoc($result)){
echo "<table width = '90%' align = 'center' cellpadding = '1' cellspacing = '1' bgcolor = 'blue'> ";
echo " <tr>";
echo " <td rowspan='2' width = '25%' bgcolor = 'white'>";
echo " <li><span style='color:red;'>编号:</span>{$row['id']}</li>";
echo " <li><span style='color:red;'>用户:</span>{$row['email']}</li>";
echo " <li><span style='color:red;'>地址:</span>{$row['ip']}</li>";
echo " <li><span style='color:red;'>时间:</span>{$row['time']}</li>";
echo " <li><font color = 'red'>其他:</font>{$row['other']}"; //html旧式写法
echo " </td>";
echo " <td bgcolor = 'yellow' ><font color = 'red'>标题:</font><a href = modifyMsg.php?id={$row['id']}>{$row['title']}</td>";
echo " </tr>";
echo " <tr>";
echo " <td bgcolor = 'white' >{$row['content']}</td>";
echo " </tr>";
echo "</table>";
echo "<br />";
}
//显示全部分页的链接
echo "<div align = 'center'>";
for($i=1;$i<=$pages;$i++){ //循环显示,每个链接指定curPage属性为其指向的页数就可以了
echo "<a href='testpage201.php?curPage=$i'>$i</a> ";
}
//下拉框分页
echo "<form name = 'form1' action = 'testpage201.php?curPage=$curPage' method = 'GET'>";
echo " <select name= 'curPage' onchange = 'document.form1.submit();'>";
for($i = 1; $i <=$pages; $i++){
if($i == $curPage)
echo "<option selected>$i</option>";
else
echo "<option>$i</option>";
}
echo " </select>";
echo " </form>";
//首页、前页、后页、末页的链接
if($curPage>1){
echo "<a href = 'testpage201.php?curPage=1'>首页</a> ";
echo "<a href = 'testpage201.php?curPage=".($curPage-1)."'>前页</a> ";
}
if($curPage<$pages){
echo "<a href='testpage201.php?curPage=".($curPage+1)."'>后页</a> ";
echo "<a href = 'testpage201.php?curPage=$pages'>末页</a> ";
}
echo "</div>";
//列表显示完毕
mysql_free_result($result);
mysql_close($link);
//$link->close()等同于mysql_close($link);
//$result->free()等同于mysql_free_result($result);
//$link->query($sql)等同于mysql_query($sql,$link);
/*
MySQL limit的实际用法的详细解析,在我们使用相关的查询语句的时候,一般都要返回前几条或是中间的某几行数据,这时你应如何处理呢?不必担心,MySQL数据库已经为我们提供了这样一个功能。
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。MySQL LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
MySQL> SELECT * FROM table LIMIT 5,10;
检索记录行 6-15
为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
MySQL> SELECT * FROM table LIMIT 95,-1;
检索记录行 96-last.
如果只给定一个参数,它表示返回最大的记录行数目:
MySQL> SELECT * FROM table LIMIT 5;
检索前 5 个记录行。换句话说,LIMIT n 等价于 MySQL LIMIT 0,n。以上的相关内容就是对MySQL limit的用法详解的介绍,望你能有所收获。 */
?>
<?php
$link = mysql_connect("localhost","root","");
$sqlstr = "SELECT * FROM testmsg";
$send = mysql_db_query("testdb",$sqlstr);
$fdat = mysql_fetch_row($send);
$fdat = mysql_fetch_row($send); //试试调用两次的结果?
//mysql_fetch_row() 从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。
//依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE。
//print_r($fdat);
//foreach的两种写法
//foreach($fdat as $value){
foreach($fdat as $key => $value){
echo "$key:$value<br />";
}
mysql_data_seek($send,0); //指针所在位置回到第一条记录上
$fdat = mysql_fetch_row($send);
foreach($fdat as $name => $valu){ //key => value 可以换写法命名
echo "$name:$valu<br />";
}
mysql_free_result($send);
mysql_close($link);
/*
foreach
PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
自PHP 5 起,还可能遍历对象。
Note:
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。
Note:
除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。
自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。
*/
?>
<?php
$link1 = mysql_connect("localhost","root","");
$link2 = mysql_connect("localhost","root","");;
//mysql_close();
//如果关闭连接,则无输出并报错。
/*
bool mysql_close ([ resource $link_identifier ] )
mysql_close() 关闭指定的连接标识所关联的到 MySQL 服务器的非持久连接。如果没有指定 link_identifier,则关闭上一个打开的连接。
*/
$result = mysql_query("select count(*) from testdb.testmsg"); //查询结果集
$row = mysql_fetch_row($result); //从结果集中取出一行作为枚举数组返回
print_r($row); //输出数据表的总行数的数组信息
echo $row[0];
?>
㈡ 用PHP如何实现分页并能够实现上一页,下一页,跳转到()页的功能
<html><head>
<title>分页示例(php</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<?php
$pagesize=10; //设定每一页显示的记录数
$conn=mysql_connect("localhost","root","jrq");
mysql_select_db("sj",$conn);
$rs = mysql_query( "select * from `dw_newsdata`",$conn); //这里有第二个可选参数,指定打开的连接
//-----------------------------------------------------------------------------------------------//
//分页逻辑处理
//-----------------------------------------------------------------------------------------------
$tmpArr = mysql_fetch_array($rs);
$numAL = mysql_num_rows($rs); //取得记录总数$rs
$pages=intval($numAL/$pagesize); //计算总页数
if ($numAL % $pagesize) $pages++;
//设置缺省页码
//↓判断“当前页码”是否赋值过
if (isset($_GET['page'])){ $page=intval($_GET['page']); }else{ $page=1; }//否则,设置为第一页
//↓计算记录偏移量
$offset=$pagesize*($page - 1);
//↓读取指定记录数
$rs=mysql_query("select * from `dw_newsdata` limit $offset,$pagesize",$conn);//取得—当前页—记录集!
$curNum = mysql_num_rows($rs); //$curNum - 当前页实际记录数,for循环输出用
?>
<table border="0" width="80%">
<tr>
<td width="50%" bgcolor="#E0E0E0">标题</td>
<td width="50%" bgcolor="#E0E0E0">发布时间</td>
</tr>
<?php
while ($tmpArr = mysql_fetch_array($rs)) //提取一行,并循环判断
{
$i=0;
// for($a=0;$a<$ColNum;$a++) //==for结束==
?>
<tr>
<td width="50%"><?= $tmpArr[1]; //$tmpArr["news_title"] ; ?></td>
<td width="50%"><?php echo $tmpArr[2]; //$tmpArr["news_cont"]; ?></td>
</tr>
<?php
}//==while结束==
?>
</table>
<?php
//============================//
// 翻页显示 一
//============================//
echo "<p>"; // align=center
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
if ($page > 1)
{
echo "<a href='?page=".$first."'>首页</a> ";
echo "<a href='?page=".$prev."'>上一页</a> ";
}
if ($page < $pages)
{
echo "<a href='?page=".$next."'>下一页</a> ";
echo "<a href='?page=".$last."'>尾页</a> ";
}
//============================//
// 翻页显示 二
//============================//
echo " | 共有".$pages."页(".$page."/".$pages.")";
for ($i=1;$i< $page;$i++){echo "<a href='?page=".$i."'>[".$i ."]</a> ";} // 1-先输出当前页之前的
if ($page > 0) echo "[".$page."]";; // 2-再输出当前页
for ($i=$page+1;$i<=$pages;$i++){echo "<a href='?page=".$i."'>[".$i ."]</a> ";}// 3-接着输出当前页之后
echo "转到第 <INPUT maxLength=3 size=3 value=".($page+1)." name=gotox> 页 <INPUT hideFocus onclick=\"location.href='?page=gotox.value';\" type=button value=Go name=cmd_goto>";
echo "</p>";
?>
</body>
</html>
㈢ php使用分页类后翻页地址后面无限加&page=1&page=2......(分页可以实现在,但是老是加page)
参数处理的函数有问题。LZ写的代码太复杂了。
其他参数和分类的page参数最好分开整合。
写一个函数,多传几个参数进去,就很非常好的设置分页了。