tp架構表單驗證 及ajax

來源:互聯網
上載者:User

標籤:pwd   between   不為   微軟   public   doctype   thinkphp   erro   bsp   

 

之前的表單驗證都是用js寫的,這裡也可以使用tp架構的驗證。但是兩者比較而言還是js驗證比較好,因為tp架構驗證會運行後台代碼,這樣運行速度和效率就會下降。 

  自動驗證是ThinkPHP模型層提供的一種資料驗證方法,可以在使用create建立資料對象的時候自動進行資料驗證。驗證的代碼要寫在模型層即Model裡面。

  資料驗證有兩種方式:

  1. 靜態方式:在模型類裡面通過$_validate屬性定義驗證規則。靜態方式定義好以後其它地方都可以使用。
  2. 動態方式:使用模型類的validate方法動態建立自動驗證規則。動態方式比較靈活,哪裡使用就寫,其它地方不可以使用。

無論是什麼方式,驗證規則的定義是統一的規則,定義格式為:

<?php
namespace Home\Controller;
use Think\Controller;
class TestController extends Controller
{
public function add()
{
if(empty($_POST))

$this->show();
}
else

$y=new \Home\Model\YongHuuModel();

$r=$y->create();

if($r)
{
$y->add();
}
else{
die($y->getError());
}
}
}
}


2.在thinkphp\Application\Home\View\Test寫上對應的html檔案

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>
<style type="text/css">
*{ font-family:微軟雅黑; padding:0px; margin:0px auto}
</style>
<body>
<form action="__ACTION__" method="post">
<div>使用者名稱:<input type="text" name="uid" /></div>
<div>密碼:<input type="text" name="pwd" /></div>
<div>確認密碼:<input type="text" name="pwd1" /></div>
<div>姓名:<input type="text" name="name" /></div>
<div>郵箱:<input type="text" name="email" /></div>
<div>年齡:<input type="text" name="age" /></div>
<div><input type="submit" value="提交" /></div>
</form>
</div>


</body>
</html>

3.在thinkphp\Application\Home\Model裡面寫模型檔案,也就是驗證的方法。

<?php
namespace Home\Model;
use Think\Model;
class YongHuuModel extends Model
{
protected $tablePrefix = "";
protected $trueTableName = ‘yonghuu‘; //真實表名
//protected $patchValidate = true;
protected $_validate = array(
array(‘uid‘,‘require‘,‘使用者名稱不可為空!‘),
array(‘pwd‘,‘pwd1‘,‘兩次輸入的密碼不一致!‘,0,‘confirm‘), //兩個欄位是否相同
array(‘email‘,‘email‘,‘郵箱格式不正確‘),
array(‘name‘,‘/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/‘,‘社會安全號碼不正確!‘,0,‘regex‘),
array(‘age‘,‘18,50‘,‘年齡不在範圍內‘,0,‘between‘),
);
}


 

二、動態驗證

1.在Application\Home\Controller裡面寫方法

<?phpnamespace Home\Controller;use Think\Controller;class TestController extends Controller{    public function add()    {        if(empty($_POST))//如果post數組為空白        {            $this->show();//顯示add.html頁面        }        else//如果post數組不為空白        {            $y = D("YongHu");            $arr = array(//動態驗證就是需要在哪驗證就在哪裡寫驗證方法。                array("uid","require","使用者名稱不可為空",0),//講驗證的方法寫在方法裡面            );            if($y->validate($arr)->create())//這裡要先調用validate方法,然後將寫的驗證方法放到validate裡面            {                $y->add();            }            else            {                die($y->getError());            }        }    }}

2.在thinkphp\Application\Home\View\Test寫上對應的html檔案

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>無標題文檔</title><style type="text/css"></style></head><body>    <form action="__ACTION__" method="post">        <div>使用者名稱:<input type="text" name="uid" /></div>        <div>密碼:<input type="text" name="pwd" /></div>        <div>確認密碼:<input type="text" name="pwd1" /></div>        <div>姓名:<input type="text" name="name" /></div>        <div>郵箱:<input type="text" name="email" /></div>        <div>年齡:<input type="text" name="age" /></div>        <div><input type="submit" value="提交" /></div>    </form></body><script type="text/javascript"></script></html>

3.在thinkphp\Application\Home\Model裡面寫模型檔案。

<?phpnamespace Home\Model;use Think\Model;class YongHuModel extends Model{    protected $tablePrefix = "";//表示表格首碼為空白,就是沒有首碼。    protected $trueTableName = "yonghu";//如果不寫這句話,會自動去找Yong_Hu這張表,這是預設的表格的命名。這裡要寫上實際的表格的名字。}

 

三、Ajax做驗證

tp動態驗證和靜態驗證都有一個很大的缺點,那就是在提示錯誤資訊的時候都要跳轉到其它頁面顯示出錯誤資訊。如果需要在當前頁面顯示出錯誤資訊,就需要用ajax做驗證。

1.寫顯示和ajax處理方法

<?phpnamespace Home\Controller;use Think\Controller;class TestController extends Controller{        public function tianjia()//添加方法,用來顯示頁面    {        $this->show();    }            public function test()//ajax處理方法    {        $y = D("YongHu");        $arr = array(//動態驗證就是需要在哪驗證就在哪裡寫驗證方法。                array("uid","require","使用者名稱不可為空"),//講驗證的方法寫在方法裡面            );        if($y->validate($arr)->create())//這裡要先調用validate方法,然後將寫的驗證方法放到validate裡面            {                $this->ajaxReturn("通過驗證","eval");            }            else            {                $this->ajaxReturn($y->getError(),"eval");            }    }}

2.寫顯示頁面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script><title>無標題文檔</title><style type="text/css"></style></head><body>        <div>使用者名稱:<input id="uid" type="text" name="uid" /></div>                <div><input id="btn" type="button" value="驗證" /></div></body><script type="text/javascript">    $("#btn").click(function(){            var uid = $("#uid").val();                        $.ajax({                url:"__CONTROLLER__/test",                data:{uid:uid},                type:"POST",                dataType:"TEXT",                success: function(data){                        alert(data);                    }                                })        })</script></html>

tp架構表單驗證 及ajax

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.