php源码新闻发布系统.docx
- 文档编号:10978378
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:14
- 大小:24.64KB
php源码新闻发布系统.docx
《php源码新闻发布系统.docx》由会员分享,可在线阅读,更多相关《php源码新闻发布系统.docx(14页珍藏版)》请在冰豆网上搜索。
php源码新闻发布系统
第一讲:
用phpmyadmin建立数据库
首先建立一个数据库,名为yayu。
在这个数据库下建立一个数据表,名为news。
下面进入一个重点,那就是在表news下建立各个字段。
那么,什么叫字段呢?
通俗点,就是一类事物的总称。
比如说,所有的新闻发表时间用一个名词来代表(从偶的经验来看,用phpmyadmin建立字段可以用中文,但从习惯来说还是用英文,没办法,计算机美国最牛嘛)。
偶们用“time”来表示。
在字段time下可以有很多“发表时间",那么如何来区分这些时间呢,这个可以查询其它字段下的内容,比如偶们建立新闻的标题的字段为“title”,title字段下的内容按照常理说来是没有一样的.所以可以通过一个标题来查询这个发表时间。
其实我们可以让每个title或time下的内容都对应一个编号,那就是字段——
“id”:
字段“id”是一个人们默认的首选字段,其它字段下的内容可以重复出现,但这个字段却是从1开始增大的阿拉伯数字.在设置这个字段时,要设置主键、索引、唯一以及auto—increment。
这个auto-increment就是自动增加的意思。
当任一字段增加内容时,这个字段就自动增加1,也就是说,任一字段都对应一个唯一的id,比如1、2、7……
下面谈谈新闻部分字段的建立。
1。
id:
意义为每个新闻的编号,它是唯一的,类型为tingint,这个tingint类型无须指定长度,系统默为4;在“额外”中选择auto-increment,并选择主键.
2.author:
意义为作者(新闻发布人),设置类型为varchar,设置这个字段长度时,如果考虑作者均为中国人,则8个字节为上限(4个汉字),但如果考虑到作者可能为外国人,8个字节显然太少了,对其它字段也存在同样的问题,在这里偶们把长度设置为8吧。
3.title:
意义为新闻标题,类型为varchar,长度为60吧,属性为primanykey。
4.content:
意义为新闻的内容,类型为text。
这个类型无须设置长度了。
5.source:
意义为新闻的来源,类型为varchar,长为60。
6。
date:
意义为发表时间,类型为datetime,长度无须设置,属性为primanykey。
下面补充以下字段类型的相关内容:
1.date:
时间和日期类型。
时间和日期类型还包括以下:
⊕datetime:
0000-00—0000:
00:
00
⊕date:
0000-00—00
⊕timestamp:
00000000000000(14个0,长度取决于显示尺寸)
⊕time:
00:
00:
00
⊕year:
0000
2.content字段代表新闻内容,由于其容量可能会很大,因此采用text类型(最多支持65535字节)
3.title字段设置为primanykey,如果不会有一条以的新闻具有相同的发表时间,date字段也可以作为?
primanykey,这样今后对新闻的排序和检索会更加方便。
4.text类型的字段虽然也属于一种字符类型,但其大小不能指定,如果设置长度,则系统会提示SQL语句出错.
现在,news数据表就建立好了。
由于新闻不是所有人都能增加的,只能有管理员来做,所以现在我们再来建立数据表users来存放管理员们。
1:
id:
类型为tinyint,额外设置为auto-increment、主键。
2:
name:
意义为管理员名称,类型为varchar,长为8,属性为primanykey。
3:
password:
意义为密码,类型为varchar,长为32.
4:
mail:
一样为邮件地址,类型为varchar,长为30.
现在,两个数据库就设置好了,下面偶们进入新闻程序的开发中。
第二讲:
新闻程序的基础
一.连接数据库的基础
偶们添加、取出、修改、删除新闻都必须首先做一件事,那就是连接主机,选择数据库,向数据库发出请求。
否则一切都是纸上谈兵。
下面介绍三个重要的MySQL语句,分别是:
mysql_pconnect()(连接主机),mysql_select_db()(选择数据库),mysql_query()(向数据库发出请求).
1.mysql_pconnect()
它的作用是连接主机。
语法为:
mysql_pconnect(“要登陆的主机","登陆时的用户名”,"密码”);
如mysql_pconnect(“localhost",”root",”");
其中的“localhost”、“root”都是phpmyadmin默认下的主机名和用户名,并且密码为空.
同功能的函数还有mysql_connect()。
语法是一样的,区别在于前者开启一个长期连接,且无法使用mysql_close()函数关闭,而后者使用完后要用mysql_close()及时的关闭.对于一个网站来说,使用前者比后者好.这样可以减轻MySQL服务器处理连接和关闭连接的负担。
这个函数成功连接后,会返回一个连接ID。
因此,这个函数一般这样写:
$link=mysql_pconnect();
说到这,补充一个函数mysql_close(),
语法为:
mysql_close(“要关闭的连接ID”);
比如:
mysql_close($link);
注:
所有()内都为字符串,有$符号时就无须”"了。
2.mysql_select_db()
它的作用是选择一个数据库为当前数据库。
以后的操作就都在这个数据库中进行了.这个函数如果执行成功,返回一个true,否则返回false.
语法为:
mysql_select_db(“数据库名称","连接的ID”);
第二个参数可以省略,它会自动寻找并连接最后一个使用的连接ID。
在本程序中,这个语句偶们写成:
mysql_select_db(“yayu",$link);
3.mysql_query()
它的作用是向服务器发出一个提出请求的字符串。
语法为:
mysql_query(“提出问题的字符串”,连接ID);
其中第一个参数是一个完整的MySQL语句,第二个参数可以省略,偶一般是把它省略的。
在使用这个函数前应该先用mysql_select_db()指定要使用的数据库。
当提问的字符串是update、insert或delete时,函数返回的结果是true或false,表明查询是否成功,如果提问字符串是select语句则返回一个结果ID,如果select发生错误,则返回false.
了解了上面三个重要的函数后,偶们就可以对数据库发号施令了。
那偶们用什么来发号施令呢?
下面偶们再来看四个MySQL语句吧!
二.向数据库发出请求语句基础知识
它们分别是:
insert(向数据库插入数据)、delete(删除数据表中的数据)、select(检索数据)、update(更新数据)。
1insert():
向数据库插入数据。
语法A:
insertinto数据表名(字段1,字段2,……)values(“字段1d的内容",”字段的2内容"……)
语法B:
insertinto数据表名set字段1="字段1的内容",字段2=”字段2的内容”,……
对A中,字段名可以省略,但后面的values部分的内容必须要和phpmyadmin中定义的字段顺序一样.
下面请看例子:
A:
insertintonews(title,date,author,source,content)values($title,$date,$author,$source,$content)
注:
上面的“$……“代表了要添加字段的内容,定义时:
$……=内容;
B:
insertintonewssettitle=$title,author=$author
注:
如果内容是数字,则””可以省略。
2delete():
删除数据表中的数据
语法:
deletefrom数据表名where指定地点limit数字
如果没有“where指定地点”则表中所有数据都没了.“limit 数字”可以告诉服务器可以删除的最大行数。
例子:
deletefromnewswhereid=$idlimit1
3.select():
检索数据
语法:
select字段名1,字段2,……from数据表名where地点
如果想列出所有记录中所有列的数据,可以使用“*“代表字段名.
例子:
A:
selectid,authorfromnewswhereid=$id
B:
select*fromnewswhereid=$id
4update():
更新数据
语法和insert几乎是完全一样的。
如:
updatenewssetauthor=$author,title=$titlewhereid=$id
值得注意的是,使用update语句时,要注意使用where字句,否则可能会导致大量的数据丢失。
比如:
updatenewssetauthor=”芽雨"
这个操作会使表中所有的作者都变成“芽雨”了。
再举一个正面的例子,记录管理员的表users中,如果有一个字段为age,用来存储用户的年龄,一年后,他们要增加一岁,可以使用以下的语句:
updateuserssetage=age+1
太好了,偶们现在已经掌握程序大部分的基础了,还有小部分偶们以后在例子中掌握吧.
现在偶们面临的问题是如何写出算法了。
第三讲:
新闻程序的算法
(一)———-—-添加新闻
一。
添加新闻
添加新闻既是向数据库添加新的数据。
整个算法是这样的:
管理员在表单中填写新闻的内容,包括:
title,author,source,content,另外两个字段(id,time)的内容有服务器完成,当然也要自己写程序,只是不由自己手动而已。
提交表单后,用MySQL语句将它们添加到数据库中。
下面简单介绍一下表单中标签和
标签为单行文本框。
偶们常用的属性有:
name,type。
name属性指定了变量的名称,既这个名称代表了这个中的内容。
type属性指定了
如果type=text,则为一般性的文字.如果type=password,则这个“
在本程序中此段程序如下所示:
〈inputname=”author"type="text”size=”40”maxlength=”20”〉
在“name="author"”中的"author”就代表了“”中的内容。
同样的,这个"author"也可以是"title”或者其他,值得注意的是,这个"author"和字段author是不一样的。
偶在这个地方提到两个非常相似的概念:
字段author和变量$author(上面的"author"实际上就是$author,因为它代表了“
Author是数据表news里的一个字段名,PHP用它来有限定的访问MySQL中的数据,在程序中是不能用其它的字符替换的;而$author是本程序中用户自己设定的变量符号,其值由“”中对应元素的name属性得到。
既然它只是变量符号,偶们就可以使用任意字段,只要保证与表单中对应元素的name属性一致就可。
之所以选择用与字段名相同的字符,是因为这样偶们就不必再费力去多记一个变量名而已。
偶们再来看
〈textareaname="content"cols="80”rows=”15"wrap="HYSICAL">
这个〈textarea>〈/textarea〉中的内容是用来得到content字段内容的,因为此字段中的内容太多,所以只能用这个标签了。
当偶们填好这些内容后,只要提交就可以了,那么这一过程又是如何实现的呢?
下面偶们再来看以下的程序:
这里的type=”submit"/type=”reset”分别代表提交和重写新闻。
value属性的内容在此按钮上显示出来。
name="reset"/name=”submit”中的含义和上面所说的是一样的。
HTML中的表单(form)元素是专门负责也用户进行交互式操作的。
当点击类型为submit的按钮时,表单中所有的元素都将以变量的形式提交给action所指的文件来处理。
变量名由该元素的name属性来确定。
在本程序中这个代码如下:
在这个地方偶们把处理数据的程序还是放在同一页面(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-dH:
i”);
mysql_query("INSERTINTOnews(title,date,author,department,content)VALUES('$title’,'$date',’$author','$department’,'$content')");
}
其中的date()函数用法请查看其他书籍。
上面一共是5个字段,还有一个字段id因为偶们在“额外”中选择了auto—increment,所以上面的数据插入到数据库时,id就自动加1了.
当然在这个程序前,必须先连接好数据库,下面的所有与数据库连接的程序也是一样的,必须先连接还数据库.
第三讲:
新闻程序的算法
(二)--———-—显示
二.显示新闻
添加新闻后,就可以让别人来看新闻了.
这里的算法是这样的:
先在新闻首页上显示新闻的标题及其他附加内容(如发表时间),这可以用循环输出的办法输出所有的新闻的标题。
要查看具体新闻的内容时,点击新闻标题的超级链接进入一个新的页面查看这条新闻.
在开始这程序之前,链接好数据库。
当新闻很多时,偶们就要给新闻分页了,偶们设置好每页显示10条新闻。
具体的分页程序如下:
$respage=mysql_query(”SELECTCOUNT(*)FROMnews;");//$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=" $echopage.="〈td>”。 $pages."页”; $echopage。 ="〈td>〈font> page=1〉第一页〈font>〈ahref="。 $_SERVER["HP_SELF"].”? page=".$pages。 ”>最后一页〈/a〉 $echopage。 =”〈td>〈font> "? page=$pre>前一页 page=$next〉后一页〈/a> $echopage。 ="〈td〉 $_SERVER[”PHP_SELF"].”? page=\"+this.value’>\n"; for($i=1;$i〈=$pages;$i++){ if($i==$current) $echopage.=" else $echopage。 =”〈optionvalue=’$i’>$i〈/option〉\n"; } $echopage。 =”"; $echopage。 =”〈/tr>〈/table>”; 对这段程序偶就不做详细的讲解了。 因为很麻烦,再说这和新闻程序的算法不是一回事,呵呵。 在用的时候,偶们在输出的新闻标题后面这样写就可以了: echo" 放在后面是因为$echopage。 里面包含了选择去第几页的程序。 偶们再来看以下程序: 1: $sql="SELECT*FROMnewsorderbyiddescLIMIT$now,$recordnum”; 这里的“orderbyiddesc"意为驱除的记录是按编号由大到小的顺序输出的,换句话说就是新闻的输出总是新发表的在前面。 “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" echo"〈tdalign=’left'valign=’middle’〉 。 /sucai/biaozhi。 JPG’width='15’height=’15'>〈ahref='index.php? id=".$rows[”id"].”’target=_blank>〈font〉”.$rows["title”].”["。 $rows["date”].”] echo"〈/tr〉”; } while($rows)便是按id的由大到小的顺序输出新闻的。 $rows[”title”],$rows["author"]就是数组形式的内容了. 下面来谈谈如何查看每一条新闻的内容。 偶们来看看上面第4个程序中的: 〈ahref=’index。 php? id=”.$rows["id"]。 ”'target=_bl 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。 copyright@ 2008-2022 冰点文档网站版权所有 经营许可证编号:鄂ICP备2022015515号-1