2015-02-10 116 views
0

有一个ajax代码,它显示页面上的错误和成功,但实际上并没有更新数据库,当我点击提交按钮。ajax代码没有在MySQL数据库中更新

表单有一个选择下拉列表,选项从数据库填充。我知道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"; 
    } 
} 
?> 

回答

4
var dataString = 'updateid='+ updateid 
        ^^^^^^^^^^^ 

     data: {updateid:dataString} 
       ^^^^^^^^^ 

你的PHP脚本将收到:

updateid=updateid=42 
    ^--- $_POST key 
      ^^^^^^^^^^^ $_POST value 

你再盲目地插入您的查询(尽情享受您的服务器pwn3d通过您的sql injection attack漏洞):

$sql = "[..snip..]WHERE `updateid` = 'updateid=42'" 
            ^^^^^^^^^^^^^ 
+0

现在的问题不是关于SQL注入虽然是

如下您可以设置数据?谢谢,但没有回答我的问题。但是,关于这个话题,当你在这里。那么我将如何改进呢?请问这个查询是'$ stmt = $ db-> prepare('update test set test =?where updateid =?'); $ stmt-> bind_param('abcdefghi',$ test,$ updateid); $ stmt-> execute();' – abcdefghijklmnop 2015-02-10 15:28:31

+0

确切地说,这是不是回答你的问题?我已经明确指出它为什么会失败 - 您将不良数据传递到where子句中,导致查询无法匹配。 – 2015-02-10 15:54:35

0

$ _POST ['submit']未设置。 所有$ _POST数据来自ajax请求 - 而不是html post请求(您已经使用了“e.preventDefault()”)。

{updateid:dataString,提交:真正}

+0

对不起,这没有起作用,点击提交时仍未更新。 – abcdefghijklmnop 2015-02-10 15:16:46