新用户注册恢复喜悦村十周年

芽雨原创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>&nbsp;&nbsp;<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"]."&nbsp;".$rows["department"]."&nbsp;".$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>&nbsp;&nbsp;&nbsp;".$rows["content"]."</font></td></tr>";
     echo "<tr>";
     echo "</table>";
     }

    相信通过前面的讲解,您一定可以看懂上面的程序了。