2012-04-25 93 views
2

我试图用AJAX和PHP更新我的数据库。我确定一切都是正确的,只有我的页面刷新了,没有插入到我的表格中。用AJAX插入记录不插入和刷新页面

HTML

<form id="salary-upd"> 
     <input type="text" class="defaultText" id="monthly-income" name="monthly-income" title="What is your salary?"> 
     <input type="submit" class="salary-upd-submit"> 
</form> 
<div></div> 

AJAX

// UPDATE INCOME 
    $(".salary-upd-submit").click(function() { 
      var elem = $(this); 
      $.post("update_salary.php", elem.parent("#salary-upd").serialize(), function(data) { 
       elem.next("div").html(data); 
      }); 
    }); 

PHP

$uid = $_SESSION['oauth_id']; 
    $monthly_income = $_POST['monthly-income']; 


#update Record 
     $query = mysql_query("SET `income` (user_id, monthly_income) VALUES ($uid, '$monthly_income')") or die(mysql_error()); 

尝试更新我的PHP,因为我认为这可能是...

$query = mysql_query("UPDATE `income` SET (user_id, monthly_income) VALUES ($uid, '$monthly_income')") or die(mysql_error()); 
+3

此壶乞求SQL注入。消除你的输入! – Quassnoi 2012-04-25 20:07:28

+4

**不要将原始用户输入传递给SQL。**使用'mysqli_'或'PDO'而不是'mysql_'函数,这些函数已被弃用。 – DCoder 2012-04-25 20:07:46

+0

@DCoder我会欢迎'mysql_'被弃用,但据我所知,他们不是:-( – jeroen 2012-04-25 20:14:10

回答

1

我认为其他人会解决您的JS方面的问题,而是要传递到MySQL查询您的脚本将无法解析。

尝试使用这样的:

$sanitized_monthly_income = mysql_real_escape_string($_POST['monthly-income']); 
mysql_query("INSERT INTO income (user_id, monthly_income) VALUES ('$uid', '$sanitized_monthly_income') ON DUPLICATE KEY UPDATE monthly_income = VALUES(monthly_income)"); 
+0

仍然没有运气@Quassnoi – Liam 2012-04-25 20:13:28

+0

@李安:这是非常具有描述性的。 – Quassnoi 2012-04-25 20:14:17

+0

对不起,该页面犯规显示任何东西,插进我的数据库没有任何事情都不是,生病尝试放错误 – Liam 2012-04-25 20:15:12

0

试试这个:

$(".salary-upd-submit").click(function (e) { 

    e.preventDefault(); 

    var elem = $(this); 
    $.post("update_salary.php", elem.parent("#salary-upd").serialize(), function (data) { 
     elem.next("div").html(data); 
    }); 
}); 
1

为了避免页面刷新,我会建议将该操作附加到表单提交处理程序并阻止默认提交事件:

$("#salary-upd").on("submit", function(event) { 
     event.preventDefault(); 
     var elem = $(this); 
     $.post("update_salary.php", $(this).serialize(), function(data) { 
      elem.next("div").html(data); 
     }); 
}); 

编辑:对于旧版本的jQuery,第一行是:

$("#salary-upd").submit(function(event) { 

关于PHP:

  • 使用准备好的语句,以避免SQL注入问题处理,以
  • 使用错误看看有什么问题
+0

我收到'未知系统变量'收入'' – Liam 2012-04-25 20:06:38

0

你是否在点击按钮之前dom finis hes加载?我会将这些功能包装在文档中,以确保它只在dom完成加载后执行。

add preventDefault防止默认表单提交行为。除此之外,您可能无法注意到它是通过ajax重新加载的,因为整个页面将被隐藏。

$(function(){ 
    $(".salary-upd-submit").click(function(e) { 
     e.preventDefault(); //prevent default submit behavior. 
     var elem = $(this); 
     $.post("update_salary.php", elem.parent("#salary-upd").serialize(), function(data) { 
      elem.next("div").html(data); 
     }); 
    }); 
});