プロが教える店舗&オフィスのセキュリティ対策術

mySQLとphpで、アクセスカウンタの作成を練習しています。
データベース名:animal、テーブル名:pet、フィールド名が順にID:url:scoreで
1:neko.com:43
2:inu.com:24
3:bird.com:62

というデータがあります。
たとえばhttp://test.com/test.php?id=2というリンクを踏んだ場合、inu.comへ転送させ、さらに24の数字は25になります。

自分でもhttp://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=URL%B0 …
これを利用してidを得たあとmySQLにアクセスしてデータを探そうとしたのですが、手元の「よくわかるphpの教科書」には指定したデータの抽出方法は見つかりませんでした。
今日一日調べながらがんばってみましたが、いろいろ工夫してもどうもうまくできません。

どなたか、これらの処理を行うphpの模範回答をご教示いただけないでしょうか。

どうかよろしくお願いします。

A 回答 (1件)

<?php


if(!isset($_GET['id']) || !preg_match('/^[0-9]+$/', $_GET['id'])){
//GETパラメータにIDがないか、
//数字以外のものが入ってるので終了
exit();
}

//DB設定
define('MY_DB_DSN', 'mysql:dbname=your_db_name;host=your-host-name');
define('MY_DB_USER', 'username');
define('MY_DB_PASS', 'password');

$id = $_GET['id'];

try{
$pdo = new PDO(MY_DB_DSN, MY_DB_USER, MY_DB_PASS); //PDOでデータベースアクセス

//PDOを設定
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//IDを探す
//プリペアドステートメントの作成
$stmt = $pdo->prepare("SELECT * FROM animal WHERE id=?");

if(!$stmt->execute(array($id))){
//失敗したので終了
exit();
}

$row = $stmt->fetch(PDO::FETCH_ASSOC);
if(!empty($row)){

//遷移先URLを取得して
$url = $row['url'];

//カウンタを回す
$stmt = $pdo->prepare("UPDATE animal SET score=score+1 WHERE id=?");
$stmt->execute(array($id));

//準備終わったのでリダイレクト
header("Location: {$url}");
exit();

}


}catch(Exception $e){
//例外エラーが出てきたので終了
//エラー内容みたかったら
//echo $e;
//上をコメントアウト
exit();
}

?>

こんな感じですかね。
    • good
    • 0
この回答へのお礼

大変ご丁寧なご回答、本当にありがとうございます。
まだ学習途中ですが、このプログラムをもとにより一層の昇進を続けたいと思います。

ありがとうございました。参考にさせていただきます。

お礼日時:2011/01/24 13:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!