从零开始写一个 PHP 站 (2) —— 实现注册功能

注册相比于登录,复杂的地方在于后端 PHP 需要对用户输入的内容进行比对,并给出相应的提示,以及大量的数据库操作。
数据库端已经处理完毕,所以直接开始写前后端就可以。

3.注册前端编写

还是老样子,直接上代码,要说明的就标注在注释里咯。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    <!doctype html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <title>注册</title>
        </head>
        <body>
            <form id="form1" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
                <input name="username" type="text" placeholder="输入用户名">
                <input name="password" type="password" placeholder="输入密码">
                <input name="password2" type="password" placeholder="确认密码">
                <button id="submit1" type="submit" name="submit">注册</button>
            </form>
        </body>
    </html>

只需要特别提示一点,两个密码输入框的名称一定要分开,其他的,参考登录就好。

4.注册后端编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    <?php
        $link=mysqli_connect("localhost","mao","wKVhtz#9CsaO8&qn","mao");//连接到数据库
        if ($link)//判断连接是否成功
        {  
            if(isset($_POST["submit"]))//判断是否有数据提交
            {
                $name=trim($_POST["username"]);// trim 函数用于去除掉不必要的空格
                $password1=trim($_POST["password"]);
                $password2=trim($_POST["password2"]);
                if($password1==$password2)//确认密码是否正确
                {
                    mysqli_query($link,'SET NAMES UTF8');
                    $stmt1=mysqli_prepare($link, "SELECT count(*) FROM users WHERE name=?");
                    $stmt1->bind_param('s', $name);
                    $stmt1->execute();
                    $stmt1->bind_result($pa);
                    $stmt1->fetch();
                    $stmt1->close();
                    if($pa==1)//判断数据库表中是否已存在该用户名
                    {
                        echo '该用户名已被注册。';
                    }
                    else
                    {
                        $regtime=date("Y-m-d H:i:s", time());
                        mysqli_query($link,'SET NAMES UTF8');
                        $stmt2=mysqli_prepare($link, "INSERT INTO users (name, password) VALUES(?, ?)");
                        $stmt2->bind_param('ss', $name, $password2);
                        $stmt2->execute();
                        $stmt2->close();
                    }
                }
                else
                {
                    echo '两次输入的密码不一致。';
                }
            }
        }
    ?>

可以看到有多重条件判断嵌套,这也是写注册后端的难点之一了。
第二个难点,其实就是由于需要插入 SQL 表中的数据比较多,所以 SQL 语句不太好构造,尤其是对于 mysqli_prepare 这种变量和语句分离的函数。
注释也没有太多,该有的在登录的代码中都有了,参考一下即可。

同样的,这段后端代码插入到前端代码的 body 标签即可正常被调用执行。
我还是要再次嘱咐:
学学 PHP MySQLi 函数吧, PHP MySQL 函数由于太容易有注入漏洞,而且语法不够友好,已经被 PHP 官方弃用!

下一期会介绍怎么把密码加密,以及加入Email验证的方法。

《从零开始写一个 PHP 站 (2) —— 实现注册功能》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.