まず、入力を検証する必要があり、コードはSQL インジェクションに対して脆弱です。PHPでSQLインジェクションを防ぐ方法を確認してください。
mysql_*
新しいコードで関数を使用しないでください。それらはもはや保守されておらず、公式に廃止されています。代わりに準備済みステートメントについて学び、 PDOまたはMySQLiを使用してください
それを念頭に置いて、まったく同じことを行う PDO スクリプトを次に示します。これはかなり長くなりますが、これは単なる例であるため、必要に応じてクラスとして使用できます。
<?php
// create connection to database
$conn = new PDO('mysql:dbname=DATABASE_NAME;host=localhost;port=3306', USERNAME, PASSWORD);
// prepare query
$pdo = $conn->prepare("UPDATE ss_character SET location = :location WHERE id = :session_id");
// set up parameters
$params = ['location' => (int)$_POST['location'], 'session_id' => $_SESSION['id']];
// loop through the paramaters to determine the type
foreach ($params as $key => $value) {
switch ($value) {
case is_int($value):
$param = PDO::PARAM_INT;
break;
case is_bool($value):
$param = PDO::PARAM_BOOL;
break;
case is_null($value):
$param = PDO::PARAM_NULL;
break;
default:
$param = PDO::PARAM_STR;
break;
}
// bind paramter to query
$pdo->bindValue(":$key", $value, $param);
}
// execute the query
$result = $pdo->execute($params);
// echo result for ajax
echo ($result) ? true : false;
そして、ページが強制的にリロードされないように、jQuery で ajax を実行する必要があります。
<script>
function updatePlayerLocation(location) {
// ensure location is numeric or stop
if !isNaN(location) return false;
// update location via ajax
$.ajax({
url: 'http://your_url/to/php/script.php',
type: 'POST',
data: 'location=' + location,
success: function(data) {
// log result to console for error trapping purposes
console.log(data);
}
});
// stop link from being processed
return false;
}
</script>
もちろん、HTML にはjQuery、上記のスクリプト、および少なくとも 1 つのリンクが含まれます。
<a href="#" onclick="return updatePlayerLocation(0);">Location name</a><br />