注册相比于登录,复杂的地方在于后端 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 官方弃用!
膜拜大佬自己写