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

1

Loading

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

3.注册前端编写

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

<!doctype html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>注册</title>
</head>

<form id="form1" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);>" method="post">
    <input name="username" type="text" placeholder="输入用户名" />
    <input name="password" type="password" placeholder="输入密码" />
    <input name="password2" type="password" placeholder="确认密码" />
    <button id="submit1" name="submit" type="submit">注册</button>
</form>

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

4.注册后端编写

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

<?php
    $link=mysqli_connect(" "," "," "," ");//连接到数据库服务器,四个参数依次为主机名、 MySQL 用户名、 MySQL 密码、要使用的数据库名
    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
                {
                    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 '两次输入的密码不一致。';
            }
        }
    }
?>

 

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

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