1

テーブルにあるはずのPHPスクリプトにいくつかの変数を渡すAJAX呼び出しを実行してINSERTいます。私にはわからない理由で、そうではありません。

AJAX 呼び出しは成功するため、おそらくそこで問題が発生します。

$('#rate_button').click(function(){
var varate = $('#u_varate').val(),
    fharate = $('#u_fharate').val(),
    usdarate = $('#u_usdarate').val(),
    conv15rate = $('#u_conv15rate').val(),
    conv5rate = $('#u_conv5rate').val(),
    conv20rate = $('#u_conv20rate').val();

$('#varate').val(varate);
$('#fharate').val(fharate);
$('#usdarate').val(usdarate);
$('#conv15rate').val(conv15rate);
$('#conv5rate').val(conv5rate);
$('#conv20rate').val(conv20rate);
var rates = $('#rates').serialize();
    rurl = 'http://www.nexthometown.com/components/com_singleprop/views/singleprop/tmpl/scripts/rates.php?' + rates;

$.ajax({
    url: rurl,
    success: function(){
       $('#success').fadeIn(500).delay(500).fadeOut(500); 
    },
    error: function(){
        alert('Oopsy!');
    }
});
});

AJAX 関数によって呼び出される PHP スクリプト。AJAX からのコールバックが得られないので、これで問題なくerror動作すると思いますか?

<?php
$link = mysql_connect('localhost','user','pass');


$varate = $_GET['varate'];
$fharate = $_GET['fharate'];
$usdarate = $_GET['usdarate'];
$conv15rate = $_GET['conv15rate'];
$conv5rate = $_GET['conv5rate'];
$conv20rate =  $_GET['conv20rate'];

$query = "INSERT INTO singleprop.jos_rates(varate, fharate, usdarate, convfifteen, convfive, convtwenty)VALUES('" . $varate . "', '" . $fharate . "', '" . $usdarate ."', '" . $conv15rate . "', '" . $conv20rate . "');";

$result = mysql_query($query);

mysql_close($link);
?>

また、ブラウザでスクリプト自体を実行し、それをecho変数にすると、すべてが正常に実行されました。

引数をコピーしてINSERT、それを適切な値を持つ CMD にコピーすると、正常に動作します。

4

3 に答える 3

3

問題は、SQL に 6 つのフィールドがあるのに 5 つの値しか与えられていないことです。あなたが行方不明$conv5rateです。

于 2013-01-25T17:59:35.727 に答える
0

これは私にとって問題のようです:

$query = "INSERT INTO singleprop.jos_rates(varate, fharate, usdarate, convfifteen, convfive, convtwenty)VALUES('" . $varate . "', '" . $fharate . "', '" . $usdarate ."', '" . $conv15rate . "', '" . $conv20rate . "');";

6 つの列を指定していますが、5 つの値しか与えていません。挿入の SQL 構文エラーだと思います。$conv5rate エントリが欠落しているようです。

于 2013-01-25T18:03:47.833 に答える
0

ここでdataajax に渡す設定オブジェクトのプロパティを見てください。これを使用すると、JS コードをより簡単にすることができます。

$('#rate_button').click(function(){
 var data = {varate:$('#u_varate').val(),
            fharate:$('#u_fharate').val(),
            usdarate:$('#u_usdarate').val(),
            conv15rate:$('#u_conv15rate').val(),
            conv5rate:$('#u_conv5rate').val(),
            conv20rate:$('#u_conv20rate').val()
           };

    rurl = 'http://www.nexthometown.com/components/com_singleprop/views/singleprop/tmpl/scripts/rates.php';

$.ajax({
    url: rurl,
    type:'GET',
    data:data,
    success: function(){
       $('#success').fadeIn(500).delay(500).fadeOut(500); 
    },
    error: function(){
        alert('Oopsy!');
    }
});
});

また、SQL クエリを作成するときは、それに渡す変数をサニタイズする必要があります。そうしないと、SQL インジェクションのためにコードが開かれます。少なくとも、次のようにできます。

$query = "INSERT INTO singleprop.jos_rates(varate, fharate, usdarate, convfifteen, convfive, convtwenty)VALUES('" . mysql_real_escape_string($varate) . "', '" . mysql_real_escape_string($fharate) . "', '" . mysql_real_escape_string($usdarate) ."', '" . mysql_real_escape_string($conv15rate) . "', '" . mysql_real_escape_string($conv5rate) . "', '" . mysql_real_escape_string($conv20rate) . "');";

その関数の詳細は次のとおりです: http://php.net/manual/en/function.mysql-real-escape-string.php

また、将来的には、mysql 拡張機能は廃止され、削除されるため、PDO を使用することをお勧めします。

于 2013-01-25T18:14:14.350 に答える