thinkphp3.2.3的自动验证
巴扎黑
巴扎黑 2017-04-11 10:18:01
[PHP讨论组]

这是html代码

这是控制器代码

这里是model代码

我现在就是想做一个功能,就是自动验证这个用户名是否存在,但是现在就有一个问题,我一按提交

就在另外一个页面出现这个信息,但是我想在这个输入框后面直接显示这个信息该怎么做?

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

巴扎黑
巴扎黑

全部回复(5)
PHP中文网

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)
    <p class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </p>
@endif

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

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

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

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

阿神

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

黄舟

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号