Home > Backend Development > PHP Tutorial > Thinkphp+AJAX dynamically verifies whether user input is legal_PHP tutorial

Thinkphp+AJAX dynamically verifies whether user input is legal_PHP tutorial

WBOY
Release: 2016-07-13 10:11:19
Original
869 people have browsed it

Thinkphp+AJAX dynamically verifies whether user input is legal

When encountering user registration and other situations, if you wait for the user to enter all the information, click the registration button to submit, and then verify whether the input is correct, the experience will be very bad, it will waste the user's time and increase the registration cost. Here is an example , demonstrates how to use ajax for single-step verification, using thinkphp 3.2 framework, environment WAMPServer 2.4, version PHP 5.4.16+ Apache 2.4.4+ MySql 5.6.12

1. Database design:

Database name thinkphp

Table name tp_user where tp_ is the table prefix, which can be defined in config.php. When operating the table, just use user

CREATE TABLE IF NOT EXISTS `tp_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Copy after login

2. Page design

3. HTML part

view/Index/index.html

Copy after login

4. thinkphp automatic verification

protected $_validate=array(
		array('username','require','用户名不能为空!'),
		array('username','','用户名已经存在',0,'unique',1), 
		array('username','/^[a-zA-Z][a-zA-Z0-9_]{1,19}$/','用户名不合法!'),	
			
		array('email','require','邮箱不能为空!'),
		array('email','email','邮箱格式不正确!'),
		array('email','','该邮箱已经注册过!',0,'unique',1),
	);
	
	protected $_auto = array( 
		array('password', 'md5', 1, 'function'), // 对password字段在新增的时候使md5函数处理
	);
Copy after login

5. Use ajax

After the user enters the username, the blur event will be triggered when the input box loses focus. You can verify whether the username input is correct at this time

jQuery.post( url, [data], [callback], [type] ): Use POST method to make asynchronous requests

Parameters:

url (String): URL address to send the request.

data (Map): (optional) The data to be sent to the server, expressed in the form of key-value pairs of Keyalue.

callback (Function): (optional) Callback function when loading is successful (this method is called only when the return status of Response is success).

type (String): (optional) The official description is: Type of data to be sent. In fact, it should be the type requested by the client (JSON, XML, etc.)

$('#username').blur(
			function() {
				var username = $(this).val();
				$.post(index.php/Home/Index/checkName, {
					'username' : username//前一个username需要跟UserModel对应,即跟数据库字段对应
				}, function(data) {
					if (data == 0) {
						error['username'] = 0;
						$('#tooltip1').attr('class',
								'tooltip-info visible-inline success');
					} else {
						error['username'] = 1;
						$('#tooltip1').attr('class',
								'tooltip-info visible-inline error');
						$('#mess1').html(data);
					}
				})
				return false;
			});
Copy after login

Password, repeat password, email verification are similar

You need to pay attention when verifying the email. If the user clicks the registration button immediately after entering the email, the click event of the registration button and the blur event of the email input box will be executed at the same time. Since the email verification is $.post, it is asynchronous. The post has not been executed yet, error['email']=1 in the click event, $('#submit1').submit(); will not be executed, so at this time, set a flag error['submit'] = 0;0 Indicates that the registration button has been clicked. The default is 1. In the email blur callback function, it is judged whether error['submit'] is equal to 0, that is, whether it has been clicked. If it has been clicked, the form is submitted. If not, only the email needs to be verified.

After the user enters the email address and clicks the mouse elsewhere on the screen, only blur will be executed, the same as the username and password.

6. Server processing

public function checkName() {
		$user = D ( 'user' );
		if (! $user->create ()) {
			exit ( $user->getError () );
		} else {
			echo 0;//这是回传给$.post的数据,对应上面的data
		}
	}
Copy after login

The above is the method of single-step verification of user name. Let’s see how to submit all data to the server

7. Submit all data to the server

Through the above html code, I noticed that a form is used here, the form is submitted in post mode, and the action points to the address that the server can handle
When clicking the registration button, first determine whether all inputs are correct. If correct, submit the form

$('#submit1').click(function() {
		if ($('#username').val() == '') {
			$('#tooltip1').attr('class', 'tooltip-info visible-inline error');
			$('#mess1').html(用户名不能为空!);
		}
		if ($('#password').val() == '') {
			$('#tooltip2').attr('class', 'tooltip-info visible-inline error');
			$('#mess2').html(密码不能为空!);
		}
		if ($('#repassword').val() == '') {
			$('#tooltip22').attr('class', 'tooltip-info visible-inline error');
			$('#mess22').html(确认密码不能为空!);
		}
		if ($('#email').val() == '') {
			$('#tooltip3').attr('class', 'tooltip-info visible-inline error');
			$('#mess3').html(邮箱不能为空!);
		}
		if (error['username'] == 1) {
			var scroll_offset = $(#tooltip1).offset(); // 如果用户名验证失败,屏幕会滚动到用户名的位置,让用户重新输入
			$(body,html).animate({
				scrollTop : scroll_offset.top
			// 让body的scrollTop等于pos的top,就实现了滚动
			}, 0);
			return false;
		} else if (error['password'] == 1) {

			return false;
		} else if (error['email'] == 1) {
			error['submit'] = 0;
			return true;
		} else {			
			$('#submit1').submit();
			return true;
		}
	});
Copy after login

The server-side register method receives all data. If successful, it will jump to the Home/index page. If it fails, it will jump to the error page.

public function register() {
		$user = D ( 'user' );
		if (! $user->create ()) {
			dump ( $user->getError () );
		}
		$uid = $user->add ();
		
		if ($uid) {
			$_SESSION ['username'] = $_POST ['username'];
			$this->redirect ( 'Home/index' );
		} else {
			$this->error ( 注册失败! );
		}
	}
Copy after login

8. config.php configuration

<!--?php
return array(
	 /* 数据库配置 */
    &#39;DB_TYPE&#39;   =--> &#39;mysql&#39;, // 数据库类型
    &#39;DB_HOST&#39;   => &#39;127.0.0.1&#39;, // 服务器地址
    &#39;DB_NAME&#39;   => &#39;thinkphp&#39;, // 数据库名
    &#39;DB_USER&#39;   => &#39;root&#39;, // 用户名
    &#39;DB_PWD&#39;    => &#39;123&#39;,  // 密码
    &#39;DB_PORT&#39;   => &#39;3306&#39;, // 端口
    &#39;DB_PREFIX&#39; => &#39;tp_&#39;, // 数据库表前缀
);
Copy after login

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/929774.htmlTechArticleThinkphp+AJAX dynamically verifies whether the user input is legal. When encountering user registration and other situations, if you wait for the user to enter all information, After clicking the registration button to submit, verify that the input is correct, body...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template