重点只有一个:php如何获取ajax函数传来的data值

我想做的是:在html页面点击提交按钮,jQuery就用Ajax函数把表单post到php文件。实现用户注册。但php文件中获取Ajax函数的data参数失败了。但如果是这样,就可以插入到数据库:
$sql="INSERT INTO users (username, psw) VALUES('qiaoliting','123456')";
网上搜的是这样的,但有问题:
$sql="INSERT INTO users (username, psw) VALUES($_POST['username'],$_POST['psw'])";
表单:

<form method="post" action="localhost/db3.php">
<ul id="list">
<li>注册信息</li>
<li><label>用户名:</label><input type="text" id="username" name="username"/></li>
<li><label>密码:</label><input type="password" id="psw" name="psw"/></li>
<li><label>注册:</label><input type="button" id="submit" name="submit" value="注册"/></li>
</ul>
</form>
php文件:

<?php
$con = mysql_connect("localhost","test","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);

$sql="INSERT INTO users (username, psw) VALUES('qiaoliting','123456')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con)
?>
js:(有jQuery文件)
var ousername = $('#username').val();
var opsw = $('#psw').val();
var dataString = 'username='+ousername+'&psw='+opsw;
$('#submit').click(
function(){
$('#txtHint').html(oajax.responseText);
}
)
var oajax = $.ajax({
type:"POST",
url:'db3.php',
data:dataString,
success:function(msg){
}
})

$sql="INSERT INTO users (username, psw) VALUES($_POST['username'],$_POST['psw'])";

当然会发生PHP的解析错误。


在php里,把$_POST['username']这种东西放进双引号字符串里,如"hi, $_POST['name']",无法被识别。常见的是"hi, $name",这样可以。

要想实现把$_POST数组中的值插入SQL语句有多种方法。


1.PHP的字符串串接操作符即“点”号(注意:sql中字符串要加引号)

$sql = "INSERT INTO users (username, psw) VALUES('".$_POST['username']."','".$_POST['psw']."')";

2.

$sql = "INSERT INTO users (username, psw) VALUES('{$_POST['username']}','{$_POST['psw']}')";

3.prepared statement。较复杂但是安全。

4.字符串格式化函数sprintf

$sql = sprintf("INSERT INTO users (username, psw) VALUES('%s','%s')", $_POST['username'], $_POST['psw']);


提醒:直接向sql语句中插入$_POST数组中的这些值而不经过转义会让网页存在极严重的SQL注入漏洞!解决方法:传统方法是用mysql_real_escape_string,现代方法是用prepared statement。


不懂请追问,满意请采纳。



补充,你的前端似乎还有问题。dataString 里直接插入ousername和opsw可能有问题。可能应该先经过url转义。我记得jquery的ajax可以直接post一个json字典,这样应该更好。

追问

1、2、4方法:数据库里显示的都是undefined。

追答

我没仔细看代码,没想到前端post就有问题。至少应该在照搬代码之前学习一下js和jquery的基本知识。

把前端改成这样,后端还是照我说的,1、2、4方法我都已经测试成功。

<form method="post" action="localhost/db3.php"> 
<ul id="list">
<li>注册信息</li>
<li><label>用户名:</label><input type="text" id="username" name="username"/></li>
<li><label>密码:</label><input type="password" id="psw" name="psw"/></li>
<li><label>注册:</label><input type="button" id="submit" name="submit" value="注册"/></li>
</ul>
</form>
<script>
$('#submit').click(function(){
var oajax = $.ajax({
type: "POST",
url: 'db3.php',
data: {
username: $('#username').val(),
psw: $('#psw').val()
},
success: function(msg){}
})
$('#txtHint').html(oajax.responseText);
});
</script>

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网