大すき!ワンオペレーションではネットランキング機能が搭載されています。
これはウディタのダウンロード機能を使ったものです。
このネットランキングを作るのにやったこと、必要だったことをメモしておきます。
◆何がいるのか
必要なものは
・PHPファイル
・データベース
(+ PHPやDBが使えるレンタルサーバー。自分の場合は
さくらインターネット)
◆何が行われているのか
【ウディタ】
ダウンロードイベントを実行。
ダウンロード先URLには、情報(名前、スコアなど)をプラスしておく
↓
↓接続時に、URL後ろにプラスした情報が送られる(=GET形式)
↓
【PHP(※ダウンロード先)】
・受け取った情報を、データベース(別途用意)に登録
・データベースからスコアのランキングを引っ張ってくる
PHPには、最終的に、取得したランキングが書かれた文が表示される
↓こんな感じ
過労死 68 14/09/10 17:43:49
black 56 14/09/10 17:37:05
shine 26 14/09/11 15:07:42
aa 25 14/09/11 12:16:49
ムツキ 25 14/09/11 6:54:47
★水月 25 14/09/10 19:17:27
あるま 25 14/09/11 22:31:28
shine 25 14/09/10 18:31:47
zz 25 14/09/10 17:24:51
くろこーぷ 25 14/09/12 2:41:54
↓
↓ダウンロードイベントは、この最終的に表示された文をダウンロードしてくる
↓
【ウディタ】
PHPから文を取得
文字列変数に代入
↓
これを文字列ピクチャなりで表示することになる。
◆ソースコード
MySQLの場合
(※私が使った時のものです。これをコピペすれば即使えるというわけでもありません。飽くまで参考用として。)
<?php
//------------------------------------------------------------メモ
//【文字コードについて】
//ウディタからの取得時→Shift_JIS
//なので、来たデータをそのまま返す場合は文字コード変換は不要。
//しかし、PHPから表示したデータを返す場合、UTF-8なので文字コード変換が必要。
//------------------------------------------------------------
$name=$_GET[\'name\'];//ウディタのDL機能で、URLにくっつけて送った変数を取得
$score=$_GET[\'score\'];//ウディタのDL機能で、URLにくっつけて送った変数を取得
$registtime=date(\"y/m/d G:i:s\");//登録時間を取得
$name=mb_convert_encoding($name, \"UTF-8\", \"Shift_JIS\");
//↑mysqlはUTF-8なので、ウディタから来たShift_JISから変換する必要がある。(表示されない)
$name=htmlspecialchars($name);//汚物を消毒(HTMLタグがウディタから送られてきた時用対策)
//------------------------------------------------------------SQL実行(挿入)
$dsn=\'mysql:dbname=☆;host=★\';//【注意】☆←DB名、★←ホスト名
$user=\'●\';//【注意】●←DBのユーザー名
$password=\'○\';//【注意】○←DB接続の為のパスワード
$dbh=new PDO($dsn,$user,$password);//↑の3つの情報を使ってDBに接続する
$dbh->query(\'SET NAMES utf8\');
$sql=\'INSERT INTO ◆(name,score,registtime) VALUES (?,\"\'.$score.\'\",\"\'.$registtime.\'\")\';
//↑SQL文(どういう形でDBにデータ登録するか指定)【注意】◆←DBの中のテーブル名
$stmt=$dbh->prepare($sql);
$data[]=$name;//SQLインジェクション対策
$stmt->execute($data);//SQLインジェクション対策
$dbh=null;//DB閉じる
//------------------------------------------------------------SQL実行(取り出し)
$dsn=\'mysql:dbname=☆;host=★\';//【注意】☆←DB名、★←ホスト名
$user=\'●\';//【注意】●←DBのユーザー名
$password=\'○\';//【注意】○←DB接続の為のパスワード
$dbh=new PDO($dsn,$user,$password);//↑の3つの情報を使ってDBに接続する
$dbh->query(\'SET NAMES sjis\');
mysql_set_charset(\'sjis\');//ウディタはShift_JISなので、mysqlから来たUTF-8から変換する必要がある。(文字化け)
$sql=\'SELECT * FROM daisuki WHERE 1 ORDER BY roudou DESC\';
//↑SQL文(どういう形でDBからデータを持ってくるか指定)
$stmt=$dbh->prepare($sql);
$stmt->execute();//SQL実行
//【取り出したのを表示する】
for($i=1;$i<=10;$i++){//1〜10位までを取り出す
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false){ //中身がもうない場合
break; //中断
}
$hyoujiname=$rec[\'name\'];
$hyoujiroudou=$rec[\'roudou\'];
$hyoujiscore=$rec[\'score\'];
//【取り出したデータを文字にして表示】
print str_pad($hyoujiname,10,\' \',0);//変数hyoujinameが、6ケタに満たなかったら、「_」で、左から補う
print\" \";
print str_pad($hyoujiroudou,6,\' \',0);//変数hyoujiscoreが、6ケタに満たなかったら、「_」で、左から補う
print\" \";
print $rec[\'tourokuji\'];
print\"\\n\";//改行
}
$dbh=null;//DB閉じる
?>
◆参考
いきなりはじめるPHP