芽雨原创php新闻系统教程(第一版) 第六讲:用户管理
这个在偶个人主页上的地址是
http://yayu.512j.com/php/xwjc/06.htm
在这一部分,偶们来看看如何限制管理新闻程序只让管理员来操作。这包括让管理员注册(这个操作最好用 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 了。 |