有一个ajax代码,它在页面上显示错误和成功但是当我点击提交按钮时实际上并没有更新数据库。
表单有一个选择下拉列表,并从数据库中填充选项。我知道PHP代码有效,因为没有ajax,表格会更新,所以我必须在ajax中遗漏一些东西但却无法找到?
带脚本的form.php
<form id="test" name="test" method="POST" action="test.php">
<select id="updateid" name="updateid">
<option value="">- Please Select -</option>
<?php
$sql = "SELECT updateid, name FROM test";
$res = $con->query($sql);
while($row = mysqli_fetch_array($res)){
echo "<option value=".$row['updateid'].">".$row['name']."</option>";
}
?>
</select>
<input type="submit" value="Submit" name="submit" id="submitbut" />
</form>
$(document).ready(function(){
$('#submitbut').click(function(e){
var updateid = $("#updateid").val();
if(updateid.length == 0){
$("#success").text("make a selection.");
$("updateid").focus();
}
else{
var dataString = 'updateid='+ updateid
$.ajax({
type:'POST',
url:'test.php',
data: {updateid:dataString}
}).done(function(){
$('#success').text('success!');
});
}
e.preventDefault();
});
});
test.php的
<?php
if(isset($_POST['submit'])) {
$updateid= $_POST['updateid'];
$sql = "UPDATE `test` SET `test`='abcdegfhi' WHERE `updateid` = '$updateid'";
if (mysqli_query($con, $sql)) {
echo "ok";
} else {
echo "nope";
}
}
?>
答案 0 :(得分:4)
var dataString = 'updateid='+ updateid
^^^^^^^^^^^
data: {updateid:dataString}
^^^^^^^^^
您的PHP脚本将收到:
updateid=updateid=42
^--- $_POST key
^^^^^^^^^^^ $_POST value
然后您盲目地插入到您的查询中(享受您的服务器通过您的sql injection attack漏洞获取完全pwn3d):
$sql = "[..snip..]WHERE `updateid` = 'updateid=42'"
^^^^^^^^^^^^^
答案 1 :(得分:0)
$ _ POST [&#39;提交&#39;]未设置。 所有$ _POST数据都来自ajax请求 - 而不是html post请求(你使用了&#34; e.preventDefault()&#34;)。
您可以按如下方式设置数据:
{updateid:dataString,submit:true}