在“ ”中的 "author" 就代表了“ <input> ”中的内容。同样的,这个 "author" 也可以是 "title" 或者其他,值得注意的是,这个 "author" 和字段 author 是不一样的。偶在这个地方提到 两个非常相似的概念:字段 author 和变量 $author (上面的 ”author” 实际上就是 $ author ,因为它代表了 “ <input> ”中的内容)。虽然它们几乎是同名的,但可绝对不是一回事。 Author 是数据表 news 里的一个字段名, PHP 用它来有限定的访问 MySQL 中的数据,在程序中是不能用其它的字符替换的;而 $author 是本程序中用户自己设定的变量符号,其值由 “ <input> ”中对应元素的 name 属性得到。既然它只是变量符号,偶们就可以使用任意字段,只要保证与表单中对应元素的 name 属性一致就可。之所以选择用与字段名相同的字符,是因为这样偶们就不必再费力去多记一个变量名而已。
偶们再来看 <textarea></textarea> 标签中的内容:
<textarea cols="80" rows="15" wrap="HYSICAL">
这个 <textarea></textarea> 中的内容是用来得到 content 字段内容的,因为此字段中的内容太多,所以只能用这个标签了。
当偶们填好这些内容后,只要提交就可以了,那么这一过程又是如何实现的呢? 下面偶们再来看以下的程序:
<input type="submit" value=" 提交新闻 ">
<input type="reset" value=" 重写新闻 ">
这里的 type="submit"/ type="reset" 分别代表提交和重写新闻。 value 属性的内容在此按钮上显示出来。/ 中的含义和上面所说的是一样的。
HTML 中的表单( form )元素是专门负责也用户进行交互式操作的。当点击类型为 submit 的按钮时,表单中所有的元素都将以变量的形式提交给 action 所指的文件来处理。变量名由该元素的 name 属性来确定。在本程序中这个代码如下:
<form action=addnews.php method=post>
在这个地方偶们把处理数据的程序还是放在同一页面( action=addnews.php ),在 method 属性中偶们令 method=post ,这里的 post 是值传递的方式。那现在偶们就在 action 指定的页面来讨论以下的程序:
$author=$_POST["author"];
这里的 $author 是偶们自己定义的变量名, author 是在 <input> 标签中 name 属性中定义的名字。 POST 为 <form> 中 method 定义的值传递方式。通过这种值传递方式得到的数据,偶们一律用 $_POST[" "] 收取。
完整的这类程序如下所示:
if(@$_POST["submit"])
{
$author=$_POST["author"];
$department=$_POST["department"];
$title=$_POST["title"];
$content=parsecontent($_POST["content"]);
$date=date("y-m-d H:i");
mysql_query("INSERT INTO news(title,date,author,department,content) VALUES('$title','$date','$author','$department','$content')");
}
其中的 date( ) 函数用法请查看其他书籍。上面一共是 5 个字段,还有一个字段 id 因为偶们在“额外”中选择了 auto-increment ,所以上面的数据插入到数据库时, id 就自动加 1 了。
当然在这个程序前,必须先连接好数据库,下面的所有与数据库连接的程序也是一样的,必须先连接还数据库。
芽雨原创php新闻系统教程(第一版) 第三讲:新闻程序的算法(二) ------- 显示
二.显示新闻
添加新闻后,就可以让别人来看新闻了。
这里的算法是这样的:先在新闻首页上显示新闻的标题及其他附加内容(如发表时间),这可以用循环输出的办法输出所有的新闻的标题。要查看具体新闻的内容时,点击新闻标题的超级链接进入一个新的页面查看这条新闻。
在开始这程序之前,链接好数据库。
当新闻很多时,偶们就要给新闻分页了,偶们设置好每页显示 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="https://www.jb51.net/article/.$_SERVER["HP_SELF"]."?page=1> 第一页 </a><font></td><td><font><a href="https://www.jb51.net/article/.$_SERVER["HP_SELF"]."?page=".$pages."> 最后一页 </a></font></td>";
$echopage .= "<td><font><a href="https://www.jb51.net/article/.$_SERVER["HP_SELF"]."?page=$pre> 前一页 </a> <a href="https://www.jb51.net/article/.$_SERVER["PHP_SELF"]."?page=$next> 后一页 </a></font></td>";
$echopage .= "<td><font> 到第 <select size='1' onchange='window.location=""https://www.jb51.net/article/.$_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>";