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

芽雨原创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 了。
如果客户端使用自己的包含usename cookie的ie窗口连接到你的这个页面,则客户端会被默认为已认证。所以你这个程序有安全隐患。我想还是用session进行认证比较好。
那偶得去好好学习session
希望早日看到第二版!!!
不错,写的不错,我要试一下,我也写了一个,但是不能用。