`
阿尔萨斯
  • 浏览: 4173658 次
社区版块
存档分类
最新评论

AJAX注册记录

 
阅读更多
内容比较多,一个个来
先说一下思路,reg.php页是处理页面,另外要用到zw.js和czw.js(这两个文件是当初测试传递中文数值的,,名字沿用下来了)还 有pa.js和cpa.php以及rp.js和crp.php还有检测EMAIL的ma.js和cma.php..感觉篇幅不够完全记录。。因此捡重点的 先说。
reg.php中的文本框设置onchange后触发相应的JS事件,JS文件接收到数据后进行数值长度的判断,并将判断结果与数值一起传送到 相应的PHP处理页,PHP处理页或连接数据库或应用正则进行判断,并根据判断结果生成不同的值,完成后js则将取得的结果显示到reg.php中的相应 DIV,这样就实现了AJAX的预期功能,即不刷新页面,用户输入某数据后切换到另一文本框,即可以自动的显示该值是否可用。
关键点有这么几个,一个是中文的传递,做成之后看上去很轻松,实际上当初测试的时候,一直从test1测试到了test1X,才最终搞定。另外 一个关键点是email的正则,这个也耗了不少时间,我手上的教程给的似乎不正确,这已经不是第一第二次了。第三个是关于两次输入密码的判断,现在做到的 是在第二次输入密码进行判断,如果有BT的人注册喜欢从后面填写,那意味着还需要最终的修改,但是我观察DZ的密码判断,它也是在第二次判断的,因此时间 宝贵,就先这样吧,先处理其他的问题,以后有时间了再来加强这个一次密码判断。
好了,废话不少,开始帖代码。
额。。忘记说了,数据库中的字段是这样子的,当然你也可以修改
表:user
id int(4) 否 auto_increment
user varchar(20) utf8_unicode_ci 否
pass varchar(20) utf8_unicode_ci 否
mail varchar(25) utf8_unicode_ci 否
我的数据库和页面都是使用utf8的编码的~
reg.php
<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>AJAX注册</title>
<script language="javascript" src="zw.js"></script>
<script language="javascript" src="pa.js"></script>
<script language="javascript" src="rp.js"></script>
<script language="javascript" src="ma.js"></script>
</head>
<body>
<div style="; height:250px; float:left; margin-left:8px; margin-top:6px; background-color:#FFFFFF;
border: solid 1px #D9D9D4">

<div class="dh" style=" ; height:30px; text-align:left; color:#FFFFFF; padding-top:6px; padding-left:14px;
background-image:url(bg1.jpg)">
注册
</div>
<div style="; height:30px; float:left; padding:4px; font-size:14px; text-align:left">基本信息 ( * 为必填项) </div>
<?php
if($_POST[submit1]==true)
{
if($_SESSION[zw]!=""&&$_SESSION[rp]!=""&&$_SESSION[mail]!="")
{
$user=$_SESSION[zw];
$pass=$_SESSION[rp];
$mail=$_SESSION[mail];
include_once("bbs_conn.php");
$query=mysql_query("select * from `user` where `user` = '$user' ");
$myrow=mysql_fetch_array($query);
if($myrow==true)
{
echo"&lt;meta http-equiv=/"refresh/" content=/"3; url=reg.php/">该用户已被注册...请您重新填写...";
}
else
{
$query=mysql_query("INSERT INTO `user` (`id` ,`user` ,`pass` , `mail` )VALUES (NULL , '$user', '$pass' , '$mail')");
if($query==true)
{
$_SESSION[user]="$user";
$_SESSION[pass]="$pass";
echo"<meta http-equiv=/"refresh/" content=/"3; url=index.php/">注册成功...将自动跳转到相关页面...";
}
else
{
echo"<meta http-equiv=/"refresh/" content=/"3; url=reg.php/">注册失败...请您重新填写...";
}
}
}
}
?&gt;

<div style="; height:30px; float:left; ">
<div style="; float:left; padding:4px; font-size:14px; text-align:left">用户名 *</div>
<div style="; float:left; padding:4px; font-size:14px; text-align:left">
<input name="a" id="a" type="text" onChange="a()"></div>
<div style="; float:left; font-size:12px; padding-top:8px;" id="zw"></div>
</div>
<div style="; height:30px; float:left; ">
<div style="; float:left; padding:4px; font-size:14px; text-align:left">密码 *</div>
<div style="; float:left; padding:4px; font-size:14px; text-align:left">
<input name="b" id="b" type="password" onChange="b()"></div>
<div style="; float:left; font-size:12px; padding-top:8px;" id="pa"></div>
</div>
<div style="; height:30px; float:left; ">
<div style="; float:left; padding:4px; font-size:14px; text-align:left">确认密码 *</div>
<div style="; float:left; padding:4px; font-size:14px; text-align:left">
<input name="c" id="c" type="password" onChange="c()"></div>
<div style="; float:left; font-size:12px; padding-top:8px;" id="rp"></div>
</div>
<div style="; height:30px; float:left; ">
<div style="; float:left; padding:4px; font-size:14px; text-align:left">Email *</div>
<div style="; float:left; padding:4px; font-size:14px; text-align:left">
<input name="d" id="d" type="text" onChange="d()"></div>
<div style="; float:left; font-size:12px; padding-top:8px;" id="ma"></div>
</div>
<div style="; height:30px; float:left; ">
<div style="; float:left; padding:4px; font-size:14px; text-align:left"></div>
<div style="; float:left; padding:4px; font-size:14px; text-align:left">
<form action="reg.php" method="post" name="form1"><input name="submit1" type="submit" value="提交"></form></div>
</div>
</div>
</body>
</html>
真长。。。。。希望能够帖完。。。。。
关键的zw.js(传递中文值,判断中文用户名就靠它了)
function checkstr(str,digit){
var n=0;
for(i=0;i<str.length;i++){
var leg=str.charCodeAt(i);

if(leg>255){

n+=2;

}else{

n+=1;

}
}

if(n&gt;digit){

return true;

}else{

return false;

}

}
function getXMLR()
{
var xmlhttp,alerted
try {
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
} catch (E) {
alert("请安装Microsofts XML parsers")
}
}
if (!xmlhttp && !alerted) {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
alert("你的浏览器不支持XMLHttpRequest对象,请升级");
}
}
return xmlhttp;
}
function a() //name就是你要输入的参数
{
var xmlhttp = getXMLR();
if (xmlhttp){
var zw=document.getElementById("a").value;
if(checkstr(zw,20)){

var cd=1;

}else{

var cd=0;

}
var gotourl = 'czw.php';
xmlhttp.Open("POST",gotourl,true);
xmlhttp.setrequestheader("cache-control","no-cache");
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = showZW;
xmlhttp.send("zw="+zw+'&cd='+cd);
}

function showZW() {
if (xmlhttp.readyState==4){
var response = xmlhttp.responseText;
document.getElementById('zw').innerHTML = response;

}
}
}// JavaScript Document
注意其中的这两行代码
xmlhttp.setrequestheader("cache-control","no-cache");
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
这两行短小精悍,然后直接POST过去,再接一下就OK了。。想当初还想破脑筋通过URLGET过去,最后还没接成功,不过地址栏上一大堆疑似乱码的东东,总不如咱们这POST简洁明了吧。。(其实是自己没掌握URLGET,汗一个。。)
还有一个关键点就是判断接收到数据是否超过长度,是zw.js中的function checkstr进行处理的,并将结果以cd的值发送到czw.php进行相应的处理
czw.php接收传来的中文数据(当然也可以是英文),连接数据库进行查询,并显示结果(该结果将再次返回zw.js,并接着 xmlhttp.onreadystatechange = showZW; 执行function showZW,将结果显示到reg.php中的ID为zw的DIV中)
czw.php(这个czw也是随意起的,意思是处理中文。。。)
<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body><?php include_once("bbs_conn.php");
$zw=$_POST[zw];
$cd=$_POST[cd];

if($cd==0){

$query=mysql_query("SELECT * FROM `user` WHERE `user`='$zw' ");
$myrow=mysql_fetch_array($query);
if ($myrow == true){

echo "已存在";

}else{
$_SESSION[zw]="$zw";
echo "可以注册";
}

}else{

echo"用户名过长,请您重新输入";

}

?>
</body>
</html>
恩,这三个页面就构成了无敌滴检测中文用户名的功能了~其中要用到session。而session好像跨不过form(不敢肯定),因此 reg.php中会有这样奇怪的<form action="reg.php" method="post" name="form1"><input name="submit1" type="submit" value="提交"></form> 其实,这在用户填写好资料后按提交,在reg.php中的处理代码用相应的session的值进行判断
..好像写了不少了。。。后面还有密码的判断再次确认以及EMAIL的判断。。
密码的判断,也是要用到前面的判断长度的函数,也是到相应的PHP页进行处理,其实理论上来说,JS就可以处理了,因为它不需要连接数据库,不 过需要生成session。。JS可以生成cookie啊,,,,,,,不过我比较喜欢session。。(毕竟放在服务器嘛,不比你放在客户段安全可 靠??当然,以后还是要用到的,不过我在想,cookie的功能能不能由session实现,恩!这是将来的研究方向~)
如果能够上传代码就好了。。
其实也是大同小异,不过为了不此文不被骂为太监文,因此冒汗帖出全部代码。。。。(别嫌我罗嗦,当初找很多资料就因为作者的语焉不详,而对于像 我这样的小小鸟来说,无异于是无纸天书,因此,冒着被骂唐僧的危险,也宁死帖出与广大像我这样的菜菜鸟一起分享,希望大家有什么心得了也要帖出啊,有一个 前提,就是不许骂别人菜。。高手谁不是从菜鸟起步的哇,是不。。)
pa.js
function checkstr(str,digit){
var n=0;
for(i=0;i<str.length;i++){
var leg=str.charCodeAt(i);

if(leg>255){

n+=2;

}else{

n+=1;

}
}

if(n&gt;digit){

return true;

}else{


return false;

}

}
function getXMLR()
{
var xmlhttp,alerted
try {
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
} catch (E) {
alert("请安装Microsofts XML parsers")
}
}
if (!xmlhttp && !alerted) {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
alert("你的浏览器不支持XMLHttpRequest对象,请升级");
}
}
return xmlhttp;
}
function b() //name就是你要输入的参数
{
var xmlhttp = getXMLR();
if (xmlhttp){
var pa=document.getElementById("b").value;
if(checkstr(pa,20)){ //此处为检测长度的控件

var cd=1;

}else{

var cd=0;

}
var gotourl = 'cpa.php?pa='+pa+'&cd='+cd;
xmlhttp.Open("GET",gotourl,true);
xmlhttp.onreadystatechange = showPA;
xmlhttp.send();
}
function showPA() {
if (xmlhttp.readyState==4){
var response = xmlhttp.responseText;
document.getElementById('pa').innerHTML = response;
}
}
}// JavaScript Document
cpa.php
<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body><?php
$pa=$_GET[pa];
$cd=$_GET[cd];

if($cd==0)
{
$_SESSION[pa]="$pa";
echo"输入正确";
}
else
{
echo"密码过长,请您重新输入";
}
?>
</body>
</html>
rp.js
function checkstr(str,digit){
var n=0;
for(i=0;i<str.length;i++){
var leg=str.charCodeAt(i);

if(leg>255){

n+=2;

}else{

n+=1;

}
}

if(n&gt;digit){

return true;

}else{


return false;

}

}
function getXMLR()
{
var xmlhttp,alerted
try {
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
} catch (E) {
alert("请安装Microsofts XML parsers")
}
}
if (!xmlhttp && !alerted) {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
alert("你的浏览器不支持XMLHttpRequest对象,请升级");
}
}
return xmlhttp;
}
function c() //此处修改相应的函数
{
var xmlhttp = getXMLR();
if (xmlhttp){
var rp=document.getElementById("c").value; //此处需要修改变量
if(checkstr(rp,20)){ //此处为检测长度的控件

var cd=1;

}else{

var cd=0;

}
var gotourl = 'crp.php?rp='+rp+'&cd='+cd;
xmlhttp.Open("GET",gotourl,true);
xmlhttp.onreadystatechange = showRP;
xmlhttp.send();
}
function showRP() {
if (xmlhttp.readyState==4){
var response = xmlhttp.responseText;
document.getElementById('rp').innerHTML = response;

}
}
}// JavaScript Document
crp.php
<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body><?php
$rp=$_GET[rp];

$cd=$_GET[cd];

if($cd==0)
{
if($_SESSION[pa]=="")
{
echo "请您输入密码";
}
else
{
$_SESSION[rp]=$rp;
if($_SESSION[rp]==$_SESSION[pa])
{
echo"输入正确";
}
else
{
echo"两次输入不一致,请您重新输入...";
}
}
}
else
{
echo"密码过长,请您重新输入";
}
?>
</body>
</html>
其实,上面的是一些逻辑判断,根据不同的需要可以修改。。。。。
接下来要说一下EMAIL的认证了,,说难不难,其实只要有好的正则,就成功了一半。。。。源码帖出。。。。
ma.js (email的简写,为了押韵。。)
function checkstr(str,digit){
var n=0;
for(i=0;i<str.length;i++){
var leg=str.charCodeAt(i);

if(leg>255){

n+=2;

}else{

n+=1;

}
}

if(n&gt;digit){

return true;

}else{


return false;

}

}
function getXMLR()
{
var xmlhttp,alerted
try {
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
} catch (E) {
alert("请安装Microsofts XML parsers")
}
}
if (!xmlhttp && !alerted) {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
alert("你的浏览器不支持XMLHttpRequest对象,请升级");
}
}
return xmlhttp;
}
function d() //name就是你要输入的参数
{
var xmlhttp = getXMLR();
if (xmlhttp){
var mail=document.getElementById("d").value;
if(checkstr(mail,25)){ //此处为检测长度的控件

var cd=1;

}else{

var cd=0;

}
var gotourl = 'cma.php?mail='+mail+'&cd='+cd;
xmlhttp.Open("GET",gotourl,true);
xmlhttp.onreadystatechange = showPA;
xmlhttp.send();
}
function showPA() {
if (xmlhttp.readyState==4){
var response = xmlhttp.responseText;
document.getElementById('ma').innerHTML = response;

}
}
}// JavaScript Document
大同小异吧,下面是重点了,让无数人崩溃的正则将出现。。。(有时候觉得正则不是人写的,有种不人性的感觉。。。建议以后封装成函数之类的,要用调用出来就OK了。。。)
cma.php
<?php session_start(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<?php
function checkmail($mail)
{
if(!eregi("^[_/.0-9a-z-]+@([0-9a-z][0-9a-z-]+/.)+[a-z]{2,3}$",$mail)) //正则,如果有一不等于,判断为错
{
return false;
}
else //否则是正确的
{
return true;
}
}
?>
<?php //别嫌我写两个php。。上面一个基本不动的嘛,当它不存在好了。。
$mail=$_GET[mail];
$cd=$_GET[cd];

if(checkmail($mail) == true && $cd==0)
{
$_SESSION[mail]=$mail;
echo "输入正确";
}
else
{
if($cd==1)
{
echo "输入过长,请重新输入";
}
else
{
echo "格式不正确";
}
}
?>
</body>
</html>
OK,大功告成~~这是我写过的最长的一篇文章了,,其实代码占了很大篇幅,不过那也是俺写滴,虽然这篇文章不会被别人转载刊登到各大网站,但是毕竟是俺心血滴付出,以后有更OK的想法了,毕竟会再次更新,敬请关注本空间,哈哈~
照例要感谢一下各位前辈,没有你们的文章,我断然是写不出这篇“大”作的(字的数量很大。。)。非常感谢你们无私的作品~对俺这个小小鸟非常有 帮助,另外要感谢俺滴两位老师,百度和GOOGLE,正是你们的指导,才有了今天的这个作品,以后,我还要写出更多更好的作品,以报答你们的厚爱~~再次 感谢PHPCHINA,为俺提供了这个空间,来写这篇可能被后世千千万万人唾骂的文章。。
感谢完毕,收工~
分享到:
评论

相关推荐

    Asp.Net基于Ajax的无刷新聊天室

    ·采用数据库记录在线用户及聊天信息; ·登录与注册融合,新用户无需专门注册,只要首次登录时所使用的用户名没有被别人注册可自动注册 ·方便地选取聊天对象,无需从下拉菜单中选择用户,只要用鼠标单击即可选定...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。 4.在服务端分页查询功能,优点:实时性:跳页才查询。数据量小:只加载当前页的记录进行显示。 5.单数据源配置(兼容Tomcat和Weblogic)。 6.Hibernate...

    jquery+ajax实现注册实时验证实例详解

    当我们注册一个用户时,会实时提示该用户的信息是否可用,这就是ajax的应用,很久以前就看过这个实现了,今天又看了一遍,给记录下来O(∩_∩)O哈! 先介绍下ajax中$.get,由于$.post用法和$.get大同小异就不再介绍了...

    [asp ajax dll]IT学习网20081127

    更新记录 [2006-9-23]修复修改个人资料时,文章发表人没有同步修改bug;增加我的文章;修改文章分类页显示文章方式 [2006-9-28]去除ewebeditor,发表文章实现ajax 2008-11-27 tww qq:43637507

    基于jsp+servlet+ajax的web聊天室

    使用servlet+ajax实现无刷新发言与更新实时聊天记录以及注册时文本框失去焦点AJAX验证用户名是否已重复; 系统支持双人聊天与群聊,群聊登陆界面为webLogin.jsp 双人聊天为login.jsp。在注册以后均可以登陆系统进行...

    PHP+Ajax网站开发典型实例

    实例67 AjaX实现数据记录排序 实例68 局部动态更新数据 实例69 AjaX+PHP数据分页显示 实例70 指定CSS样式显示数据 实例71 JSON格式处理信息 第9章 Ajax时尚技术 实例72 根据邮编自动完成地址信息 实例73 AiaX...

    ASP(ajax)计算机竞赛答题程序源码

    ASP(ajax)计算机竞赛答题程序源码 计算机竞赛 请先运行regdll.bat注册asptodlldemo.dll组件,然后才能正常访问页面。 注册一个用户就可以进行答题。 '转发时请保留此声明信息,这段声明不并会影响你的速度! '****...

    基于PHP和Ajax的域名查询系统毕业设计,前端 Bootstrap 和 jQuery,后端CodeIgniter,系统MVC

    3. 用户管理:系统支持用户注册、登录和注销功能,注册用户可以保存自己的查询历史记录,并可以设置查询历史记录的保留时间。 4. 系统设置:系统管理员可以对系统进行设置,包括 Whois 服务器、DNS 服务器等相关参数...

    node.js+jQuery实现用户登录注册AJAX交互

    最近实现了Node.js当作后台,jQuery写前台AJAX代码的,实现用户登录和注册的功能,刷新了前后端交互的三观。特记录一下。 1.login.ejs实现form框架 &lt;form &gt; &lt;li&gt;&lt;p&gt;用户名&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;input type=...

    ASP个人网站模板 v1.3(含Ajax)

    2、提供用户注册、审核模块; 3、提供HTML和Ajax两种版本;Ajax版本子页面不含Google广告栏。 4、主页文章分类采用Ajax技术,无刷新页面,速度更快; 5、提供留言模块; 6、新增用户站长Mail通知;...

    Ajax实现注册并选择头像后上传功能

    在初次接触ajax后,我们做了一个crm训练的项目,大多数小组都有注册用户这一项,但是都忽略掉了一个功能,那就是,很多网站的注册是可以上传头像的,在这里我做了一个在已有的头像数组里选择图片上传作头像的小型crm...

    毕业设计项目PHP-MySQL-Ajax 在线二手书交易平台.zip

    用户个人中心:为每个用户提供一个个人中心页面,可以查看和编辑个人信息,管理已发布的书籍信息,以及查看购买历史记录等。 订单管理:管理员角色可以管理所有交易订单,包括确认订单、取消订单等操作。 后台管理...

    jsf_ajax_hibernate_jdbc_mysql_dwr演示视频

    该资源使用了众多的java软件开发项目用到的基本内容,包含jsf,ajax技术,hibernate映射,log4j记录日志和dom4j解析xml以及使用的dwr使用的ajax技术以及基本的ajax应用,数据库使用的是mysql。演示的是用户注册系统,...

    EasyUI框架 使用Ajax提交注册信息的实现代码

    EasyUI框架 使用Ajax提交注册信息的实现代码 一、服务器代码: @Controller @Scope(prototype) public class StudentAction extends BaseAction&lt;Student&gt; { private static final long serialVersionUID = -...

    知了课堂 问答论坛 flask项目 前端: html css js 三件套 以及 Ajax的使用 后端: python, 第三方

    通过这个知识论坛,不仅可以将平时询问GPT 有意义有价值的问题给记录下来,同时也很方便日后翻看查找学习. 2. 技术架构 前端: html css js 三件套 以及 Ajax的使用 后端: python, 第三方库: flask, flask_...

    jquery 中ajax执行的优先级

    本文给大家讲述的是个人再做用户注册的时候遇到的ajax执行优先级的问题,以及在网友们的帮助下,解决此问题的全过程,这里记录下来,分享给大家。

    健身俱乐部Web网站-JSP+Servlet+Hibernate+jQuery+Ajax

    1.上次支付日期,记录的是上次缴纳月供的时间。扣除月供由一个SQL存储过程完成。 2.Cookie记住密码 3.活动海报提供点击看大图功能 4.添加活动的日期用jQuery日期插件(datepicker) 5.为表格添加更多的CSS样式,让表格...

    基于SpringBoot+mybatis+Jsp的日记记录系统

    是一款面向用户的系统,用户可以自己注册账号进行登录,管理自己的信息(个人中心)、自由添加日记分类、发布日记来记录自己所遇到有趣的人和事、也可以发表心情,系统提供了全站的日记搜索功能。 这款系统采用jsp...

    Ajax+ASP简单个人网站源码 v1.7

    7、用户访问记录以及用户下载记录,在线人数显示,在线会员浏览; 8、文章、分类、栏目日、月、总浏览计数; 9、来访者IP来源查询、更新(请到本站主页下载IP数据库放到Data目录下); 10、热门文章展示(admin/...

    ASP计算机竞赛答题程序(AJAX版,题型:选择题,判断题,录入题)

    ASP计算机竞赛答题程序(AJAX版,题型:选择题,判断题,录入题) 计算机竞赛 请先运行regdll.bat注册asptodlldemo.dll组件,然后才能正常访问页面。 注册一个用户就可以进行答题。 管理页面为admin.asp,可通过主页...

Global site tag (gtag.js) - Google Analytics