Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse zu Problemen bei der Formularvalidierung des ThinkPhp-Frameworks und der Ajax-Validierung

Analyse zu Problemen bei der Formularvalidierung des ThinkPhp-Frameworks und der Ajax-Validierung

不言
不言Original
2018-06-08 15:03:521272Durchsuche

Dieser Artikel stellt hauptsächlich die Analyse der Probleme mit der ThinkPhp-Framework-Formularüberprüfung und der Ajax-Überprüfung vor. Jetzt kann ich ihn mit Ihnen teilen.

Es gibt zwei Arten der TP-Datenüberprüfung Es gibt zwei Methoden, eine ist die statische Methode und die andere ist eine dynamische Methode. Im Folgenden erfahren Sie, welche Probleme die ThinkPhp-Framework-Formularüberprüfung und die Ajax-Überprüfung haben. Interessierte sollten einen Blick darauf werfen

Die vorherige Formularüberprüfung ist in js geschrieben. Sie können hier auch die Überprüfung des TP-Frameworks verwenden. Im Vergleich der beiden ist die JS-Verifizierung jedoch besser, da bei der TP-Framework-Verifizierung Hintergrundcode ausgeführt wird, sodass die Ausführungsgeschwindigkeit und -effizienz abnimmt.

Die automatische Überprüfung ist eine von der ThinkPHP-Modellschicht bereitgestellte Datenüberprüfungsmethode, die automatisch eine Datenüberprüfung durchführen kann, wenn zum Erstellen eines Datenobjekts „create“ verwendet wird. Der Verifizierungscode muss in die Modellebene, also das Modell, geschrieben werden.

 Es gibt zwei Möglichkeiten, Daten zu überprüfen:

Statische Methode: Definieren Sie die Überprüfung über das Attribut $_validate im Modellklassenregel. Nachdem die statische Methode definiert wurde, kann sie an anderer Stelle verwendet werden.

Dynamische Methode: Verwenden Sie die Validate-Methode der Modellklasse, um automatische Validierungsregeln dynamisch zu erstellen. Die dynamische Methode ist flexibler. Sie kann überall dort geschrieben werden, wo sie verwendet wird, und kann nicht anderswo verwendet werden.

Egal welche Methode verwendet wird, die Definition der Verifizierungsregeln ist eine einheitliche Regel. Das Definitionsformat ist:

<?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. Schreiben die entsprechende HTML-Datei in thinkphpApplicationHomeViewTest

<!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">
<p>用户名:<input type="text" name="uid" /></p>
<p>密码:<input type="text" name="pwd" /></p>
<p>确认密码:<input type="text" name="pwd1" /></p>
<p>姓名:<input type="text" name="name" /></p>
<p>邮箱:<input type="text" name="email" /></p>
<p>年龄:<input type="text" name="age" /></p>
<p><input type="submit" value="提交" /></p>
</form>
</p>
</body>
</html>

3. Schreiben Sie die Modelldatei in thinkphpApplicationHomeModel, der Verifizierungsmethode.

<?php
namespace Home\Model;
use Think\Model;
class YongHuuModel extends Model
{
protected $tablePrefix = "";
protected $trueTableName = &#39;yonghuu&#39;; //真实表名
//protected $patchValidate = true;
protected $_validate = array(
array(&#39;uid&#39;,&#39;require&#39;,&#39;用户名不能为空!&#39;),
array(&#39;pwd&#39;,&#39;pwd1&#39;,&#39;两次输入的密码不一致!&#39;,0,&#39;confirm&#39;), //两个字段是否相同
array(&#39;email&#39;,&#39;email&#39;,&#39;邮箱格式不正确&#39;),
array(&#39;name&#39;,&#39;/^[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)$/&#39;,&#39;身份证号不正确!&#39;,0,&#39;regex&#39;),
array(&#39;age&#39;,&#39;18,50&#39;,&#39;年龄不在范围内&#39;,0,&#39;between&#39;),
);
}

2. Dynamische Überprüfung

1. Methoden in ApplicationHomeController schreiben

<?php
namespace 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. Schreiben Sie die entsprechende HTML-Datei in thinkphpApplicationHomeViewTest

<!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">
    <p>用户名:<input type="text" name="uid" /></p>
    <p>密码:<input type="text" name="pwd" /></p>
    <p>确认密码:<input type="text" name="pwd1" /></p>
    <p>姓名:<input type="text" name="name" /></p>
    <p>邮箱:<input type="text" name="email" /></p>
    <p>年龄:<input type="text" name="age" /></p>
    <p><input type="submit" value="提交" /></p>
  </form>
</body>
<script type="text/javascript">
</script>
</html>

3. Schreiben Sie das Modell in thinkphpApplicationHomeModel Dateien darin.

<?php
namespace Home\Model;
use Think\Model;
class YongHuModel extends Model
{
  protected $tablePrefix = "";//表示表格前缀为空,就是没有前缀。
  protected $trueTableName = "yonghu";//如果不写这句话,会自动去找Yong_Hu这张表,这是默认的表格的命名。这里要写上实际的表格的名字。
}

3. Ajax-Verifizierung

tp sowohl für die dynamische als auch für die statische Verifizierung Der Nachteil besteht darin, dass bei der Eingabe einer Fehlermeldung zu anderen Seiten gesprungen werden muss, um die Fehlermeldung anzuzeigen. Wenn Sie auf der aktuellen Seite eine Fehlermeldung anzeigen müssen, müssen Sie zur Überprüfung Ajax verwenden.

1. Anzeige- und Ajax-Verarbeitungsmethoden schreiben

<?php
namespace 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. Anzeigeseite schreiben

<!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>
    <p>用户名:<input id="uid" type="text" name="uid" /></p>
    <p><input id="btn" type="button" value="验证" /></p>
</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>

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

ThinkPHP3.2-Framework verwendet addAll(), um Daten in Stapeln einzufügen

Ajax-Übermittlung in thinkPHP5 Formularoperation

Code implementiert durch Kombination von thinkphp mit redis und queue

Das obige ist der detaillierte Inhalt vonAnalyse zu Problemen bei der Formularvalidierung des ThinkPhp-Frameworks und der Ajax-Validierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn