前天,公司总监提了一个需求,实现我公司商城注册会员用手机号登录这个功能,那么这个功能容易修改,在我的前一篇博文中已经给出处理方法了,但是这里有一个问题,就是如果实现了用手机号码来登陆,那么就需要在注册时保证会员所填写的手机号是唯一的,也就是说手机号还未被注册,那么该怎么来检测填写的手机号是否注册过了呢?

一、参考检测邮箱

 因为注册页面,有检查用户名和邮箱是否重复的步骤,初步想法是参考检测邮箱的方式来解决,但是查看user_passport.dwt,如下:

似乎可以像上面一样开为手机号的input标签中添加一个onblur事件,但是找了又找,并没有发现手机号码的input标签在哪里,倒是发现了如下的代码:

恍然大悟,因为默认的ecshop注册页面上的手机号并不是必填的选项,而且可以在后台进行管理的,且这些选项在ecshop数据表esc_reg_fields表中,因此参考检测email的方法失败!

二、解决方案

  通过查看页面的代码,用户点击注册按钮的时候,有一个return register();该方法在js/user.js文件中,故我们可以从此方法入手,在验证完手机号的正则匹配后,进行手机号是否被注册的验证。

2.1 、修改user.js文件

在user.js文件中找到如下代码:

  if (mobile_phone.length>0)
   {
     var reg = /^[\d|\-|\s]+$/;
     if (!reg.test(mobile_phone))
     {
       msg += mobile_phone_invalid + '\n';
     }
   }

将其替换为如下代码:

 if (mobile_phone.length>0)
    {
      var reg = /(^1[3|5|8][0-9]{9}$)/;;
      if (!reg.test(mobile_phone))
      {
        msg += mobile_phone_invalid + '\n';
      }
    else{
         //该请求必须为同步请求,否侧msg赋值失败,注册提交。
         $.ajax({
              type: 'GET',
              url: 'user.php?act=check_mobile_phone',
              data: {mobile_phone:mobile_phone},
              async:false,
              dataType: 'text',
              success: function(data){
                  if (data == 'false')
                   {
                     msg += mobile_phone_invalid2+'\n';
                   }
                   else
                   {

                   }
              }
         });

     }  }

2.2、在user.php中添加 check_mobile_phone的处理

在user.php中找到如下代码:

 /* 验证用户邮箱地址是否被注册 */
 elseif($action == 'check_email')
 {
     $email = trim($_GET['email']);
     if ($user->check_email($email))
     {
         echo 'false';
     }
     else
     {
         echo 'ok';
     }
 }

复制一份,并添加在其下面,修改为如下:

 /* 验证用户手机号是否被注册 */
 elseif($action == 'check_mobile_phone')
 {
     $mobile_phone = trim($_GET['mobile_phone']);
     if ($user->check_mobile_phone($mobile_phone))//如果已经被注册
     {
         echo 'false';
     }
     else
     {
         echo 'ok';
     }
 }

2.3、在integrate.php中添加 check_mobile_phone函数

在includes/modules/integrates/integrate.php中找到如下代码:

 function check_email($email)
     {
         if (!empty($email))
         {
           /* 检查email是否重复 */
             $sql = "SELECT " . $this->field_id .
                        " FROM " . $this->table($this->user_table).
                        " WHERE " . $this->field_email . " = '$email' ";
             if ($this->db->getOne($sql, true) > 0)
             {
                 $this->error = ERR_EMAIL_EXISTS;
                 return true;
             }
             return false;
         }
     }

复制一份,并添加在其下面,修改为如下:

function check_mobile_phone($mobile_phone)
    {
        if (!empty($mobile_phone))
        {
          /* 检查手机号是否重复 */
            $sql = "SELECT " . $this->field_id .
                       " FROM " . $this->table($this->user_table).
                       " WHERE mobile_phone= '$mobile_phone' ";
            if ($this->db->getOne($sql, true) > 0)
            {

                return true;
            }
            return false;
        }
    }

至此,问题得以解决,此方案中并没有使用ecshop自身封装好的Ajax.call(...)方法,Ajax.call(...)方法其实用起来相当的方便,但是根据其回调函数的返回值才改变register()函数中的msg的值,这个我没有方法可以做到,也算是一点小小的遗憾吧,这里提出来,博客园里面的博友们如果有好的方法,请不吝赐教!

Ecshop实现注册页面手机号唯一的验证的更多相关文章

  1. 实现Ecshop注册页面手机号唯一的验证

    如果Ecshop实现了用手机号码来登陆,那么就需要在注册时保证会员所填写的手机号是唯一的,也就是说手机号还未被注册,那么该怎么来检测填写的手机号是否注册过了呢? 一.参考ecshop检测邮箱 因为注册 ...

  2. day101:MoFang:模型构造器ModelSchema&注册功能之手机号唯一验证/保存用户注册信息/发送短信验证码

    目录 1.模型构造器:ModelSchema 1.SQLAlchemySchema 2.SQLAlchemyAutoSchema 2.注册功能基本实现 1.关于手机号码的唯一性验证 2.保存用户注册信 ...

  3. 【按键精灵篇】如何做一个自动打开APP进入注册页面自动输入自己手机号

    按键精灵,虽然很早听过,但是一直没有真正使用过,所以最近有点时间也简单试一下,通过脚本自动清理APP缓存,打开百家号并自动进入注册页面输入自己的手机号. 软件清单 1. 雷电手机模拟器:https:/ ...

  4. javaweb实现注册页面(数据库连接以及ajax验证)

    先放效果图 可实现js实时验证        可实现ajax实时验证注册信息是否存在   页面实现要求 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求 ...

  5. 关闭discuzX3.2注册页面的注册邮箱验证

    论坛升级后发现注册用户在输入任何邮箱email时,一直提示email 地址无效.用firephp跟踪发现:随机生成的email的后缀是@localhost! 找到原因,修改如下: //原来代码 if( ...

  6. day79:luffy:注册之对手机号的验证&实现基本的注册功能逻辑&点击获取验证码&redis

    目录 1.前端和后端对于手机号的验证 2.实现基本的注册功能-不包括验证码 3.点击获取验证码 4.解决登录不上Xadmin的bug 5.redis register.vue页面 <templa ...

  7. 爬虫笔记之w3cschool注册页面滑块验证码破解(巨简单滑块位置识别,非鼠标模拟轨迹)

    一.背景介绍 最开始接触验证码破解的时候就是破解的w3cschool的使用手机号找回密码页面的验证码,详见:验证码识别之w3cschool字符图片验证码(easy级别),这次破解一下他们注册页面的滑块 ...

  8. 使用vue和drf后台进行登录页面和注册页面(本文大概的疏通一下前后台是怎么交互的)

    注册页面 先从vue页面开始,下面是举例的vue页面截图 从上面的截图我们可以看到一些vue的指令:v-model和v-on(缩写成@) v-model是表单指令:就是获取属性值,在这里就是这些输入框 ...

  9. 扩展auth_user字段、BBS需求分析、创建BBS数据库、注册页面搭建与用户头像展示及Ajax提交数据

    昨日内容回顾 csrf跨站请求 1. SQL注入 2. xss攻击 3. csrf跨站请求 4. 密码加密(加盐) '''django中默认有一个中间件来验证csrf''' # 只针对post请求才验 ...

随机推荐

  1. 图形数据库、NOSQL和Neo4j

    简介 在众多不同的数据模型里,关系数据模型自80年代就处于统治地位,而且有不少实现,如Oracle.MySQL和MSSQL,它们也被称为关系数据库管理系统(RDBMS).然而,最近随着关系数据库使用案 ...

  2. Creating SharePoint 2010 Event Receivers in Visual Studio 2010

    转:http://msdn.microsoft.com/en-us/library/gg252010(v=office.14).aspx Summary:  Learn how to create a ...

  3. ECshop 每个数据库表结构说明

    ecs_account_log // 用户账目日志表 ecs_activity // 活动表(代码,名称,开始,结束,描述) ecs_ad // 广告表(位置,类型,名称,链接,图片,开始,结束,广告 ...

  4. RMQ(dp)

    我一开始是不知道有这么个东西,但是由于最近在学习后缀数组,碰到一道题需要用到后缀数组+RMQ解决的所以不得不学习了. 原理:用A[1...n]表示一组数,dp[i][j]表示从A[i]到A[i+2^j ...

  5. 10、TV UI

     TV UI布局 1. 为大屏幕提供适当的布局源文件. 2. 确保UI在一定距离仍然可以看清. 3. 为高清电视提供高分辨率的图标和图像. 1. 把屏幕上的导航控制菜单放在屏幕的左边或者右边,并且将 ...

  6. ios游戏开发--cocos2d学习(2)

    在第一节中简单介绍了2d项目模板HelloWorld的基础代码,并做了一点小小的改变,像触摸接收.旋转.移动和颜色转变序列CCSequence的使用等等,2d本身封装好了很多方便使用的动作,只需要调用 ...

  7. 关于CCSprite改变box2d刚体位置以及角度。

    同事今天在讨论一个事情,box2d中,body不可以直接设置位置,这样是不合理的,因为在物理的世界,你去左右它的物理检测.它就没有存在的必要了.但是,有人就想直接用box2d的碰撞.不用物理模拟.怎么 ...

  8. php 解决微信昵称emoji表情插入MySQL报错

    在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集,改为utf8mb4,但是前提是MySQL的版本需要5. ...

  9. HDU5634 Rikka with Phi 线段树

    // HDU5634 Rikka with Phi 线段树 // 思路:操作1的时候,判断一下当前区间是不是每个数都相等,在每个数相等的区间上操作.相当于lazy,不必更新到底. #include & ...

  10. 恒天云 3.0:打造基于OpenStack的私有云新模式

    摘自恒天云官网:http://www.hengtianyun.com/download-show-id-17.html 云计算在当今IT世界中已发展地如火如荼,越来越多的企业利用云计算改造传统的数据中 ...