简单的php新闻发布系统教程


Posted in PHP onMay 09, 2014

简单的php新闻发布系统教程(第一版)第一讲:用 phpmyadmin 建立数据库首先建立一个数据库,名为 yayu 。在这个数据库下建立一个数据表,名为 news 。下面进入一个重点,那就是在表 news 下建立各个字段。

那么,什么叫字段呢?通俗点,就是一类事物的总称。比如说,所有的新闻发表时间用一个名词来代表(从偶的经验来看,用 phpmyadmin 建立 字段可以用中文,但从习惯来说还是用英文,没办法,计算机美国最牛嘛)。偶们用“ time ”来表示。在字段 time 下可以有很多“发表时间”,那 么如何来区分这些时间呢,这个可以查询其它字段下的内容,比如偶们建立新闻的标题的字段为“ title ”, title 字段下的内容按照常理说来是 没有一样的。所以可以通过一个标题来查询这个发表时间。其实我们可以让每个 title 或 time 下的内容都对应一个编号,那就是字段——

“ id ”:字段“ id ”是一个人们默认的首选字段,其它字段下的内容可以重复出现,但这个字段却是从 1 开始增大的阿拉伯数字。在设置这 个字段时,要设置主键、索引、唯一以及 auto-increment 。这个 auto-increment 就是自动增加的意思。当任一字段增加内容 时,这个字段就自动增加 1 ,也就是说,任一字段都对应一个唯一的 id ,比如 1 、 2 、 0 27 ……

下面谈谈新闻部分字段的建立。

1. id :意义为每个新闻的编号,它是唯一的,类型为 tingint ,这个 tingint 类型无须指定长度,系统默为 4 ;在“额外”中选择 auto-increment ,并选择主键。

2. author :意义为作者 (新闻发布人),设置类型为 varchar ,设置这个字段长度时,如果考虑作者均为中国人,则 8 个字节为上限( 4 个汉字),但如果考虑到作者 可能为外国人, 8 个字节显然太少了,对其它字段也存在同样的问题,在这里偶们把长度设置为 8 吧。

3. title :意义为新闻标题,类型为 varchar ,长度为 60 吧,属性为 primany key 。

4. content :意义为新闻的内容,类型为 text 。这个类型无须设置长度了。

5. source :意义为新闻的来源,类型为 varchar ,长为 60 。

6. date :意义为发表时间,类型为 datetime ,长度无须设置,属性为 primany key 。

下面补充以下字段类型的相关内容:

1 . date :时间和日期类型。时间和日期类型还包括以下:

? datetime : 0000-00-00 00:00:00

? date: 0000-00-00

? timestamp: 00000000000000 ( 14 个 0 ,长度取决于显示尺寸)

? time: 00:00:00

? year: 0000

2 . conten t 字段代表新闻内容,由于其容量可能会很大,因此采用 text 类型(最多支持 65535 字节)

3 . title 字段设置为 primany key ,如果不会有一条以的新闻具有相同的发表时间, date 字段也可以作为? primany key ,这样今后对新闻的排序和检索会更加方便。

4 . text 类型的字段虽然也属于一种字符类型,但其大小不能指定,如果设置长度,则系统会提示 SQL 语句出错。

现在, news 数据表就建立好了。

由于新闻不是所有人都能增加的,只能有管理员来做,所以现在我们再来建立数据表 users 来存放管理员们。

1 : id :类型为 tinyint ,额外设置为 auto-increment、主键。

2 : name :意义为管理员名称,类型为 varchar ,长为 8 ,属性为 primany key 。

3 : password :意义为密码, 类型为 varchar ,长为 32 。

4 : mail :一样为邮件地址, 类型为 varchar ,长为 30 。

现在,两个数据库就设置好了,下面偶们进入新闻程序的开发中。

芽雨原创php新闻系统教程(第一版) 第二讲:新闻程序的基础

一.连接数据库的基础

偶们添加、取出、修改、删除新闻都必须首先做一件事,那就是连接主机,选择数据库,向数据库发出请求。否则一切都是纸上谈兵。下面介绍三个重要的 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 (更新数据)。

1 insert ():向数据库插入数据 。

语法A: insert into 数据表名(字段1,字段2,……) values(“ 字段1 d 的内容 ”,” 字段的2内容 ” …… )

语法B: insert into 数据表名 set 字段1 =” 字段1的内容 ”, 字段 2=” 字段 2 的内容 ”, ……

对A中,字段名可以省略,但后面的 values 部分的内容必须要和 phpmyadmin 中定义的字段顺序一样。

下面请看例子:

A: insert into news(title,date,author,source,content) values($title,$date,$author,$source,$content)

注:上面的“ $ ……“代表了要添加字段的内容,定义时: $ …… = 内容 ;

B: insert into news set title=$title,author=$author

注:如果内容是数字,则 ”” 可以省略。

2 delete ():删除数据表中的数据

语法: delete from 数据表名 where 指定地点 limit 数字

如果没有“ where 指定地点”则表中所有数据都没了。“ limit  数字”可以告诉服务器可以删除的最大行数。

例子: delete from news where id=$id limit 1

3. select () : 检索数据

语法: select 字段名1 , 字段2 , …… from 数据表名 where 地点

如果想列出所有记录中所有列的数据,可以使用“ * “代表字段名。

例子:A: select id,author from news where id=$id

B: select * from news where id=$id

4 update ():更新数据

语法和 insert 几乎是完全一样的。

如: update news set author=$author,title=$title where id=$id

值得注意的是,使用 update 语句时,要注意使用 where 字句,否则可能会导致大量的数据丢失。比如:

update news set author=” 芽雨 ”

这个操作会使表中所有的作者都变成“芽雨”了。

再举一个正面的例子,记录管理员的表 users 中,如果有一个字段为 age ,用来存储用户的年龄,一年后,他们要增加一岁,可以使用以下的语句:

update users set age=age+1

太好了,偶们现在已经掌握程序大部分的基础了,还有小部分偶们以后在例子中掌握吧。

现在偶们面临的问题是如何写出算法了。

芽雨原创php新闻系统教程(第一版) 第三讲:新闻程序的算法(一) ------ 添加新闻

一。添加新闻

添加新闻既是向数据库添加新的数据。

整个算法是这样的:管理员在表单中填写新闻的内容,包括: title,author,source,content ,另外两个字段 ( id,time )的内容有服务器完成,当然也要自己写程序,只是不由自己手动而已。提交表单后,用 MySQL 语句将它们添加到数据库中。

下面简单介绍一下表单中 <input> 标签和 <textarea></textarea> 标签。

<input> 标签为单行文本框。偶们常用的属性有: name, type 。 name 属性指定了变量的名称,既这个名称代表 了这个 <input> 中的内容。 type 属性指定了 <input> 中内容的性质。如果 type=text ,则为 一般性的文字。如果 type=password ,则这个“ <input> ”中的内容在浏览器一律以黑点显示,这样可以在输入内容时不 会在无意中被他人见到而造成数据安全问题。

<textarea></textarea> 标签为多行文本框,常用属性为 name 。

在本程序中此段程序如下所示:

<input name="author" type="text" size="40" maxlength="20">

在“ name="author" ”中的 "author" 就代表了“ <input> ”中的内容。同样的,这个 "author" 也可以是 "title" 或者其他,值得注意的是,这个 "author" 和字段 author 是不一样的。偶在这个地方提到 两个非常相似的概念:字段 author 和变量 $author (上面的 ”author” 实际上就是 $ author ,因为它代表了 “ <input> ”中的内容)。虽然它们几乎是同名的,但可绝对不是一回事。 Author 是数据表 news 里的一个字段名, PHP 用它来有限定的访问 MySQL 中的数据,在程序中是不能用其它的字符替换的;而 $author 是本程序中用户自己设定的变量符号,其值由 “ <input> ”中对应元素的 name 属性得到。既然它只是变量符号,偶们就可以使用任意字段,只要保证与表单中对应元素的 name 属性一致就可。之所以选择用与字段名相同的字符,是因为这样偶们就不必再费力去多记一个变量名而已。

偶们再来看 <textarea></textarea> 标签中的内容:

<textarea name="content" cols="80" rows="15" wrap="HYSICAL">

这个 <textarea></textarea> 中的内容是用来得到 content 字段内容的,因为此字段中的内容太多,所以只能用这个标签了。

当偶们填好这些内容后,只要提交就可以了,那么这一过程又是如何实现的呢? 下面偶们再来看以下的程序:

<input name="submit" type="submit" value=" 提交新闻 ">
<input type="reset" name=" reset" value=" 重写新闻 ">

这里的 type="submit"/ type="reset" 分别代表提交和重写新闻。 value 属性的内容在此按钮上显示出来。 name=" reset"/ name="submit" 中的含义和上面所说的是一样的。

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=".$_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>";
}

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

芽雨原创php新闻系统教程(第一版) 第五讲:新闻程序的算法(一) --- 修改、删

三.修改、删除新闻

和查看新闻的程序一样,偶们要先列出所有的新闻标题,然后在选择具体的新闻进行修改、删除操作。

在这里列出新闻标题时,比 index.php 的程序多了一条语句,那就是输出:

<a href='editnews.php?id=".$rows["id"]."' target=_self> 修改 </a>

通过点击这个超级链接,偶们进入具体的修改、删除新闻的程序。

具体的程序如下:

if(@$_GET["id"])
{
$id = $_GET["id"];
$sql="SELECT * FROM news WHERE id=$id";
$res = mysql_query($sql);
$row=fetch_assoc($res);
$edit = "<form method=post action=takeedit.php>";
$edit .= "<table width=800 cellpadding=0 cellspacing=0 border=1>";
$edit .= "<tr& gt;<td width=150><font> 第 $id 条新闻 </font></td>& lt;td><font> 标题 : <input type=text name=title value=".$row["title"]." size=80></font></td></tr>";
$edit .= "<tr><td valign=top width=150 border=0><font> 作者 <input type=text name=author value=".$row["author"]."><br> 日期 :<br>".$row["date"]."</font></td><td><font size=-2><textarea cols=90 rows=10 name=content >".$row["content"]."</textarea></font></td></tr></table>";
$edit .= "<input type=hidden name=id value=$id>";
$edit .= "<input type=submit name=edit value= 修改 >";
$edit .= "<input type=submit name=delete value= 删除 >";
$edit .= "</form>";
echo $edit;
}

上面“ if(@$_GET["id"]) ”中的“ @ ”意思是说禁止函数返回出错提示。这样当程序出现异常时,不至于让普通用户看见那莫名其妙的出错信息。

值得一说的是,偶们把可以修改的内容放在属性 value 中,既“ value=".$row["title"]." ”等。

在 <form> 标签中把 action 属性设为“ action=takeedit.php ”,当偶们提交表单后,由 takeedit.php 对数据库进行操作。

这其中的语句都是偶们在前面提到的,偶就不信你看不懂!!!程序如下:

if(@$_POST["edit"])
{
$author = $_POST["author"];
$title = $_POST["title"];
$content = $_POST["content"];
$source =$_POST["source "];
$date = date("y-m-d H:i");
mysql_query("UPDATE news SET author='$author',title='$title',content='$content', source =' source',date='$date' WHERE id=$id");
}
if(@$_POST["delete"])
{
mysql_query("DELETE FROM news WHERE id=$id LIMIT 1");
}

芽雨原创php新闻系统教程(第一版) 第六讲:用户管理

在这一部分,偶们来看看如何限制管理新闻程序只让管理员来操作。这包括让管理员注册(这个操作最好用 phpmyadmin 进行,毕竟不能随便让人当管理员嘛)、登陆、保存管理员的信息以便让系统识别他并让他对新闻进行操作、注销。

在这一讲中偶用给程序做注解来介绍相关的知识。

下面请看注册的程序 :

这个程序分为两部分,前面是 MYSQL 部分,后面的是 HTML 部分(提交表单)。两部分连接起来的方式是在提交表单是在 <input> 标签设置 action="register.php" 。把 MYSQL 放在前面是为了避免有的 PHP 函数不允许前面有 HTML 输出的缘故。

<?
if(@$_POST["submit"])
{
if (empty ($name) || empty ($password)|| empty ($repassword))
//(empty () 函数是用来判断里面的字符是否为空的。
{
echo " 填写有错误,请 <a href='register.php'> 重新填写 </a>";
}
if($password!=$repassword)
{
echo " 两次密码输入不同,请 <a href='register.php'> 重新填写 </a>";
}
// 经上面的判断就可以去数据库进行操作了,这样做的目的是为了减轻服务器的负担。
$link=mysql_connect("localhost","root","");
mysql_select_db("yayu",$link);
$sql="SELECT id FROM users WHERE name='$name'";
$result=mysql_fetch_row(mysql_query($sql));
// mysql_fetch_row() 函数把得到的所有数据存到一个数组中去,这个数组是以数字为
// 引的。在这里,当返回有数据时, $result 相当于逻辑量 1 了。
// 检测用户提交的用户名是否被注册
if($result)
{
echo " 已经有相同的用户名存在,请 <a href='register.php'> 重新填写 </a>";
}else{
// 如果一切正常,将数据加到数据库中
$sql="insert into users(name,password) values('$name','$password')";
// 检测用户注册是否成功
if(mysql_query($sql,$link))
{
echo " 注册成功,请立即 <a href='admin.php'> 登陆 </a>";
}
else
{
echo " 注册失败,请 <a href='register.php'> 重试 </a>";
}
}
}else{
?>
<center>
<h1 align="center"> 注册 </h1>
<form action="register.php" method="OST">// 值传递的方式为 POST
<p> 代号 :
<input name="name" type="text" value="" size="15">
<br>
<br>
密码 :
<input type="password" name="password" size="15" maxlength="50">
</p>
<p> 重新输入密码:
<input type="password" name="repassword" size="15" maxlength="50">
<br>
<br>
<input type="submit" name="submit" value=" 注册 ">
<input type="reset" value=" 重写 ">
</p></form>
</center>
</body>
</html>
<?
}
?>

再来看登陆和注销的程序

<?
if(@$_POST["submit"])
{
if(empty ($_POST["username"]))
die (" 请填写用户名 ");
// 这里用了 die() 函数,作用是名字为空时向用户提出提示信息。
else
$username = $_POST["username"];
// 记录用户名。
if(empty ($_POST["password"]))
die (" 请填写密码 ");
else
$password = $_POST["password"];
$link=mysql_connect("localhost","root","");
$selectdb = mysql_select_db("yayu",$link);
$sql="select id,password,name from users where name='$username'";
$result=mysql_query($sql)or die (mysql_error ());
while($pa = mysql_fetch_assoc($result))
{ // mysql_fetch_assoc() 函数是把返回的数据以数组的方式保存,数组的下标与字段名 // 相对应
$pwd = $pa[password];
$userid = $pa[id];
// 检测用户名是否正确
if(!$result)
{
echo " 错误的用户名 ";
echo "<br><a href='login1.php'> 重新登陆 </a>";
mysql_close($link);
exit;
}
// 检测密码是否正确
if($pwd != $password )
{
echo " 亲爱的 ".$username."<br>";
echo " 您输入了错误的密码 ";
echo "<br> 请您 <a href='admin.php'> 重新登陆 </a>";
mysql_close($link);
exit;
}
// 如果一切正常,则设置 Cookie
setcookie("username",$_POST["username"]);
header("Location:admin.php");
}
if(@$_GET["action"]=="logout")
{
setcookie("username","");
header("Location:index.php");
}
}
?>

在上面的程序中,有一个很重要的东西,那就是 Cookie 。

Cookie 是 Web 服务器存储在客户端的小型数据包,当用户再次连接放置 Cookie 的 Web 服务器时, Web 服务器可以再次读出它防止在 Cookie 的数据,再通过 Cookie ,服务器可以将特定的信息放在访问者的机器上。

偶们从程序中可以看见一个 Cookie 函数 setcookie() ,它用来存储用户的名字,语法为: setcookie(" 自定义的用户名 "," 用户的名字 ");

在偶写的程序中“自定义的用户名”用的是“ username ”,当“用户的名字”为空时,

就相当于注销了。

当偶们的一些客户端操作需要管理员执行时,偶们就要用到 Cookie 了。偶们使用 if(@$_COOKIE["username"]) (这个得到数据的方式是不是和 POST 的很像呀)

来做判断。如果 username 有值,那它就做为逻辑量中的 1 了。

PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
PHP数组操作汇总 php数组的使用技巧
Jul 17 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
使用PHP破解防盗链图片的一个简单方法
Jun 07 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php文件上传类完整实例
May 14 PHP
php格式化时间戳
Dec 17 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 #PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 #PHP
win7计划任务定时执行PHP脚本设置图解
May 09 #PHP
关于php支持分块与断点续传文件下载功能代码
May 09 #PHP
PHP程序员基本要求和必备技能
May 09 #PHP
Windows中使用计划任务自动执行PHP程序实例
May 09 #PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
May 08 #PHP
You might like
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
php中JSON的使用与转换
2015/01/14 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
php跨域调用json的例子
2013/11/13 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
Python实现的一个简单LRU cache
2014/09/26 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Python 备份程序代码实现
2017/03/06 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Python读取stdin方法实例
2019/05/24 Python
python实发邮件实例详解
2019/11/11 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
python实现加密的方式总结
2020/01/19 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
初中家长寄语
2014/04/02 职场文书
红色旅游心得体会
2014/09/03 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
少年雷锋观后感
2015/06/10 职场文书
初中军训感言
2015/08/01 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python