2

AJAX と PHP を使用して DB を更新しようとしています。ページが更新され、テーブルに何も挿入されないだけで、すべてが正しいと確信しています。

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());
4

4 に答える 4

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 インジェクションの問題を回避する
  • エラー処理を使用して何が問題なのかを確認する
于 2012-04-25T20:05:52.363 に答える
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)");
于 2012-04-25T20:10:34.677 に答える
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);
    });
});
于 2012-04-25T20:05:44.830 に答える
0

DOM の読み込みが完了する前にボタンをクリックしていますか? 機能をドキュメントにラップして、dom の読み込みが完了した後にのみ実行されるようにします。

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);
      });
  });
});
于 2012-04-25T20:07:18.230 に答える