目录
1.准备页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册表</title>
</head>
<body>
<form action="Ajax.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>
</body>
</html>
效果:
2.逻辑操作
1).判断重复密码
- 由于有重复密码,如果用户两次输入的密码不一致也就是有没有进行下一步的任何意义;
- 用户在输入密码的时候可能在左右两边多打两个空格;因此,我们会使用trim将密码和重复密码的两边去掉空格。
if(trim($_POST['password']) != trim($_POST['repassword'])){
exit('两次密码不一致,请返回上一页');
}
2). 准备好写入的数据
- 我们需要把用户的输入数据和隐藏的数据都写入到数据库,可见数据有:$_POST['username'],$_POST['password'];
- 不可见数据有:$time 注册时间, $_SERVER['REMOTE_ADDR'] 用户注册ip
- time返回的unix时间戳
- REMOTE_ADDR返回的是IP地址,我们可以用ip2long将其转为整型存储。
$username = trim($_POST['username']);
$password = md5(trim($_POST['password']));
$time = time();
$ip = ip2long($_SERVER['REMOTE_ADDR']);
3.连接数据库、判断错误、选择库和字符集
- 我们使用mysqli_connect连接到数据库服务器。
- 如果有错误,使用mysqli_errno得到错误号
- 如何时存在错误mysqli_error打印出所有的错误,并且退出程序执行
- 选择数据库并且设置字符集为utf8.
//连接数据库
$conn = mysqli_connect('localhost','root','root');
//如果有错误,存在错误号
if(mysqli_errno($conn)){
echo mysqli_error($conn);
exit;
}
mysqli_select_db($conn,'php');
mysqli_set_charset($conn,'utf8');
4.组合SQL语句
我们需要把得到的信息写入到数据库里面去,用户名、密码、创建时间、IP我们都得到了。
$sql = "insert into user (user_name,user_pwd,create_time,create_ip) values
('" . $user_name . "','" . $user_pwd . "','" . $time . "','" . $ip . "')";
5.发送语句,判断状态
mysqli_query我们在上面说过,需要传入两个参数:
连接的资源,在这里对应的变量是$conn。
发送的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);
6.关闭数据库
将资源变量传到到mysqli_close这个函数里面即可。
mysqli_close($conn);
7.完整实现用户注册操作
<?php
// var_dump($_POST);die;
if (trim($_POST['user_pwd']) != trim($_POST['repassword'])) {
exit('两次密码不一致,请返回上一页');
}
$user_name = trim($_POST['user_name']);
$user_pwd = md5(trim($_POST['user_pwd']));
$time = time();
$ip = $_SERVER['REMOTE_ADDR'];
$conn = mysqli_connect('localhost', 'root', 'root');
//如果有错误,存在错误号
if (mysqli_errno($conn)) {
echo mysqli_error($conn);
exit;
}
mysqli_select_db($conn, 'php');
mysqli_set_charset($conn, 'utf8');
$sql = "insert into user (user_name,user_pwd,create_time,create_ip) values
('" . $user_name . "','" . $user_pwd . "','" . $time . "','" . $ip . "')";
$result = mysqli_query($conn, $sql);
if ($result) {
echo '成功';
} else {
echo '失败';
}
echo '当前用户插入的ID为' . mysqli_insert_id($conn);
mysqli_close($conn);
?>
8.附录表结构
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户编号',
`user_name` varchar(30) NOT NULL COMMENT '用户名',
`user_pwd` char(32) NOT NULL COMMENT '密码',
`create_time` int(11) NOT NULL COMMENT '创建时间',
`create_ip` int(11) NOT NULL COMMENT '创建ip',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='用户表';