PHP ThinkPHP 表单自动验证


UserModel.class.php(UserModel模型):

<?php
//命名空间 php5.3以后版本支持
namespace Model;
use Think\Model;

//User模型model类
//父类:ThinkPHP/Library/Think/Model.class.php
class UserModel extends Model{
    //设置验证规则
    // 是否批处理验证
    protected $patchValidate = true;  //设置为true后,就会一次性验证所有控件,而不是一个一个地验证。
    // 自动验证定义
    protected $_validate = array(
        //为表单域定义具体验证规则
        //一、 验证用户名,非空
        //array(字段名称 表单域name属性值,验证规则,错误提示[,验证条件,附加规则,验证时间])
        array('username','require','用户名不能为空'),
        array('username','','用户名已经被占用',0,'unique'),
        //二、 密码,非空
        array('password','require','密码不能为空'),
        //三、 确认密码,非空/与密码保持一致
        array('password2','require','确认密码不能为空'),
        array('password2','password','与密码保持一致',0,'confirm'),  //0 表示存在字段就验证,即使值为空也要验证
        //四、 邮箱验证,符合邮箱格式
        array('user_email','email','邮箱格式不正确',2),   //2 表示值为空就不验证。
        //五、 qq号码,纯数字,位数为5-12位
        array('user_qq','number','qq号码为数字信息'),
        array('user_qq','5,12','qq号码长度为5-12位',0,'length'),
        //六、 学历,必须选择一个
        array('user_xueli','2,3,4,5','学历必须选择一个',0,'in'),
        //七、 爱好,至少选择两个或以上
        //通过当前模型(Model)类的check_hobby()方法进行验证
        array('user_hobby','check_hobby','爱好至少选择两个或以上',1,'callback'),  //1 表示必须验证,如果没有选择复选框(表单中没有user_hobby字段)也必须验证
    );

    //$arg参数 代表被收集到的表单域信息
    function check_hobby($arg){
        if(count($arg)<2){
            return false;
        }
        return true;
    }
}
UserController.class.php(用户控制器):
<?php
//用户控制器
//命名空间
namespace Home\Controller;
use Think\Controller;
//Controller父类:ThinkPHP/Library/Think/Controller.class.php
class UserController extends Controller{
    //注册系统
    function register(){
        $user = new \Model\UserModel();  //必须实例化普通model对象(内部有验证规则)
        //两个逻辑:展示、收集
        if(!empty($_POST)){  //表单提交给自己。通过判断$_POST是否为空 来确定是展示表单还是收集表单。
            //$z = $user -> add($_POST);  //该方式未进行表单验证
            $data = $user -> create(); //收集信息、表单自动验证
            if($data){
                //验证成功,就会通过$data体现收集到的表单信息
                //爱好的数组变为字符串
                $data['user_hobby'] = implode(',',$data['user_hobby']);  //爱好多选框收集的数组信息转成字符串。
                $z = $user -> add($data);
                if($z)
                    $this -> redirect('Index/index');
            }else{
                //验证失败,输出查看错误信息
                $this -> assign('errorInfo',$user->getError());
            }
        }
        $this -> display();  //展示表单模板页面
    }
}
register.html(前端视图模板页):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta name="Generator" content="YONGDA v1.0" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="Keywords" content="YONGDA商城" />
        <meta name="Description" content="YONGDA商城" />

        <title>YONGDA商城 - Powered by YongDa</title>

        <link href="{$smarty.const.CSS_URL}style.css" rel="stylesheet" type="text/css" />

    </head>
    <body class="index_body">
        <div class="block clearfix" style="position: relative; height: 98px;">
            <a href="#" name="top"><img class="logo" src="{$smarty.const.IMG_URL}logo.gif"></a>

            <div id="topNav" class="clearfix">
                <div style="float: left;"> 
                    <font id="ECS_MEMBERZONE">

                        <div id="append_parent"></div>
                        欢迎光临本店 
                        <a href="./index.php?r=user/login"> 登录</a>
                        <a href="./index.php?r=user/register">注册</a>
                    </font>
                </div>
                <div style="float: right;">

                    <a href="#">查看购物车</a>
                    |
                    <a href="#">选购中心</a>
                    |
                    <a href="#">标签云</a>
                    |
                    <a href="#">报价单</a>
                </div>

            </div>
            <div id="mainNav" class="clearfix">
                <a href="#" class="cur">首页<span></span></a>
                <a href="#">GSM手机<span></span></a>
                <a href="#">双模手机<span></span></a>
                <a href="#">手机配件<span></span></a>
                <a href="#">优惠活动<span></span></a>

                <a href="#">留言板<span></span></a>
            </div>
        </div>

        <div class="header_bg">
            <div style="float: left; font-size: 14px; color:white; padding-left: 15px;">
            </div>  

            <form id="searchForm" method="get" action="#">
                <input name="keywords" id="keyword" type="text" />

                <input name="imageField" value=" " class="go" style="cursor: pointer; background: url('{$smarty.const.IMG_URL}sousuo.gif') no-repeat scroll 0% 0% transparent; width: 39px; height: 20px; border: medium none; float: left; margin-right: 15px; vertical-align: middle;" type="submit" />

            </form>
        </div>
        <div class="blank5"></div>
        <div class="header_bg_b">
            <div class="f_l" style="padding-left: 10px;">
                <img src="{$smarty.const.IMG_URL}biao6.gif" />
                北京市区,现在下单(截至次日00:30已出库),<b>明天上午(9-14点)</b>送达 <b>免运费火热进行中!</b>

            </div>
            <div class="f_r" style="padding-right: 10px;">
                <img style="vertical-align: middle;" src="{$smarty.const.IMG_URL}biao3.gif">
                    <span class="cart" id="ECS_CARTINFO">
                        <a href="#" title="查看购物车">您的购物车中有 0 件商品,总计金额 ¥0.00元。</a></span>
                    <a href="#"><img style="vertical-align: middle;" src="{$smarty.const.IMG_URL}biao7.gif"></a>

            </div>
        </div>

        <div class="block block1">  

            <div class="block box">
                <div class="blank"></div>
                <div id="ur_here">
                    当前位置: <a href="#">首页</a> <code>></code> 用户注册 
                </div>
            </div>
            <div class="blank"></div>


            <!--放入view具体内容-->

            <div class="block box">

                <div class="usBox">
                    <div class="usBox_2 clearfix">
                        <div class="logtitle3"></div>
<form id="yw0" action="{$smarty.const.__SELF__}" method="post">                
    <table cellpadding="5" cellspacing="3" style="text-align:left; width:100%; border:0;">
        <tbody>
            <tr>
                <td style="width:13%; text-align: right;"><label for="User_username" class="required">用户名 
                <span class="required">*</span></label>
                </td>

                <td style="width:87%;">
                    <input class="inputBg" size="25" name="username" id="User_username" type="text" value="" />                  
                    <span style="color:red;">{$errorInfo.username}</span>
                </td>
            </tr>
            <tr>
                <td align="right">
                    <label for="User_password" class="required">密码 <span class="required">*</span></label>
                </td>

                <td>
                    <input class="inputBg" size="25" name="password" id="User_password" type="password" value="" />        <span style="color:red;">{$errorInfo.password}</span> 
                </td>
            </tr>
            <tr>
                <td align="right"><label for="User_password2">密码确认</label></td>
                <td>
                    <input class="inputBg" size="25" name="password2" id="User_password2" type="password" />
                <span style="color:red;">{$errorInfo.password2}</span>
                </td>

            </tr>
            <tr>
                <td align="right"><label for="User_user_email">邮箱</label></td>
                <td>
                    <input class="inputBg" size="25" name="user_email" id="User_user_email" type="text" value="" />    <span style="color:red;">{$errorInfo.user_email}</span>
                </td>
            </tr>
            <tr>

                <td align="right"><label for="User_user_qq">qq号码</label></td>
                <td>
                    <input class="inputBg" size="25" name="user_qq" id="User_user_qq" type="text" value="" />
                    <span style="color:red;">{$errorInfo.user_qq}</span>
                </td>
            </tr>
            <tr>
                <td align="right"><label for="User_user_tel">手机</label></td>
                <td>
                    <input class="inputBg" size="25" name="user_tel" id="User_user_tel" type="text" value="" /><span style="color:red;">{$errorInfo.user_tel}</span>
                </td>
            </tr>
            <tr>
                <!--radioButtonList($model,$attribute,$data,$htmlOptions=array())-->
                <td align="right"><label for="User_user_sex">性别</label></td>
                <td>
                    <input id="ytUser_user_sex" type="hidden" value="" name="user_sex" />
                    <span id="User_user_sex">
                    <input id="User_user_sex_0" value="1" checked="checked" type="radio" name="user_sex" /> 
                    <label for="User_user_sex_0">男</label> 
                    <input id="User_user_sex_1" value="2" type="radio" name="user_sex" /> 
                    <label for="User_user_sex_1">女</label> 
                    <input id="User_user_sex_2" value="3" type="radio" name="user_sex" /> 
                    <label for="User_user_sex_2">保密</label></span>                                
                </td>
            </tr>
            <tr>
                <!--dropDownList($model,$attribute,$data,$htmlOptions=array())-->
                <td align="right"><label for="User_user_xueli">学历</label></td>
                <td>
                    <select name="user_xueli" id="User_user_xueli">
                        <option value="1" selected="selected">-请选择-</option>
                        <option value="2">小学</option>

                        <option value="3">初中</option>
                        <option value="4">高中</option>
                        <option value="5">大学</option>
                    </select>       
                    <span style="color:red;">{$errorInfo.user_xueli}</span>
                    <div class="errorMessage" id="User_user_xueli_em_" style="display:none"></div>                            </td>
            </tr>
            <tr>
                <!--checkBoxList($model,$attribute,$data,$htmlOptions=array())-->
                <td align="right"><label for="User_user_hobby">爱好</label></td>

                <td>
                    <span id="User_user_hobby">
                    <input id="User_user_hobby_0" value="1" type="checkbox" name="user_hobby[]" /> 
                    <label for="User_user_hobby_0">篮球</label> 
                    <input id="User_user_hobby_1" value="2" type="checkbox" name="user_hobby[]" /> 
                    <label for="User_user_hobby_1">足球</label> 
                    <input id="User_user_hobby_2" value="3" type="checkbox" name="user_hobby[]" /> 
                    <label for="User_user_hobby_2">排球</label> 
                    <input id="User_user_hobby_3" value="4" type="checkbox" name="user_hobby[]" /> 
                    <label for="User_user_hobby_3">棒球</label>
                    </span>
                    <span style="color:red;">{$errorInfo.user_hobby}</span>
                </td>
            </tr>
            <tr>

                <!--textArea($model,$attribute,$htmlOptions=array())-->
                <td align="right"><label for="User_user_introduce">简介</label></td>
                <td>
                    <textarea cols="50" rows="5" name="user_introduce" id="User_user_introduce"></textarea>                      
                </td>
            </tr>
            <tr>
                <td> </td>

                <td align="left">
                    <input value="" class="us_Submit_reg" type="submit" />
                </td>
            </tr>
            <tr>
                <td colspan="2"> </td>
            </tr>
        </tbody>
    </table>

</form>        
                    </div>
                </div>
            </div>
            <!--放入view具体内容-->

        </div>

        <div class="blank"></div>
        <div class="block">
            <a href="#" target="_blank" title="YONGDA商城"><img alt="YONGDA商城" src="{$smarty.const.IMG_URL}di.jpg"></a>
            <div class="blank"></div>
        </div>

        <div class="block">
            <div class="box">
                <div class="helpTitBg" style="clear: both;">
                    <dl>
                        <dt><a href="#" title="新手上路 ">新手上路 </a></dt>
                        <dd><a href="#" title="售后流程">售后流程</a></dd>
                        <dd><a href="#" title="购物流程">购物流程</a></dd>

                        <dd><a href="#" title="订购方式">订购方式</a></dd>
                    </dl>
                    <dl>
                        <dt><a href="#" title="手机常识 ">手机常识 </a></dt>
                        <dd><a href="#" title="如何分辨原装电池">如何分辨原装电池</a></dd>
                        <dd><a href="#" title="如何分辨水货手机 ">如何分辨水货手机</a></dd>
                        <dd><a href="#" title="如何享受全国联保">如何享受全国联保</a></dd>

                    </dl>
                    <dl>
                        <dt><a href="#" title="配送与支付 ">配送与支付 </a></dt>
                        <dd><a href="#" title="货到付款区域">货到付款区域</a></dd>
                        <dd><a href="#" title="配送支付智能查询 ">配送支付智能查询</a></dd>
                        <dd><a href="#" title="支付方式说明">支付方式说明</a></dd>
                    </dl>

                    <dl>
                        <dt><a href="#" title="会员中心">会员中心</a></dt>
                        <dd><a href="#" title="资金管理">资金管理</a></dd>
                        <dd><a href="#" title="我的收藏">我的收藏</a></dd>
                        <dd><a href="#" title="我的订单">我的订单</a></dd>
                    </dl>
                    <dl>

                        <dt><a href="#" title="服务保证 ">服务保证 </a></dt>
                        <dd><a href="#" title="退换货原则">退换货原则</a></dd>
                        <dd><a href="#" title="售后服务保证 ">售后服务保证</a></dd>
                        <dd><a href="#" title="产品质量保证 ">产品质量保证</a></dd>
                    </dl>
                    <dl>
                        <dt><a href="#" title="联系我们 ">联系我们 </a></dt>

                        <dd><a href="#" title="网站故障报告">网站故障报告</a></dd>
                        <dd><a href="#" title="选机咨询 ">选机咨询</a></dd>
                        <dd><a href="#" title="投诉与建议 ">投诉与建议</a></dd>
                    </dl>
                </div>
            </div>


        </div>
        <div class="blank"></div>
        <div id="bottomNav" class="box block">
            <div class="box_1">
                <div class="links clearfix"> 
                    <a href="#" target="_blank" title="YONGDA商城"><img src="{$smarty.const.IMG_URL}ecmoban_link.jpg" alt="YONGDA商城" border="0"></a>

                    <a href="#" target="_blank" title="YONGDA 网上商店管理系统">
                        <img src="{$smarty.const.IMG_URL}yongda_logo.gif" alt="YONGDA 网上商店管理系统" border="0" />
                    </a>


                    [<a href="#" target="_blank" title="免费申请网店">免费申请网店</a>]
                    [<a href="#" target="_blank" title="免费开独立网店">免费开独立网店</a>]


                    [<a href="#" target="_blank" title="免费开独立网店">yongda商城</a>]
                </div>
            </div>
        </div>
        <div class="blank"></div>

        <div id="bottomNav" class="box block">
            <div class="bNavList clearfix">
                <a href="#">免责条款</a>
                |
                <a href="#">隐私保护</a>
                |
                <a href="#">咨询热点</a>
                |
                <a href="#">联系我们</a>

                |
                <a href="#">Powered by <strong><span style="color: rgb(51, 102, 255);">YongDa</span></strong></a>
                |
                <a href="#">批发方案</a>
                |
                <a href="#">配送方式</a>

            </div>

        </div>

        <div id="footer">
            <div class="text">
                © 2005-2012 YONGDA 版权所有,并保留所有权利。<br />
            </div>
        </div>

    </body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值