php注册系统和使用Xajax即时验证用户名是否被占用


Posted in PHP onAugust 31, 2017

在php中使用Xajax能够即时与数据库发生交互

带给用户更好的体验

主要的应用有网页的即时、不刷新的登录系统

也可以利用于注册系统中

即时验证用户名是否被占用

一、基本目标

首先在mysql中有一张用户信息表user

php注册系统和使用Xajax即时验证用户名是否被占用

编写一个用户注册系统,一开始注册按钮是禁用的状态

php注册系统和使用Xajax即时验证用户名是否被占用

当用户输入用户名完毕时,马上检查这个用户名是否被占用,如果是,禁用注册按钮,并弹出对话框

如果用户输入的用户名没有被占用,则解锁注册按钮,但如果用户输入两次输入的密码不一致,同样不允许用户注册

直到用户满足所有注册条件的时候,才放行

用户注册成功能够成功把用户名与密码添加到数据库之中,如上面的aa与b:

php注册系统和使用Xajax即时验证用户名是否被占用

二、基本思想

由于第一个输入框在失去焦点时,需要与数据库发生交互,所以需要用到php的Xajax技术

关于什么是失去焦点,见我之前的《【JavaScript】组件焦点与页内锚点间传值》(点击打开链接)一文,

关于什么是PHP的Xajax技术,与Xajax如何配置,可以参考我刚写的《【php】Xajax Helloworld》(点击打开链接)一文

而第二个输入框与第三个输入框不需要与数据库发生交互,在前台就可以做出判断,因此仅仅使用javascript就可以,

下面的代码说明,不再对此进行讨论,因为之前我在《【JavaScript】表单即时验证,不成功不让提交》(点击打开链接)一文中已经对此讨论得比较详细了。

三、制作过程

分两个页面,一个是用户填写注册信息的页面xajaxrec.php,一个是把用户注册信息填写到数据库的处理页面下xajxrecsuc.php
xajxrecsuc.php的代码如下,与之前《【php】数据库的增删改查和php与javascript之间的交互》(点击打开链接)的插入处理页面dbinsert.php根本就是一样的,由于笔者用的是同一张用户表,同一个数据库,因此连代码都不改就能够使用了,就把“添加成功”四个大字,改成“注册成功”而已:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>注册成功</title> 
</head> 
 
<body> 
<?php 
$username=$_REQUEST["username"]; 
$password=$_REQUEST["password"]; 
$con=mysql_connect("localhost","root","root"); 
if(!$con){ 
 die("连接失败!"); 
 } 
mysql_select_db("test",$con); 
mysql_query("insert into user(username,password) values ('".$username."','".$password."');"); 
mysql_close($con); 
?> 
<script> 
alert("注册成功"); 
window.location.href="xajaxreg.php" rel="external nofollow" ; 
</script> 
</body> 
</html>

然后重点来说说这个xajaxrec.php:

<?php 
include 'xajax_core/xajax.inc.php'; 
$xajax=new xajax(); 
//首先在xajax声明一个check函数 
$xajax->registerFunction("check"); 
//这个check函数需要前台传来用户名username 
function check($username){ 
 $orps=new xajaxResponse(); 
 //连接数据库,看看用没有这个用户名 
 $con=mysql_connect("localhost","root","root"); 
 if(!$con){ 
 die("连接失败!"); 
 } 
 mysql_select_db("test",$con); 
 $dbusername=null; 
 $result=mysql_query("select * from user where username='".$username."';"); 
 while($row=mysql_fetch_array($result)){ 
 $dbusername=$row["username"]; 
 } 
 //如果没有,根本不可能查出数据,对dbusername赋值的,所以dbusername还是为空的 
 if(is_null($dbusername)){ 
 //弹窗,把id为submitbtn的提交按钮disabled属性清理掉,解锁disabled 
 $orps->alert("恭喜,该用户名未被占用,可以注册"); 
 $orps->clear("submitbtn","disabled"); 
 } 
 else{ 
 //否则弹窗之后为submitbtn上锁,加上disabled属性 
 $orps->alert("该用户名已被占用,请更换被的用户名"); 
 $orps->assign("submitbtn","disabled","disabled"); 
 } 
 //人走带门,然后是三个xajax的指定动作 
 mysql_close($con); 
 return $orps; 
 } 
 
$xajax->processRequest(); 
$xajax->printJavascript(); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>用户注册</title> 
</head> 
 
<body> 
用户注册 
<!--为表单上个onsubmit属性,是因为但用户点击提交按钮的时候,跑完这个check()函数再提交这个表单--> 
<form action="xajxregsuc.php" method="post" onsubmit="return check()"> 
<!--但用户名的输入框失去焦点时,也就是用户输入完成,光标离开这个输入框的时候,马上调用xajax中的check函数,带过去的值就是本输入框的内容--> 
用户名:<input type="text" name="username" onblur="xajax_check(this.value);" /><br /> 
密码:<input type="password" name="password" id="password" /><br /> 
<!--确认密码这里调用下面的javascript检查即可--> 
请再次输入密码:<input type="password" name="passwordconfirm" id="passwordconfirm" onchange="check()"/><br /> 
<input type="submit" id="submitbtn" value="注册" disabled /> 
</form> 
</body> 
</html> 
<script> 
function check() { 
 var check = false; 
 var password = document.getElementById("password").value; 
 var pwdc = document.getElementById("passwordconfirm").value; 
 if (password != pwdc) { 
 alert("两次输入密码不一致"); 
 check = false; 
 } else { 
 check = true; 
 } 
 return check; 
} 
</script>

至此整个注册系统就完成。

四、展望

这个注册系统还是存在缺陷的,首先,涉及数据库操作的第一个处理框,没有进行有害sql注入语句的过滤,并且所有的处理框,输入乱七八糟的字符都是可以放行甚至在密码处理框,不输入密码也是放行的,这些小细节如果是对于一个要运行在网络的web系统,必须对其完善。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
PHPThumb图片处理实例
May 03 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
PHP反射机制原理与用法详解
Feb 15 PHP
PHP7多线程搭建教程
Apr 21 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 #PHP
laravel如何开启跨域功能示例详解
Aug 31 #PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 #PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 #PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 #PHP
php实现与python进行socket通信的方法示例
Aug 30 #PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 #PHP
You might like
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
JavaScript函数、方法、对象代码
2008/10/29 Javascript
javascript 写类方式之九
2009/07/05 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
python实现画出e指数函数的图像
2019/11/21 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
python实现指定ip端口扫描方式
2019/12/17 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
工作迟到检讨书
2014/02/21 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
高中教师评语大全
2014/04/25 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
森林防火宣传标语
2014/06/27 职场文书
Docker官方工具docker-registry案例演示
2022/04/13 Servers
MySQL详细讲解变量variables的用法
2022/06/21 MySQL