zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

流程AJAX数据 操作 分享 提交 表单 入库
2023-06-13 09:15:15 时间
*******php项目中当我们要对数据库进行写入操作时,有时会因为代码没有做防sql注入工作,导致各种不可预知的错误*******

1,index.htm这是一个很简单的注册页面l我这是以ajax形式提交数据
复制代码代码如下:

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>RegisterForm</title>
<scripttype="text/javascript"src="jquery-1.3.1.js"></script>
</head>
<body>
<h1>Thisisatestform!</h1>
<fontcolor="#8b0000"><tableclass="tb"border="0"cellpadding="5"cellspacing=0>
<formaction="_process.php"method="post"enctype="multipart/form-data">
<tr><tdclass="tdleft"><em>user:</em></td><td><inputtype="text"id="name"name="name"value=""size=15/></td></tr>
<tr><tdclass="tdleft"><em>ages:</em></td><td><inputtype="text"id="ages"name="ages"value=""size=15/></td></tr>
<tr><tdclass="tdleft"><em>pass:</em></td><td><inputtype="password"id="password"name="password"value=""size=15/></td></tr>
<tr><tdclass="tdleft"><em>addr:</em></td><td><inputtype="text"id="addr"name="addr"value=""size=15/></td></tr>
<tr><tdclass="tdleft"><em>email:</em></td><td><inputtype="text"name="email"id="email"value=""size=15/></td></tr>
<tr><tdclass="tdleft"><inputtype="button"value="register"id="but"/></td><td><inputtype="reset"value="reseting"/></td></tr>
</form>
</table></font>
<spanid="msg"style="display:none">正在加载......</span>
<pid="result"class=""></p>
<styletype="text/css">
body{text-align:center;}
.error{color:red;}
.tb{margin:0auto;width:350px;height:200px;text-align:center;}
.tdleft{width:150px;text-align:left;}
</style>
<scripttype="text/javascript">
$("#but").click(function(){
varname=$.trim($("#name").val());
varages=$.trim($("#ages").val());
varpn=/^\d+$/;
varaddr=$.trim($("#addr").val());
varpass=$.trim($("#password").val());
varemail=$.trim($("#email").val());
varreg=/^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z]+)+$/gi;
if(name.length==0){
alert("请认真填写姓名!");returnfalse;
}
if(ages.length==0){
alert("请填写年龄!");returnfalse;
}
if(!pn.test(ages)){
alert("请填写有效数字!");returnfalse;
}
if(pass.length==0||pass.length>6){
alert("请认真填写密码!");returnfalse;
}
if(addr.length==0){
alert("请认真填写地址!");returnfalse;
}
if(email.length==0){
alert("请认真填写邮件!");returnfalse;
}
if(!reg.test(email)){
alert("电子邮件检测失败");returnfalse;
}
varsend={"name":name,"ages":ages,"pass":pass,"addr":addr,"email":email};
$.post("_process.php",send,function(data){
if(data.res==-1){
$("#result").addClass("error");
}
$("#result").html(data.msg);
//$("form")[0].reset();
},"json");
})
$("#msg").ajaxStart(function(){
$(this).fadeIn();
}).ajaxStop(function(){
$(this).fadeOut();
})
</script>
</body>
</html>

2,_process.php接收ajax提交数据并做相关处理的文件
复制代码代码如下:

<?php
header("Content-Type:text/html;charset=utf-8");
sleep(1);
$conn=mysqli_connect("localhost","root","root","register")ordie("Unabletoconnect!".mysqli_connect_error());
mysqli_query($link,"setnamesutf8");

$name=isset($_POST["name"])?mysqlQuotes(trim($_POST["name"])):"";
$ages=isset($_POST["ages"])?intval(trim($_POST["ages"])):"";
$pass=isset($_POST["pass"])?mysqlQuotes(trim($_POST["pass"])):"";
$addr=isset($_POST["addr"])?mysqlQuotes(trim($_POST["addr"])):"";
$email=isset($_POST["email"])?mysqlQuotes(trim($_POST["email"])):"";
if(empty($name)){
echojson_encode(array("res"=>-1,"msg"=>"请您认真输入姓名"));exit;
}
//查询username在tb_register表中是否存在,不存在则入库,存在则告知已注册
$sql0="selectcount(1)asnumsfromtb_registerwhereusername="{$name}"";
$row0=select_one($conn,$sql0);
if($row0["nums"]>=1){
echojson_encode(array("res"=>-1,"msg"=>"对不起,该用户名已被注册!"));exit;
}
if(empty($ages)){
echojson_encode(array("res"=>-1,"msg"=>"请您认真输入年龄"));exit;
}
if(!preg_match("/^\d+$/",$ages)){
echojson_encode(array("res"=>-1,"msg"=>"请输入合法的数字"));exit;
}
if(empty($pass)){
echojson_encode(array("res"=>-1,"msg"=>"请您认真输入密码"));exit;
}
if(empty($addr)){
echojson_encode(array("res"=>-1,"msg"=>"请您认真输入地址"));exit;
}
if(empty($email)){
echojson_encode(array("res"=>-1,"msg"=>"请您认真输入邮箱"));exit;
}
if(!preg_match("/^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z]+)+$/",$email)){
echojson_encode(array("res"=>-1,"msg"=>"您的邮箱格式不正确"));exit;
}
$add_day=date("YmdHis");

//以下是入库操作
$sql="insertintotb_registersetusername="{$name}",ages="{$ages}",password="{$pass}",address="{$addr}",email="{$email}",add_day="{$add_day}"";
mysqli_query($conn,$sql);
echojson_encode(array("res"=>1,"msg"=>"恭喜你,注册成功!"));exit;


//预防mysql注入攻击函数入库数据
functionmysqlQuotes($content){
if(!get_magic_quotes_gpc())//先看看是否开启自动过滤机制未开启则手动加函数过滤
{
$content=addslashes($content);
}
returnstripslashes(htmlspecialchars($content));
}


functionselect_one($conn,$sql){
$res=mysqli_query($conn,$sql)ordie("Failed".mysqli_error());
$result=array();
if(!empty($res)){
$result=mysqli_fetch_assoc($res);
}
mysqli_free_result($res);
return$result;
}

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


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

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

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

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