0

jquery と Ajax を使用してフォームを送信する際に問題が発生しました。私の問題は、フォームを送信する前にデータベースにいくつかの値を挿入したいということです。私が使用しているコードは、フォーム送信用に以下のとおりです。

$('.buttons').click(function(){

var account_num = $("#accountNum").val();
var ref_num = $("#refNum").val();

var dataString = "account_num="+ escape(account_num) + "&reference_no=" + escape(ref_num);

$("#frmTransaction").hide();
$("#loader_div").show();

$.ajax({
   type : "Post",
   url  : "validate-data.php",
   data : dataString,
   success: function(html) {
      if(html) {
    alert(html);
    $("#frmTransaction").submit();

      } else {
          alert('Unknown Error Please...Retry');    
       return false;
       }
    }, error :function (){
        return false    
    }, 
       complete: function () {  }

});
 return false;

});

html フォームは次のとおりです。

<form  method="post" action="https://sample.com/pay" name="frmTransaction" id="frmTransaction">
<input name="accountNum" id="accountNum" type="hidden" size="60" value="<? echo $_POST['account_id'] ?>">
<input name="refNum" id="refNum" type="hidden" size="60" value="<? echo $reference_no;?>" />
<input type="text" class="field" name="name" id="name" />
<input type="text" class="field" name="city" id="city" />
<input type="text" class="field" name="state" id="state" />
<input type="text" class="field" name="postal_code" id="postal_code" />
<input type="submit" class="buttons" name="submitted" value="Proceed" />
</form>

validate-data.php の内容は次のとおりです。

<?PHP
        $account_num = $_REQUEST['account_num'];
    $reference_no = $_REQUEST['reference_no'];

    $countF = mysql_num_rows(mysql_query("SELECT * FROM orders where order_id='".$reference_no."'"));

    if($countF == 0 ) {
        $res = mysql_query("insert into orders(order_id, user_account_num)values('".$reference_no."', '".$account_num."')");
    } 

if($res) 
    echo "$res ";
else 
    echo "";    
?>
4

2 に答える 2

1

click送信ボタンの Javascript が最後にあるため、フォームは送信されませんreturn false。これは、フォームが送信されないことを意味するため、その行を完全に削除してください。

生の投稿データを文字列として作成していることにも気付きました。それを行うこともできますが、jQuery に処理させる方が簡単です。代わりにオブジェクト リテラルを渡して、エンコーディングを忘れることができます。

$.ajax({
    .....
    data : { 'account_num' : account_num, 'reference_no' : ref_num },
    .....

PHP では、MySQL 結果リソースをエコーし​​ています。代わりに、boolean1またはのようなものをエコーするか0、JSON で応答オブジェクトをエンコードする必要があります。

echo $res ? '1' : '0';

上記は、クエリが成功した場合は echo 1、そうでない場合はecho と言っている三項演算子0です。

于 2012-12-05T07:27:20.183 に答える
1

2 つの問題のみ: 1 つ、コールバックを参照してくださいsuccess:

success: function(html) {
  if(html) {
  alert(html);
  $("#frmTransaction").submit();

  } else {
      alert('Unknown Error Please...Retry');    
   return false;
   }
}

あなたのifステートメントはコンピュータに尋ねます.isset変数html と2つの場合、phpコードにmysqlクエリを出力します...

if($res) 
   echo "$res ";
else 
   echo "";

回避策: jquery コードを次のように変更します。

$.ajax({
 type : "Post",
 url  : "validate-data.php",
 data : dataString,
 success: function(html) {
 var callback = $.parseJSON(html); // Parse your callback
   if(callback.process == 'success'){
      $("#frmTransaction").submit();
   } else {
      alert('Unknown Error Please...Retry');    
   }
 }, error:function(){
    alert('Unknown Error Please...Retry');    
 }, 
});

そしてphpコード:

<?PHP
 $account_num = mysql_real_escape_string($_POST['account_num']); // make sure `$_POST` and `mysql_real_escape_string` used to prevent sql injection
 $reference_no = mysql_real_escape_string($_POST['reference_no']); // And this line too

 $countF = mysql_num_rows(mysql_query("SELECT * FROM orders where   order_id='".$reference_no."'"));

if($countF == 0 ) {
    $res = mysql_query("insert into orders(order_id,   user_account_num)values('".$reference_no."', '".$account_num."')");
} 

if($res){
  echo json_encode(Array("process" => "success"));
}
else {
  echo json_encode(Array("process" => "fail")); 
}
?>

がんばれ、友よ

于 2012-12-05T11:56:21.720 に答える