牛骨文教育服务平台(让学习变的简单)

13.2 通过步骤做一个用户注册

我们做一个最简单的注册页面。注册页面中有三个参数:

  1. 用户名
  2. 密码
  3. 重复密码

用户写好三个参数后,点击提交的时候向connect.php页面中传入POST记录。

我们可以把POST记录处理后写入到MySQL数据库中,即完成了用户注。

代码如下:


<form action="connect.php" method="post">

	用户名:<input type="text" name="username"><br />


	密码:<input type="password" name="password"><br />

	重复密码:<input type="password" name="repassword"><br />

	<input type="submit" value="提交">

</form>

为了更快的表现我们的代码界面没有进行美化。以最快的速度带大家完成用户注册。

一、 判断重复密码

由于有重复密码,如果用户两次输入的密码不一致也就是有没有进行下一步的任何意义。

在网页中很多地方还是使用到了重复密码。因为,害怕的是用户产生手误。将密码填写出错。

用户在输入密码的时候可能在左右两边多打两个空格。因此,我们会使用trim将密码和重复密码的两边去掉空格。

if(trim($_POST["password"]) != trim($_POST["repassword"])){

	exit("两次密码不一致,请返回上一页");

}

二、 准备好写入的数据

我们需要把用户的输入数据和隐藏的数据都写入到数据库。

可见数据有:

变量 说明
$_POST["username"] 用户名
$_POST["password"] 密码
  1. 我们需要把用户名去掉两边的空格,这样避免输入不必要的这些信息。
  2. 在mysql这一章节我们讲过,用户的密码不要让包括公司内部人员可见。保证密码是不可逆向的。在初级阶段大家学习一下MD5即可。以后我们再教大家其他的加密方式。

不可见数据有:

变量 说明
$time 用户的注册时间
$_SERVER["REMOTE_ADDR"] 用户的注册IP
  1. time返回的unix时间戳
  2. REMOTE_ADDR返回的是IP地址,我们可以用ip2long将其转为整型存储。

$username = trim($_POST["username"]);



$password = md5(trim($_POST["password"]));


$time = time();

$ip = ip2long($_SERVER["REMOTE_ADDR"]);

三、连接数据库、判断错误、选择库和字符集

  1. 我们使用mysqli_connect连接到数据库服务器。
  2. 如果有错误,使用mysqli_errno得到错误号
  3. 如何时存在错误mysqli_error打印出所有的错误,并且退出程序执行
  4. 选择数据库并且设置字符集为utf8.
//连接数据库
$conn = mysqli_connect("localhost","root","liwenkaihaha");

//如果有错误,存在错误号
if(mysqli_errno($conn)){

	echo mysqli_error($conn);

	exit;
}

mysqli_select_db($conn,"user");

mysqli_set_charset($conn,"utf8");

四、组合SQL语句

我们需要把得到的信息写入到数据库里面去,用户名、密码、创建时间、IP我们都得到了。

将对应的变量插入到SQL语句中即可。组合出来的SQL语句如下:

$sql = "insert into user(username,password,createtime,createip) values("" . $username . "","" . $password . "","" . $time . "","" . $ip . "")";

而我们的创建表的语句如下:

CREATE TABLE IF NOT EXISTS user (
id int(11) NOT NULL,
username varchar(30) NOT NULL,
password char(32) NOT NULL,
createtime int(11) NOT NULL,
createip int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表的格式(字段对应说明):
| id | username | password | createtime | createip |
| -- | -- | -- | -- | -- |
| 用户编号 | 用户名 | 密码 | 创建时间 | 创建IP |

五、发送语句,判断状态

mysqli_query我们在上面说过,需要传入两个参数:

  1. 连接的资源,在这里对应的变量是$conn。
  2. 发送的SQL语句。在上面已经准备好了$sql。

SQL语句可以通过mysqli_query发送给MySQL服务器。发送成功$result则为true。否则为false。

成功的话,我们就可以提示用户注册成功啦。

有些情况下,可能还需要使用到mysqli_insert_id()。在这里把自增的主键ID打印出来。

大家记住这个知识点,避免以后需要的时候忘记了。

mysqli_insert_id应用场景:新加的一个行的数据。我们需要得到自动增长的ID值,将这个ID值插入到另外一个表里面去时。就需要用到这个函数。

$result = mysqli_query($conn,$sql);


if($result){
	echo "注册成功";
}else{
	echo "注册失败";

}

echo "当前用户插入的ID为".mysqli_insert_id($conn);

六、关闭数据库连接

将资源变量传到到mysqli_close这个函数里面即可。

mysqli_close($conn);

用户注册的基本实现代码就写完了。我们上面讲的都是代码片段。

我们整实现的connect.php代码如下:

<?php

if (trim($_POST["password"]) != trim($_POST["repassword"])) {

	exit("两次密码不一致,请返回上一页");

}

$username = trim($_POST["username"]);

$password = md5(trim($_POST["password"]));

$time = time();

$ip = $_SERVER["REMOTE_ADDR"];

$conn = mysqli_connect("localhost", "root", "liwenkaihaha");

//如果有错误,存在错误号
if (mysqli_errno($conn)) {

	echo mysqli_error($conn);

	exit;
}

mysqli_select_db($conn, "book");

mysqli_set_charset($conn, "utf8");

$sql = "insert into user(username,password,createtime,createip) values("" . $username . "","" . $password . "","" . $time . "","" . $ip . "")";

$result = mysqli_query($conn, $sql);

if ($result) {
	echo "成功";
} else {
	echo "失败";

}

echo "当前用户插入的ID为" . mysqli_insert_id($conn);

mysqli_close($conn);

?>