芽雨原创php新闻系统教程(第一版) 第三讲:新闻程序的算法(二) ------- 显示
这个在偶个人主页上的地址是
http://yayu.512j.com/php/xwjc/04.htm
二.显示新闻
添加新闻后,就可以让别人来看新闻了。
这里的算法是这样的:先在新闻首页上显示新闻的标题及其他附加内容(如发表时间),这可以用循环输出的办法输出所有的新闻的标题。要查看具体新闻的内容时,点击新闻标题的超级链接进入一个新的页面查看这条新闻。
在开始这程序之前,链接好数据库。
当新闻很多时,偶们就要给新闻分页了,偶们设置好每页显示 10 条新闻。
具体的分页程序如下:
$respage = mysql_query("SELECT COUNT(*) FROM news;"); //$num 是数据库中总纪录数
while($row = mysql_fetch_row($respage))
{
$num = $row[0];
}
$recordnum =10;
$pages = ceil($num/$recordnum); // $recordnum 是每页显示多少条记录, $pages 是一共有多少页
if (@$_GET["page"]) // 获取 url 中的参数 page
{
//$current 是当前页 ,$pre 是前一页的, $next 是后一页, $pre 和 $next 为后面前一页和后一页的连接参数 page 的值
// 如果 url 中的参数为 1 ,把当前页置为 1 前一页, $pre 也为一, $next 为 2
if($_GET["page"]==1)
{
$current = 1;
$pre = 1;
$next = 2;
}else{
// 如果 url 中的参数不为一(不是第一页),就把当前页取值为 url 中获得的参数, $pre 为当前页减 1 , $next 为加 1
$current = $_GET["page"];
$pre = $current-1;
$next = $current+1;
}
}else {
// 如果 url 中没有参数 page ,当前页置为 1 , $pre=1,$next=2
$current = 1;
$pre = '1';
$next = 2;
}
$now = ($current-1)*$recordnum;
$echopage = "<table width=450 cellpadding=0 cellspacing=0><tr>";
$echopage .= "<td><font>".$pages." 页 </font></td>";
$echopage .= "<td><font><a href=".$_SERVER[" HP_SELF"]."?page=1> 第一页 </a><font></td><td><font><a href=".$_SERVER[" HP_SELF"]."?page=".$pages."> 最后一页 </a></font></td>";
$echopage .= "<td><font><a href=".$_SERVER[" HP_SELF"]."?page=$pre> 前一页 </a> <a href=".$_SERVER["PHP_SELF"]."?page=$next> 后一页 </a></font></td>";
$echopage .= "<td><font> 到第 <select name='topage' size='1' onchange='window.location=\"".$_SERVER["PHP_SELF"]."?page=\"+this.value'>\n";
for($i=1;$i<=$pages;$i++){
if($i==$current)
$echopage .= "<option value='$i' selected>$i</option>\n";
else
$echopage .= "<option value='$i'>$i</option>\n";
}
$echopage .= "</select> 页 </font></td>";
$echopage .= "</tr></table>";
对这段程序偶就不做详细的讲解了。因为很麻烦,再说这和新闻程序的算法不是一回事,呵呵。在用的时候,偶们在输出的新闻标题后面这样写就可以了:
echo "<td align='center'>".$echopage."</td>";
放在后面是因为 $echopage. 里面包含了选择去第几页的程序。
偶们再来看以下程序:
1 : $sql="SELECT * FROM news order by id desc LIMIT $now,$recordnum";
这里的“ order by id desc ”意为驱除的记录是按编号由大到小的顺序输出的,换句话说就是新闻的输出总是新发表的在前面。“ LIMIT $now,$recordnum ”限制了新闻输出的数目, id 的大小在 $now,$recordnum 之间,具体 $now,$recordnum 的数值请看上面的分页程序的讲解(粗黑体字部分)。
2 : $res=mysql_query($sql);
这条语句意思是向服务器发送请求,并将返回的结果保存在 $res 中。
3 : $rows=fetch_assoc($res);
这条语句意思是将查询结果 $res 的内容拆到一个数组 rows 中。如果 $res 中没有数据,函数返回 false 值。 fetch_assoc( ) 函数的作用和 mysql_fetch_row() 是一样的。
4 : while($rows)
{
echo "<tr>";
echo "<td align='left' valign='middle'><img src='../sucai/biaozhi.JPG' width='15' height='15'><a href='index.php?id=".$rows["id"]."' target=_blank><font>".$rows["title"]."[".$rows["date"]."]</font></a></td>";
echo "</tr>";
}
while($rows) 便是按 id 的由大到小的顺序输出新闻的。 $rows["title"] , $rows["author"] 就是数组形式的内容了。
下面来谈谈如何查看每一条新闻的内容。
偶们来看看上面第 4 个程序中的:
<a href='index.php?id=".$rows["id"]."' target=_blank><font>".$rows["title"]."[".$rows["date"]."]</font></a>
其中的“ href='index.php?id=".$rows["id"]."' ”就是第 $rows["id"] 条新闻的具体地址了。从上面也可以看出显示具体新闻的程序也在 index.php 中了。当偶们点击这个超级链接时,此程序将参数传递给 PHP 文件中的同名变量。需要注意的是,你只能向动态页面传递参数,而不能传递给 .htm 结尾的静态页面。
那这里所说的参数是指什么呢?上面的“ index.php?id=".$rows["id"]." ”的“?”就是变量的开始,“ id ”则是变量名,“ ".$rows["id"]." ”就是变量的值了。如果还想向 PHP 文件传递更多的参数,可以用“ & ”隔开。例如:
index.php?id=".$rows["id"]."& title=".$rows["title"]."
在本程序中,偶们得到的变量名为“ id ”,现在偶们来分析这段程序吧!
1 :首先偶们要保证这个 id 在数据库是有数据的,所以偶们用以下语句来判断:
if(isset($_GET["id"])){ }
这里的 $_GET["id"] 就是从浏览器地址栏中接受数据的方式。 isset( ) 是判断有无数据的函数。
2 :如果有数据,偶们就把以下的程序写入上面的“ { } ”中。
$sql= "select * from news where id=".$_GET["id"]."";
$res= mysql_query($sql);
$rows=fetch_assoc($res);
while($rows)
{
echo "<table width=750 cellpading=1 cellspacing=1 border=0 >";
echo "<tr>";
echo "<td colspan='3' valign='middle' align='center'><font size='+1' color=red><b>".$rows["title"]."</b></font></td>";
echo "</tr><br>";
echo "<tr>";
echo "<td width='100%' valign='middle' align='center'><font color=red size='2'>".$rows["date"]." ".$rows["department"]." ".$rows["author"]."</font></td>";
echo "<tr>";
echo "<tr>";
echo "<td colspan='3'><hr></td>";
echo "</tr>";
echo "<tr>";
echo "<td colspan='3' valign='middle'><font> ".$rows["content"]."</font></td></tr>";
echo "<tr>";
echo "</table>";
}
相信通过前面的讲解,您一定可以看懂上面的程序了。 |