<?php
require_once('common.php'); // 引入公共文件,其中实现了SQL注入漏洞检查的代码
// trim()函数可以截去头尾的空白字符
$username = trim($_POST['username']);
$pwd = $_POST['pwd'];
$repeat_pwd = $_POST['repeat_pwd'];
$name = trim($_POST['name']);
$email = trim($_POST['email']);
if (!empty($username)) { // 用户填写了数据才执行数据库操作
//---------------------------------------------------------
// 数据验证, empty()函数判断变量内容是否为空
if (empty($username) || empty($name) || empty($email)
|| empty($pwd) || $repeat_pwd != $pwd) {
echo '数据输入不完整';
exit;
}
if (strlen($pwd) < 6 || strlen($pwd) > 30) {
echo '密码必须在6到30个字符之间';
exit;
}
// 与客户端验证Email时相同的正则表达式
$pattern = "/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/";
if (!preg_match($pattern, $email)) {
echo 'Email格式不合法!';
exit;
}
//---------------------------------------------------------
// 调用mysqli的构造函数建立连接,同时选择使用数据库'test'
$db = @new mysqli("localhost", "root", "", "test");
// 检查数据库连接
if (mysqli_connect_errno()) {
echo "数据库连接失败!<br>\n";
echo mysqli_connect_error();
exit; // 退出程序,后面的所有语句将不再执行
}
// 查询数据库,看填写的用户名是否已经存在
$sql = "SELECT * FROM t_user WHERE f_username='$username'";
$rs = $db->query($sql);
// $rs->num_rows判断上面的执行结果是否含有记录,有记录说明用户名已经存在
if ($rs && $rs->num_rows > 0) {
echo "<font color='red' size='5'>该用户名已被注册,请换一个重试!</font><br>\n";
}
else {
$pwd = md5($pwd); // 将明文密码使用md5算法加密
// 将用户信息插入数据库的t_user表
$sql = "INSERT INTO t_user (f_username, f_password, f_name, f_email) VALUES";
$sql .= "('$username', '$pwd', '$name', '$email')";
$rs = $db->query($sql);
if (!$rs) {
$db->close(); // 关闭数据库连接
echo '数据记录插入失败!';
exit;
}
// 将输出重定向到register_result.php文件
header("Location: register_result.php?uid=$username");
echo "<font color='red' size='5'>恭喜您注册成功!</font><br>\n";
}
// 关闭数据库连接
$db->close();
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Registering form</title>
<script language='javascript'>
<!--
// 验证表单数据有效性的函数
// 当函数返回true时,说明验证成功,表单数据正常提交
// 当函数返回false时,说明验证失败,表单数据被终止提交
function doCheck()
{
var username = document.frmRegister.username.value;
var pwd = document.frmRegister.pwd.value;
var repeat_pwd = document.frmRegister.repeat_pwd.value;
var name = document.frmRegister.name.value;
var email = document.frmRegister.email.value;
if (username == '') {
alert('请输入用户名!'); return false;
}
if (pwd == '') {
alert('请输入密码!'); return false;
}
if (name == '') {
alert('请输入姓名!'); return false;
}
if (email == '') {
alert('请输入Email!'); return false;
}
if (repeat_pwd != pwd) {
alert('重复密码与密码不一致!'); return false;
}
if (pwd.length < 6 || pwd.length > 30) {
alert('密码必须在6到30个字符之间!'); return false;
}
// 使用正则表达式验证Email的格式
var pattern = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
if (! pattern.test(email) ) {
alert('Email填写不正确!'); return false;
}
return true;
}
-->
</script>
</head>
<body>
<?php
if (!empty($username) ) { // 有内容才输出
echo "您填写的信息是:<br>\n";
echo "用户名: $username <br>\n";
echo "密码: $pwd <br>\n";
echo "重复密码: $repeat_pwd <br>\n";
echo "姓名: $name <br>\n";
echo "Email: $email <br>\n";
}
?>
<form name="frmRegister" method="post" action="register.php" onsubmit= "return doCheck();">
<table width="330" border="0" align="center" cellpadding="5" bgcolor= "#eeeeee">
<tr>
<td width="40%">用户名:</td>
<td><input name="username" type="text" id="username"> </td>
</tr>
<tr>
<td>密码:</td>
<td><input name="pwd" type="password" id="pwd"></td>
</tr>
<tr>
<td>重复密码:</td>
<td><input name="repeat_pwd" type="password" id="repeat_pwd"></td>
</tr>
<tr>
<td>姓名:</td>
<td><input name="name" type="text" id="name"></td>
</tr>
<tr>
<td>Email:</td>
<td><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>