用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4316|回复: 5
收起左侧

[HELP] 恳请指点迷津。关于ci与jquery formvaliditor的配合问题

[复制链接]
发表于 2009-7-16 21:47:45 | 显示全部楼层 |阅读模式
在用户注册时,为保证用户注册名称的唯一性,在用户设定用户名时,适时返回数据库返回值。然后根据判断该用户名是否可以注册。
问题现象:搞不到数据库的返回值,不知道什么原因,卡了两天了,在论坛里找了很久,但没有和我这个类似的。代码都是以前用过的代码,常规的面向过程方式,是没有问题的。
模型部分代码:
  function checkregname($checkregname)
  {
    $this->db->where('logname',$checkregname);
    $query = $this->db->get('userinfo');
    if($query->num_rows() > 0)
    {
      return '0';//存在重名
    }
    else
    {
      return '1';//可以注册
    }
  }

控制器部分代码:
  function checkregname()
  {
    $checkregname = $this->input->get('reglogname');
    //print $checkregname;
    print $this->user_model->checkregname($checkregname);
  }

视图部分代码:
<form name="userreg" id="userreg" method="post" action="<?php echo site_url();?>/default/user/reg">
<tr height="30" bgcolor="#FFFFFF">
<td width="15%" align="center">登录名</td>
<td width="20%"><input name="reglogname" id="reglogname" size="19" /></td>
<td width="62%"><span id="reglognameTip"></span></td>
</tr>
<tr height="30" bgcolor="#FFFFFF">
<td colspan="3" align="center"><input type="submit" name="button" id="button" value=" 确认注册 " /></td>
</tr>
<!--注册验证-->
<script type="text/javascript">
$(document).ready(function(){
  $.formValidator.initConfig({formid:"userreg",onerror:function(msg){alert(msg)},onsuccess:function(){alert('校验没有通过,具体错误请看错误提示');return false;}});
  $("#reglogname").formValidator({onshow:"请输入登录名",onfocus:"用户名至少6个字符,最多10个字符",oncorrect:"该用户名可以注册"}).inputValidator({min:6,max:10,onerror:"设定的登录名长度非法,请确认"}).regexValidator({regexp:"username",datatype:"enum",onerror:"用户名格式不正确"})
    .ajaxValidator({
    type : "get",
    url : "<?php echo site_url();?>/default/user/checkregname",
    datatype : "json",
    cache : false,
    success : function(data){
    if( data == "1" )
    {
      return true;
    }
    else
    {
      return false;
    }
    },
    buttons: $("#button"),
    error: function(){alert("服务器没有返回数据,可能服务器忙,请重试");},
    onerror :  "该用户名不可用,请更换用户名",
    onwait : "正在对用户名进行合法性校验,请稍候..."
  });
});
</script>
随附使用的formvalidator插件

formValidator.rar

7.64 KB, 下载次数: 1

formValidatorRegex.rar

1.99 KB, 下载次数: 1

发表于 2009-7-16 21:54:21 | 显示全部楼层
看错~
发表于 2009-7-16 21:59:16 | 显示全部楼层
CI 默认是取不到 GET 参数的,要通过其他方式。
我建议你使用 POST 方式,我在 iqwer.com 中大量使用 POST 进行 AJAX 调用,效果相当好。

PS: 我看你的控制器并没有返回合适的 JSON 格式的字符串吧?
 楼主| 发表于 2009-7-17 08:44:16 | 显示全部楼层
其实这个json是在测试时添加到,原先用的html,在控制器处,抓取的值也是基于html的。
发表于 2009-7-17 10:49:38 | 显示全部楼层
请楼主使用 POST 传参。
发表于 2009-7-18 15:20:17 | 显示全部楼层
本帖最后由 yinzhili 于 2009-7-18 15:24 编辑

正好我也用过form validator插件,不知道和楼主用的是不是同一个。(我用的是http://www.cnblogs.com/wzmaodong/archive/2009/03/03/1402635.html这个)
说说我的经验吧。我的项目里面是在用户注册的时候,通过ajax判断用户输入的用户名是否被占用,因此JS代码是这样的:

AjaxValidator(
{type:"get",
url:"<?php echo base_url();?>signup/is_usable",
data:'/'+$("#username").val(),
datatype:"html",
success:function(msg){if(escape(msg)=="0") {return true;}else{return false;}},
error: function(){alert("服务器没有返回数据,可能服务器忙,请重试");},
onerror : "该用户名已经被占用,请选择其它的用户名",
onwait : "正在对用户名进行合法性校验,请稍候..."}


其中,username是注册表单中输入框的ID值。
用GET的方式可以传递数据,但是在控制器里是不能通过  $this->input->get 或是$_GET[]这两种方式取到提交的数据的。因此我是这么写的:

function is_usable(){
        $get_username=$_REQUEST['username'];
        if($get_username==null or $get_username==""){
            echo "参数错误";
        }
        else{
            $this->load->model('user_model');          //载入用户模型
            $status=$this->user_model->if_registered($get_username);  //调用用户模型中的函数,并将参数传递过去
            if($status==1){
                echo "1"; //如果用户名已被占用
            }
            else{
                echo "0";
            }
        }
    }


然后模型里面是这么写的:

function if_registered($get_username){
        $this->db->where('username', $get_username);
        $query=$this->db->get('users');
        if( ($query->row_array())==null ){
            return 0;   //如果数据库中没有符合此用户名的记录,则返回0
        }
        else{
            return 1;   //如果数据库中有符合此用户名的记录则返回1
        }
    }


希望能给你一点参考。

评分

参与人数 1威望 +3 收起 理由
Hex + 3 精彩解答

查看全部评分

本版积分规则