首页 > PHP开发 > 分享Ajax 提交表单数据到入库的全盘操作流程

分享Ajax 提交表单数据到入库的全盘操作流程

*******php项目中当我们要对数据库进行写入操作时,有时会因为代码没有做防sql注入工作,导致各种不可预知的错误*******

 

1,index.htm 这是一个很简单的注册页面l  我这是以ajax形式提交数据

[php] view plaincopy

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>RegisterForm</title>
  6. <script type="text/javascript" src='jquery-1.3.1.js'></script>
  7. </head>
  8. <body>
  9. <h1>This is a test form! </h1>
  10. <font color="#8b0000"><table class='tb' border="0" cellpadding="5" cellspacing=0>
  11. <form action='_process.php' method='post' enctype='multipart/form-data'>
  12. <tr><td class="tdleft"><em>user  :</em></td><td><input type='text' id='name' name='name' value='' size=15/></td></tr>
  13. <tr><td class="tdleft"><em>ages  : </em></td><td><input type='text' id='ages' name='ages' value='' size=15/></td></tr>
  14. <tr><td class="tdleft"><em>pass  : </em></td><td><input type='password' id='password' name='password' value='' size=15/></td></tr>
  15. <tr><td class="tdleft"><em>addr  : </em></td><td><input type='text' id='addr' name='addr' value='' size=15/></td></tr>
  16. <tr><td class="tdleft"><em>email : </em></td><td><input type='text' name='email' id='email' value='' size=15/></td></tr>
  17. <tr><td class="tdleft"><input type='button' value='register' id="but"/></td><td><input type='reset' value='reseting'/></td></tr>
  18. </form>
  19. </table></font>
  20. <span id='msg' style='display:none'>正在加载... ...</span>
  21. <p id="result" class=""></p>
  22. <style type="text/css">
  23.     body{text-align:center;}
  24.         .error{color:red;}
  25.     .tb{margin:0 auto;width:350px;height:200px;text-align:center;}
  26.     .tdleft{width:150px;text-align:left;}
  27. </style>
  28. <script type='text/javascript'>
  29.         $("#but").click(function(){
  30.                 var name = $.trim($("#name").val());
  31.         var ages = $.trim($("#ages").val());
  32.                 var pn = /^\d+$/;
  33.                 var addr = $.trim($("#addr").val());
  34.                 var pass = $.trim($("#password").val());
  35.                 var email = $.trim($("#email").val());
  36.                 var reg = /^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z]+)+$/gi;
  37.                 if(name.length==0){
  38.                     alert("请认真填写姓名!");return false;
  39.                 }
  40.                 if(ages.length==0){
  41.                     alert("请填写年龄!");return false;
  42.                 }
  43.         if(!pn.test(ages)){
  44.                     alert("请填写有效数字!");return false;
  45.                 }
  46.                 if(pass.length==0||pass.length>6){
  47.                     alert("请认真填写密码!");return false;
  48.                 }
  49.                 if(addr.length==0){
  50.                     alert("请认真填写地址!");return false;
  51.                 }
  52.         if(email.length==0){
  53.                     alert("请认真填写邮件!");return false;
  54.                 }
  55.         if(!reg.test(email)){
  56.                     alert("电子邮件检测失败");return false;
  57.                 }
  58.         var send = {'name':name,'ages':ages,'pass':pass,'addr':addr,'email':email};
  59.                 $.post('_process.php',send,function(data){
  60.                         if(data.res==-1){
  61.                             $("#result").addClass("error");
  62.                         }
  63.                         $("#result").html(data.msg);
  64.                         //$("form")[0].reset();
  65.                 },'json');
  66.         })
  67.     $("#msg").ajaxStart(function(){
  68.                $(this).fadeIn();
  69.            }).ajaxStop(function(){
  70.                $(this).fadeOut();
  71.         })
  72. </script>
  73. </body>
  74. </html>

2,_process.php接收ajax提交数据 并做相关处理的文件

[php] view plaincopy

  1. <?php
  2. header('Content-Type:text/html;charset=utf-8');
  3. sleep(1);
  4. $conn = mysqli_connect("localhost","root","root","register") or die("Unable to connect!".mysqli_connect_error());
  5. mysqli_query($link,"set names utf8");
  6. $name = isset($_POST['name'])?mysqlQuotes(trim($_POST['name'])):'';
  7. $ages = isset($_POST['ages'])?intval(trim($_POST['ages'])):'';
  8. $pass = isset($_POST['pass'])?mysqlQuotes(trim($_POST['pass'])):'';
  9. $addr = isset($_POST['addr'])?mysqlQuotes(trim($_POST['addr'])):'';
  10. $email = isset($_POST['email'])?mysqlQuotes(trim($_POST['email'])):'';
  11. if(empty($name)){
  12.     echo json_encode(array('res'=>-1,'msg'=>'请您认真输入姓名'));exit;
  13. }
  14. //查询username在 tb_register 表中是否存在,不存在则入库,存在则告知已注册
  15. $sql0 = "select count(1) as nums from tb_register where username='{$name}'";
  16. $row0 = select_one($conn,$sql0);
  17. if($row0['nums']>=1){
  18.     echo json_encode(array('res'=>-1,'msg'=>'对不起,该用户名已被注册!'));exit;
  19. }
  20. if(empty($ages)){
  21.      echo json_encode(array('res'=>-1,'msg'=>'请您认真输入年龄'));exit;
  22. }
  23. if(!preg_match("/^\d+$/",$ages)){
  24.      echo json_encode(array('res'=>-1,'msg'=>'请输入合法的数字'));exit;
  25. }
  26. if(empty($pass)){
  27.      echo json_encode(array('res'=>-1,'msg'=>'请您认真输入密码'));exit;
  28. }
  29. if(empty($addr)){
  30.      echo json_encode(array('res'=>-1,'msg'=>'请您认真输入地址'));exit;
  31. }
  32. if(empty($email)){
  33.      echo json_encode(array('res'=>-1,'msg'=>'请您认真输入邮箱'));exit;
  34. }
  35. if(!preg_match("/^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z]+)+$/",$email)){
  36.      echo json_encode(array('res'=>-1,'msg'=>'您的邮箱格式不正确'));exit;
  37. }
  38. $add_day = date("YmdHis");
  39. //以下是入库操作
  40. $sql = "insert into tb_register set username='{$name}',ages='{$ages}',password='{$pass}',address='{$addr}',email='{$email}',add_day='{$add_day}'";
  41. mysqli_query($conn,$sql);
  42. echo json_encode(array('res'=>1,'msg'=>'恭喜你,注册成功!'));exit;
  43. //预防mysql注入攻击函数  入库数据
  44. function mysqlQuotes($content){
  45.     if(!get_magic_quotes_gpc())         //先看看是否开启自动过滤机制  未开启则手动加函数过滤
  46.         {
  47.           $content = addslashes($content);
  48.         }
  49.         return stripslashes(htmlspecialchars($content));
  50. }
  51. function select_one($conn,$sql){
  52.     $res = mysqli_query($conn,$sql) or die("Failed".mysqli_error());
  53.         $result = array();
  54.         if(!empty($res)){
  55.            $result = mysqli_fetch_assoc($res);
  56.         }
  57.         mysqli_free_result($res);
  58.         return $result;
  59. }

******以上  自定义函数mysqlQuotes中**********
Tips1, (PS:T不错的PHP Q扣峮:276167802,验证:csl)
addslashes 函数的作用是给指定的字符加上反斜杠,主要有以下特殊字符
单引号(')   ,   双引号(")  , 反斜杠(\)  ,  NULL

Tips2,
htmlspecialchars   函数的作用是把一些特殊的字符转换为html实体 ,这些特定的字符有:
& (和号)          ==>       &
" (双引号)       ==>       "
' (单引号)        ==>       '
< (小于号)      ==>       <
> (大于号)      ==>       >

Tips3,
stripslashes  函数作用是删除 由addslashes ()函数添加的饭斜杠,恢复原来的摸样
如,$username 用户输入的是 Tom‘siy
存进数据库的是加反斜杠的   Tom\‘siy;

取出来之则可以用stripslashes() 将其还原输出 Tom‘siy

 

以上是本文关于Ajax 提交表单数据到入库的全盘操作流程,希望本文对广大php开发者有所帮助,感谢阅读本文。


本文固定链接: http://www.devba.com/index.php/archives/4150.html | 开发吧

报歉!评论已关闭.