实现用户注册功能的代码

8 篇文章 0 订阅
7 篇文章 0 订阅

1.功能介绍

使用语言: html + javascript + ajax + php
后端数据库: MySQL
(这里不涉及到样式)

成功注册流程:

  1. 注册页面(register.html),该页面提供一个 form表单,收集用户信息。

  2. 提交后转到register.php页面,利用php将注册信息添加到数据库中。

2.实现代码

2.1 创建MySql数据库中的用户信息表

需求
创建用户信息表

代码

CREATE TABLE xxx_user(
  uid INT PRIMARY KEY AUTO_INCREMENT,
  uname VARCHAR(32),
  upwd VARCHAR(32),
  email VARCHAR(64),
  phone VARCHAR(16),
  gender INT     #性别  0-女  1-男
);

2.2 HTML页面布局代码

需求
创建一个register.html(非ajax),提供以下控件(表单)——

  • 登录名称-文本框
  • 登录密码-密码框
  • 确认密码-密码框
  • 用户邮箱-电子邮件
  • 联系方式-文本框
  • 用户性别-下拉框
  • 注册按钮

代码

<form action="./data/users/register.php" method="post">
<!--
1.注册信息不用异步加载,直接提交表单;失去焦点时验证用户名密码是否正确,再用ajax异步加载数据;
2.form表单作用:收集用户信息并提交给服务器;
3.属性action作用:定义表单被提交时发生的动作,通常定义的是服务器上处理程序的地址(url),提交到注册的php文件,默认提交给本页;
4.属性method作用:指定表单数据的提交方式。
  get(默认值)——明文提交,待提交的数据会显示在地址栏上;
  post——隐式提交,提交的数据不会显示在地址栏上。
-->

    <!--控件提交信息,嵌套在form标记里面-->
    <!--登录名称-文本框-->
    <p>
        登录名称:<input type="text" id="uname" name="uname" onblur="check_name()">
        <!--提示用户名是否一致的位置-->
        <span id="uname-show"></span>
        <!--提交数据时提交name属性的值,点击submit时,name属性通过表单form提交数据,同步提交数据-->
    </p>

    <!--登录密码-密码框-->
    <p>
        登录密码:<input type="password" id="upwd" name="upwd">
        <!--name值与id值可以重复,name值用于提交给服务器,id值在前端用-->
    </p>

    <!--确认密码-密码框-->
    <p>
        确认密码:<input type="password" id="cpwd" name="cpwd" onblur="check_pwd()">
        <!--onblur为失去焦点属性,调用判断密码是否一致的函数-->
        <!--用于提示两次密码是否一致的位置-->
        <span id="pwd-show"></span>
    </p>

    <!--用户邮箱-电子邮件-->
    <p>
        电子邮箱:<input type="email" name="email">
        <!--type="email" 可做简单的格式验证-->
    </p>

    <!--联系方式-文本框-->
    <p>
        手机号码:<input type="text" name="phone">
    </p>

    <!--用户性别-下拉框-->
    <p>
        用户性别:
        <select name="gender">
            <option value="1"></option>
            <option value="0"></option>
        </select>
        <!--下拉列表和选项,往数据库中插入的是value的值-->
    </p>

    <!--注册按钮-->
    <p>
        <input type="submit" value="注册">
        <!--submit按钮的表单提交数据,是同步访问数据的方式-->
    </p>
</form>

2.3 创建register.php

需求
1.在init.php中,封装会重复用到的连接数据库代码

代码

<?php
//data/init.php
//创建到服务器的连接,连接数据库
$conn=mysqli_connect("127.0.0.1","root","","knewone",3306);
$sql="SET NAMES UTF8";
mysqli_query($conn,$sql);

需求
2.接收register.html提交过来的数据,并插入到数据库,再给出提示
代码

<?php
//data/users/register.php

#1.获取请求提交的数据
    $uname=$_REQUEST["uname"];
    //uname值就是前端页面中name属性的值
    $upwd=$_REQUEST["upwd"];
    //确认密码不用获取,获取一个密码就行
    $email=$_REQUEST["email"];
    $phone=$_REQUEST["phone"];
    $gender=$_REQUEST["gender"];

#2.连接到数据库
    require("../init.php");

#3.拼sql语句并执行
    $sql="insert into xxx_user(uname,upwd,email,phone,gender)values('$uname','$upwd','$email','$phone','$gender')";
    //字段值 外面用双引号,里面用单引号
    $result=mysqli_query($conn,$sql);
    //执行sql语句

#4.根据执行结果给出响应
    if($result==true){ //函数返回值
        echo "注册成功";
    }else{
        echo "注册失败";
    };

2.4 javascript代码

需求
1.封装能重用到的函数
代码

<script>
//1.封装函数,获取id值
function $(id){
  return document.getElementById(id);
}

//2.创建xhr对象
function createXhr(){
    var xhr=null;
    if(window.XMLHttpRequest){
        xhr=new XMLHttpRequest(); //标准创建
    }else{
        //IE8以下的创建方式
        xhr=new ActiveXObject("Microsoft.XMLHttp");
    }
    return xhr;
}
</script>

需求
2.实现前端页面中完成验证用户名称的重复性和两次密码是否一致的功能
代码

<script src="./js/common.js"></script>
<script>
    //1.完成用户名称的重复性验证(异步,检查数据库中是否已存在当前用户名)
    //异步请求数据,因为还要输入下面的数据,不能跳转到php页面去验证
    function check_name(){
        //1.创建XHR对象 创建异步对象
        var xhr=createXhr(); //调用common.js中封装好的函数

        //2.创建请求
        var uname=$("uname").value;
        //获取输入框里的值,把用户名传到后端,再查询
        var url="./data/users/check-name.php?uname="+uname;
        xhr.open("get",url,true);
        //查询用户名称,用get方法就行,去数据库查询,看用户名是否已经存在
        //查询用get就行,向服务器提交数据时再用post

        //3.设置回调函数,监听状态
        //参数true,异步
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4 && xhr.status==200){
            //判断状态,xhr请求状态为4,表示接收响应数据成功;当status的值是200的时候,表示服务器已经正确的处理请求以及给出响应
            $("uname-show").innerHTML=xhr.responseText;
            //提示内容
            };
        };

            //4.发送请求
            xhr.send(null);
            //get请求,参数写null
        }

//2.定义函数,判断两次密码是否一致
//当确认密码框失去焦点时,验证两次输入的密码是否一致,并给出提示(通过/密码不一致)
    //给upwd 和 cpwd 加id
    function check_pwd(){
        //1.获取两个密码框的值
        var upwd=$("upwd").value; 
        //$("upwd") 获取id值,函数在common.js中封装
        var cpwd=$("cpwd").value;
        if(upwd==cpwd && upwd!=""){ 
        //判断是否相等,且密码不为空
            $("pwd-show").innerHTML="通过";  
            //提示到span中,用innerHTML
        }else{
            $("pwd-show").innerHTML="两次密码输入不一致";
        };
    };
</script>

2.5 验证用户名是否重复的php代码

功能
接受前端传来的uname值,查询数据库中是否存在同样的名称,并给出返回提示
代码

<?php
//data/users/check-name.php
#1.连接数据库
  require("../init.php");

#2.接收前端传过来的uname
  $uname=$_REQUEST["uname"];

#3.拼接sql,并查询uname是否存在
  $sql="SELECT * FROM xxx_user uname='$uname'";
  $result=mysqli_query($conn,$sql);

#4.根据查询的结果输出相应
  $row=mysqli_fetch_row($result);
  //抓取一条数据,即当前uname对应的数据
  if($row==null){
  //如果$row为空,即数据库中没有相同的用户名存在
    echo "通过";
  }else{
    echo "用户名称已存在";
  };


  • 24
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
首先需要明确的是,JSP 本身并不支持数据持久化,所以需要借助于其他技术来实现用户注册功能实现,比如使用 JSP Model 中的 Servlet 和 JDBC 技术。 以下是一个简单的用户注册功能实现代码示例: 1. 用户注册页面 register.jsp ```html <!DOCTYPE html> <html> <head> <title>用户注册</title> </head> <body> <h1>用户注册</h1> <form action="RegisterServlet" method="post"> <label for="username">用户名:</label> <input type="text" id="username" name="username" required><br><br> <label for="password">密码:</label> <input type="password" id="password" name="password" required><br><br> <label for="email">邮箱:</label> <input type="email" id="email" name="email" required><br><br> <input type="submit" value="注册"> </form> </body> </html> ``` 2. 用户注册处理逻辑 RegisterServlet.java ```java import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/RegisterServlet") public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); String email = request.getParameter("email"); Connection conn = null; PreparedStatement stmt = null; try { // 注册 JDBC 驱动 Class.forName("com.mysql.jdbc.Driver"); // 打开连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "username", "password"); // 执行 SQL 查询 String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)"; stmt = conn.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password); stmt.setString(3, email); stmt.executeUpdate(); response.sendRedirect("login.jsp"); } catch (SQLException se) { // 处理 JDBC 错误 se.printStackTrace(); } catch (Exception e) { // 处理 Class.forName 错误 e.printStackTrace(); } finally { // 关闭资源 try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException se) { se.printStackTrace(); } } } } ``` 3. 数据库表 users ```sql CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 注意:上述示例中的数据库连接和 SQL 语句仅供参考,实际应用中需要按照实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值