thinkphp3.2.3的自动验证

这是html代码

clipboard.png

这是控制器代码

clipboard.png

这里是model代码

clipboard.png

我现在就是想做一个功能,就是自动验证这个用户名是否存在,但是现在就有一个问题,我一按提交
clipboard.png
就在另外一个页面出现这个信息,但是我想在这个输入框后面直接显示这个信息该怎么做?

clipboard.png这个后面,不用ajax,用thinkphp3.2.3的自动验证能完成我这个想法吗?求大神

阅读 4.9k
5 个回答

HTML

<notempty name="error">{$error}</notempty>
<form action="__SELF__"></form>

Controller

function verify() {
    $error = '';
    if(IS_POST)
    {
        if($member->create())
        {
            if($member->add())
            {
                $this->success('注册成功');
            }else{
                $this->error('注册失败');
            }
        }else{
            $error = $member->getError();
        }
    }else{
        $this->assign('error',$error);
        $this->display();
    }
}

谢邀!

你不用ajax的话,你有去看TP封装的success和error函数么?过程中你会看到有一个提示页面,无论成功还是失败:ThinkPHP/Tpl/dispatch_jump.tpl, 你可以去看看,里面有一个变量$jumpUrl,你改变这个值就会跳到你指定的URL,而这个URL可以经过success和error函数传递过去,第二个参数加上你对应的URL就好:

    /**
     * 操作成功跳转的快捷方法
     * @access protected
     * @param string $message 提示信息
     * @param string $jumpUrl 页面跳转地址
     * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间
     * @return void
     */
    protected function success($message='',$jumpUrl='',$ajax=false) {
        $this->dispatchJump($message,1,$jumpUrl,$ajax);
    }
    

那么就跳转到了你验证的页面,这时候你需要在你的控制器的验证方法verify()中去查询数据库中有无这个student,如果有把student的数据填到客户提交的表单,并且模版中显示成功,前面已经有提示失败的中转页面,这里不做处理,当然你想处理也是可以保存客户表单数据。

所以,还是用ajax吧,简单方便,给你看个例子,你把属性换一换就可以直接用了,前提是你明白这意思:

    $(".submit-btn").click(function(e) {
    $.ajax({
        type:"POST",
        url: $('#data-addAccount').attr("action"),
        dataType: "json",
        data: $('#data-addAccount').serialize(),
        success: function(data) {
                if(data.status == 1) {
                    updateAlert(data.msg, 'alert-success')
                    setTimeout("window.location.reload()",2000)
                }else {
                    $('.data_email').html(data.msg);
                    $(".data_email").css('color','#f00');
                }
            }
        });
    });

谢邀,我不太熟think,如果再不用ajax,我只能说个思路了。具体怎么应用到think中,你可以自己试试。

我说一下laravel是怎么实现的吧。

laravel在验证表单的时候,如果有不符合验证要求的字段会把用户重定向到先前的位置,所有的错误会被闪存到session。然后有个中间件负责把session里的错,统一赋值给$errors变量。这样在view端只需如下判断即可:

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

当第一次访问这个页面时,$errors肯定是没有值,因此不会有错误显示,如果再提交后并且有错误的情况下,laravel自动回退到这个页面后,这时候errors变量里就有值了。

当然以上是一次性把所有的错误打印到一个位置。

你可以根据需求把errors数组中的错误拆到想要的位置。

以上是一思路。不知think 中有没有对应实现。

建议用ajax提交表单,这样处理起来就方便多了。

不用ajax你怎么提交数据就是个问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题