2009-08-24 14 views
0

だから、プロトタイプを使い始めることにしました。ここに私の最初の質問があります。私は、単一のレコードを更新するphpページにajaxリクエストを送信しようとしています。私は手でこれを行うと(すなわち:アドレスを入力+それが正常に動作パラメータが、私はJavaScriptからこのコードを使用する場合:プロトタイプajaxが正しくクエリを実行していない

var pars = 'trackname=' + track + '&tracktime=' + time; 

new Ajax.Request('php/setSongTime.php', { 
method: 'get', 
parameters: pars, 
onSuccess: function(transport){ 
    var response = transport.responseText || "no response text"; 
    alert("Success! \n\n" + response); 
    }, 
onFailure: function(){ alert('Something went wrong...') } 

するonSuccess火災やPHPから正しい情報を表示しますが、更新は行われません。どのようなPHPの戻りはUPDATE文字列があるので、私はパラメータをチェックすることだし、彼らは素晴らしい見て、誰もが問題を見ないおかげで...

合計のjavascript:。?

/*This file handles all the user-based computations*/ 

//variable declarations to be used throughout the session 
var untimedSongArray = []; 

function beginProcess(){ 

new Ajax.Request('php/getUntimed.php', { 
method: 'get', 
onSuccess: function(transport){ 
    var response = transport.responseText || "no response text"; 
    untimedSongArray = response.split("+"); 
    alert(response); 
    getFlashMovie("trackTimer").timeThisTrack(untimedSongArray[0]); 
    //alert("Success! \n\n" + response); 
    //var html = response; 
    }, 
onFailure: function(){ alert('Something went wrong...') } 

}); 
} 

function getFlashMovie(movieName) { 
    var isIE = navigator.appName.indexOf("Microsoft") != -1; 
    return (isIE) ? window[movieName] : document[movieName]; } 

function setSongTime(track, time){ 
    alert("track " + track + " has a time of " + time); 
    //$.get("php/setSongTime.php", { trackname: track, tracktime: time }); 
    var pars = 'trackname=' + track + '&tracktime=' + time; 

    new Ajax.Request('php/setSongTime.php', { 
    method: 'get', 
    parameters: pars, 
    onSuccess: function(transport){ 
    var response = transport.responseText || "no response text"; 
    alert("Success! \n\n" + response); 
    }, 
    onFailure: function(){ alert('Something went wrong...') } 
    }); 
} 

総PHPコード:

<?php 

//turn on error reporting 
ini_set('display_errors', 'On'); 
error_reporting(E_ALL | E_STRICT); 
//header('Content-Type: text/xml'); 

/////////////Main script 
//pull variables 
//need to do some error checking here 
$trackname = ($_GET['trackname']); 
$tracktime = ($_GET['tracktime']); 

//remove leading track information 
$trackname = str_replace('../music_directory/moe/moe2009-07-18/', '', $trackname); 
$trackname = str_replace('.mp3', '', $trackname); 
//echo $trackname; 

//connect with database 
$con = mysql_connect("localhost","root",""); 
if(!$con){ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("musicneverstopped", $con); 
//end connecting to database 

////////////////////////////////////////// 

//update given song time 
$sql = "UPDATE songs SET length = ".$tracktime." WHERE unique_song_id = ".$trackname; 
echo $sql; 
mysql_query("UPDATE songs SET length = '$tracktime' WHERE unique_song_id = '$trackname'"); 

//error check 
//if(!$attempt){ 
//die(mysql_error()); 
//} 

////////////////////////////////////////// 

//close database connection 
mysql_close($con);//close mysql connection 


?> 

誰でもエラーが表示されますか?

+1

mysql_query()コールの後に 'mysql_error()'コールが何かを表示しますか? – ceejayoz

+2

ちなみに、$ sqlが戻ってくるのを見るなら、問題はPrototypeではありません。 – ceejayoz

+1

これはあなたにはお答えできませんが、特に最後のSQLクエリを使用して、入力サニタイズを行う必要があります。私はmysql_real_escape_string http://us.php.net/manual/en/function.mysql-real-escape-string.phpを使用してGET入力を消去します。 – Max

答えて

0

mysql_queryで実際に実行しているのと同じSQLをエコーし​​てみてください($sqlに保存してから、2回クエリを書き込むのではなく、クエリに渡してください)。

次に、サーバーのmysqlコマンドラインでに直接エコーされたクエリを実行してみてください。


また、ちょうどあなたのSQLクエリを逃れることの重要性にマックスをエコーし​​、私はあなたのクエリにバインド変数を使用するだけではなく、の残りの部分をユーザー入力を連結すべき入力消毒に追加しますSQL。

このようなことは、SQLインジェクション攻撃を回避するために変数が適切にエスケープされることを保証します。

$sql = "UPDATE songs SET length = '%s' WHERE unique_song_id = '%s'"; 
$query = sprintf(
    $sql, 
    mysql_real_escape_string($tracktime), 
    mysql_real_escape_string($trackname) 
); 
mysql_query($query); 
+0

アドバイスをお願いしますjwheare。クエリ文字列を保存してエコーした後、PhpMyAdminで実行したところ、うまくいきました。私は次のコマンドラインでそれを試してみる... – danwoods

0

これが見つかりました!どうにかして、私は最終的な$ tracknameの前に余分なスペースを得ていました。 ltrimはそれを直しました。皆様、おかげさまでセキュリティ機能についてお話いただき、ありがとうございました。私は間違いなくそれらを実装します。 Dan

関連する問題