经过了一周的时间,在我们队长的带领下,我们小组成功解决了学海灯塔的登陆和注册功能。欢迎光临
学海灯塔。
下面介绍一下这个功能是如何实现的。不多说,先上代码。
register.php中的注册表单
<form action="register_handle.php" method="post" class="login">
<p class="lead">注册用户</p>
<div class="form-group">
<input type="text" autocomplete="off" class="required form-control" placeholder="姓名 *" name="Name" value="">
</div>
<div class="form-group">
<input type="text" autocomplete="off" class="required form-control" placeholder="用户名 *" name="username" value="">
</div>
<div class="form-group">
<input type="password" class="required form-control" placeholder="密码 *" name="password" value="">
</div>
<div class="form-group">
<input type="password" class="required form-control" placeholder="确认密码 *" name="Conform Password" value="">
</div>
<div class="form-group">
<input type="text" autocomplete="off" class="required form-control" placeholder="邮箱 *" name="email" value="">
<input type="submit" value="发送验证码" class="course-submit">
</div>
<div class="form-group">
<input type="text" autocomplete="off" class="required form-control" placeholder="邮箱验证码(登录邮箱查询) *" name="conform email" value="">
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary btn-lg1 btn-block" name="submit" value="注册">
</div>
</form>
在上面的这个表单里,点击注册按钮后会把数据提交给register_handle.php处理,处理过程请看下面的代码。
register_handle.php
<?php
$username=$_POST['username'];
$password=$_POST['password'];
$link = mysqli_connect('localhost','users','666','users');
if($_POST['submit']){
if(mysqli_query($link,"insert into users (username,password) values('$username','$password')")){
setcookie("uname",$username,time()+7200);
echo "<script>alert('successfully');window.location= 'index.php';</script>";
}else {
echo "<script>alert('failed');history.go(-1)</script>";
}
}
?>
首先,$username=$_POST['username']; $password=$_POST['password']; 这两句话把表单中的username和password传递给$username和$password。接下来,$link = mysqli_connect('localhost','users','666','users'); 用来连接数据库,localhost是主机名,第一个users是用户名,666是用户密码,第二个users是数据库名。这个函数的用法可以看
菜鸟教程里面的函数介绍。
mysqli_query($link,"insert into users (username,password) values('$username','$password')") 这句话就是把$username和$password加到一个叫做users的数据表里。这个函数的用法可以看
菜鸟教程mysqli_query的介绍。如果成功登陆就跳到index.php,失败了就返回当前页面。
login.php中的登陆表单
<form action="login_handle.php" method="post" name="form" class="login">
<p class="lead">欢迎!</p>
<div class="form-group">
<input autocomplete="off" type="text" name="username" class="required form-control" placeholder="用户名">
</div>
<div class="form-group">
<input autocomplete="off" type="password" class="password required form-control" placeholder="密码" name="password">
</div>
<div class="form-group">
<input type="checkbox" name="remember" value="true"> 记住密码
<input type="submit" class="btn btn-primary btn-lg1 btn-block" name="submit" value="登录">
</div>
<p>没有注册或忘记密码? <a href="register.php" title="Sign Up">点击这里</a></p>
</form>
登陆界面的方法也是类似的,把登陆表单的数据交给login_handle.php处理,处理过程在下面介绍。
login_handle.php
<?php
$username=$_POST['username'];
$password=$_POST['password'];
$link = mysqli_connect('localhost','users','666','users');
$query=mysqli_query($link,"SELECT username,password FROM users WHERE username = '$username'");//找到与输入用户名相同的信息,注意要取出的信息有两项
if (!$query) {
printf("Error: %s\n", mysqli_error($link));
exit();
}
$row = mysqli_fetch_array($query);
if($_POST['submit']){
if($row['username']==$username &&$row['password']==$password){
setcookie('uname',$username,time()+7200);
echo "<script>alert('successfully');window.location.href= 'index.php';</script>";
}
else echo "<script>alert('failed');history.go(-1)</script>";//返回之前的页面
}
?>
这段php脚本获取了username和password之后,就去数据库里面查找username的相同的字段,$query=mysqli_query($link,"SELECT username,password FROM users WHERE username = '$username'"); 这个函数的用法也可以看
菜鸟教程的mysqli_query介绍。如果找到匹配的username和password,就跳到index.php,否则返回当前页。
index.php用户名信息
<li class="dropdown">
<?php
$flag=0;
if(isset($_GET["out"])){
if($_GET["out"]){
setcookie('uname','',time()-1);
$flag=1;//防止服务器接收到getout操作时已经认为该用户有cookie,然后下面的COOKIE[NAME]已经有了,服务器返回给他的才是空的
}
}
if($flag!=1){
$link=mysqli_connect('localhost','users','666','users');
if(isset($_COOKIE['uname'])){
$name=$_COOKIE['uname'];
$query=mysqli_query($link,"SELECT username FROM users WHERE username = '$name'");
$row=mysqli_num_rows($query);
if($row==1){
echo '<i class="fa fa-user"></i> '.$name.'<a href="index.php?out=1">退出</a>';
}
}else{
echo '<a href="login.php"><i class="fa fa-user"></i><span>登录/注册</span></a>';
}
}
else{
echo '<a href="login.php"><i class="fa fa-user"></i><span>登录/注册</span></a>';
}
?>
</li>
在没有登陆的时候,主页上会有一个登录/注册的链接按钮,成功登陆之后这个按钮会变成用户名和退出按钮。这个功能是通过上面的代码实现的。仔细观察会发现,在register_handle.php和login_handle.php成功注册或者登陆之后都有这么一句话setcookie('uname',$username,time()+7200); 就是服务器给浏览器一个cookie叫做uname,值是$username,有效期是7200秒,使用方法可以看
w3school关于setcookie的介绍。
如果isset($_COOKIE['uname']) 并且查询数据库里只有一个叫做$username的用户,就会执行echo '<i class="fa fa-user"></i> '.$name.'<a href="index.php?out=1">退出</a>';把登陆/注册按钮替换成用户名和退出。
在上面,我们介绍了页面是怎么给数据库发东西和获取东西的,接下来介绍一下数据库怎么配置。
首先打开phpmyadmin,点击用户账户,如果有一个叫做users的用户并且你知道密码那就不用新注册了。
接下来点击数据库,新建一个数据库叫做users
点击这个数据库,进去新建一个数据表叫做users
再看一下这个数据表的结构,有两个字段,其中username是主键和索引,为了保证不出现相同的用户名,需要选择username主键和唯一,不然有两个相同的username就登不上去了。
看一下我们的数据表内容,可以在后台修改。
欢迎光临我们的
学海灯塔