一,什么是数据验证
数据验证其实就是数据的合法性校验,例如:用户添加的邮件地址是不是正确啊,是不是太长了等等。
为什么要进行数据校验。
1,约束用户不要糊乱添写
2,我们想得到更真实的用户信息
3,人性化的验证,用户体验好,让别人觉得很专业
4,对自己系统的保护
我把验证分成二部分,第一部分,前端验证;第二部分,后端验证。
二,前,后端验证
前端验证,是为了区别后端验证而这样说的,主要是用js,jquery来验证数据的合法性,来增强用户体验的,比如,鼠标移上去会有提示效果,鼠标离开,就会马上告诉你数据是否合法等等。
有人会问,前端校验已经完全可以校验数据的合法性了,为什么还要后端校验呢?不是多此一举吗?
没有前端验证可以,顶多让用户觉得这个网站不是很好用,但是没有后端验证,数据就会有问题了。举个例子:
1,你在blog.51yip.com/regist.php注册页面添完数据后,跳转到 blog.51yip.com/registok.php,如果走这个流程,regist.php做了前端验证,就可以不用做后端验证了。
2,我在本地也建了一个localhost/regist.php,添加完数据不进行验证,直接跳转到blog.51yip.com/registok.php,如果这样的话,我就避开了blog.51yip.com/regist.php这个前端验证,如果registok.php不做后端验证的话,数据安全就会有隐患
三,应用举例
实例地址:http://blog.51yip.com/demo/test.php
例子中前端验证用的是JQUERY,加强用户体验,后端验证用的是CodeIgniter的一个表单验证类FormValidation,二者的思想是一样的,我想CodeIgniter的开发者就是根据jquery的思想来写FormValidation这个类的。
例子有一个明显的问题,是前端验证通过了,后端验证没有难过,这是我故意让大家看出效果才这样做的,如果后端验证和前端验证的规则一样的话,你就看不出有没有后端验证了
下面的是test.php的代码,有点长,但是很简单:
<?php require_once 'reg_files/FormValidation.php'; class checkdata{ private $validation = null; public $errormes = null; //页面入口程序 public function indexAction(){ if(!$this->check_form()){ // 如果数据验证没通过 $this->errormes = $this->validation->get_errordata(); } } /** * 验证表单提交数据有效性 * * @return unknown */ private function check_form(){ $this->validation = new FormValidation(); $this->validation->set_rules('Email', '邮箱', 'trim|required|valid_email|max_length[1]'); $this->validation->set_rules('RegionId', '区域', 'trim|required|valid_area|max_length[1]'); $this->validation->set_rules('Name', '姓名', 'trim|required|max_length[12]'); $this->validation->set_rules('engName', '英文名字', 'trim|required|max_length[13]'); $this->validation->set_rules('phone', '电话', 'trim|required|numeric|max_length[11]'); $this->validation->set_rules('postCode', '邮编','trim|numeric|required'); return $this->validation->run(); } } $test = new checkdata(); $test->indexAction(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="ltr" xml:lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml" lang="utf-8"><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>注册</title> <script type="text/javascript" src="reg_files/jquerymin.js"></script> <script type="text/javascript" src="reg_files/jquery.validate.js"></script> <script type="text/javascript" src="reg_files/regist.js"></script> <style> #field, label {font-family: Arial, Helvetica, sans-serif; font-size: small; } input.submit { float: none; } input.error,select.error { border: 1px solid red; width: auto; } label.error { background: url('./reg_files/unchecked.gif') no-repeat; padding-left: 16px; margin-left: .3em; } label.valid { background: url('./reg_files/checked.gif') no-repeat; width: 16px; height: 16px; } </style> </head> <body> <br><br> 访问<a href="http://blog.51yip.com">海底苍鹰博客</a> <br><br> <?php if(!empty($test->errormes)){ foreach($test->errormes as $k=>$v){ echo "<p><font color='red'>$v</font></p>"; } }?> <br><br> <form id="regist_form" method='post' name='regist_form' action='test.php'> <div> 名字: <input name="Name" id="Name" tabindex="6005" type="text" value="<?php echo empty($_POST['Name']) ? "请输入中文名字" : $_POST['Name'];?>" notice="请输入中文名字" > <label generated="true" for="Name" style="display: none;"></label> </div> <div></div> <div> 英文名字:<input name="engName" id="engName" tabindex="6005" type="text" value="<?php echo empty($_POST['engName']) ? "请输入英文名字" : $_POST['engName']; ?>" notice="请输入英文名字"> <label generated="true" for="engName" style="display: none;"></label> </div> <div></div> <div> 区域选择: <select name="RegionId" id="RegionId" tabindex="6006"> <option value="0" selected="selected">行政区选择</option> <option value="12">浦东新区</option> <option value="42">松江区</option> <option value="41">金山区</option> <option value="40">崇明区</option> <option value="39">青浦区</option> <option value="37">静安区</option> <option value="36">徐汇区</option> <option value="35">长宁区</option> <option value="34">虹口区</option> <option value="33">闸北区</option> <option value="32">宝山区</option> <option value="31">嘉定区</option> <option value="30">闵行区</option> <option value="29">普陀区</option> <option value="28">卢湾区</option> <option value="27">黄浦区</option> <option value="26">杨浦区</option> <option value="43">奉贤区</option> </select> <label id="citySelect" for="citySelect" style="display: none;padding-left: 15px;"></label> </div> <div></div> <div> 邮政编码: <input name="postCode" id="postCode" tabindex="6005" type="text" value="<?php echo empty($_POST['postCode']) ? "请输入邮编" : $_POST['postCode']; ?>" notice="请输入邮编"> <label generated="true" for="postCode" style="display: none;"></label> </div> <div></div> <div> Email: <input name="Email" id="Email" tabindex="6005" type="text" value="<?php echo empty($_POST['Email']) ? "请输入Email" : $_POST['Email']; ?>" notice="请输入Email"> <label generated="true" for="Email" style="display: none;"></label> </div> <div></div> <div> 电话: <input name="phone" id="phone" tabindex="6005" type="text" value="<?php echo empty($_POST['phone']) ? "请输入电话" : $_POST['phone']; ?>" notice="请输入电话"> <label generated="true" for="phone" style="display: none;"></label> </div> <div></div> <input name="submit" type="submit" value='submit'> </form> </body> <html> <script type="text/javascript"> $(document).ready(function(){ new regist().init(); }); </script>
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/php/890.html