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

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

3.注册前端编写

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

1
2
3
4
5
6
7
8
9
10
<!doctype html>




<form id="form1" action="&lt;?php echo htmlspecialchars($_SERVER['PHP_SELF']);?&gt;" 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.注册后端编写

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
<!--?php $link=mysqli_connect("localhost","mao","wKVhtz#9CsaO8&amp;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-&gt;bind_param('s', $name);&lt;br ?--> $stmt1-&gt;execute();
$stmt1-&gt;bind_result($pa);
$stmt1-&gt;fetch();
$stmt1-&gt;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-&gt;bind_param('ss', $name, $password2);
$stmt2-&gt;execute();
$stmt2-&gt;close();
}
}
else
{
echo '两次输入的密码不一致。';
}
}
}
?&gt;

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

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

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

views
3

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

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据