現在DBMを用いて簡単なデータベースを作成しています。
どこぞのCGIゲームのように、リアルタイムにデーターベースの内容が書き換えられる(戦闘をすればお金がプラス等)ようにしたいのですが、うまくいきませんorz
#!/usr/bin/perl
use AnyDBM_File;
use Fcntl;
print "Content-type: text/html\n\n";
dbmopen(%DBM, 'id', 0666);
$DBM{"baka"} = ("0<>1<>2<>");
dbmclose(%DBM);
print<<"HTMLTAG";
DBを作成しました
HTMLTAG
tie %DBM,AnyDBM_File,"id",O_RDONLY,0666;
@aaa = split(/<>/,$DBM{"baka"});
untie %DBM;
print"$aaa[0]";
$aaa[0]++;
とりあえずこのスクリプトで、ブラウザの更新をおすたびに表示される数字が1あがっていく(プラスされて書き換えられる)ようにしたいのですが・・・
多分ですがゲーム等の場合、いちいちdbmopenで書き換えてないとおもうので、その方法を知りたいというわけです。
いちおうこの段階ではDB作成、DBの読み込みと表示はできています。
ご教授おねがいします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
>untieするまでは永続的に更新できるということですね??
そうです。
一度、DBMを作成しておけば、毎回作成する必要はありません。
tie で接続したら、前回までの更新の値が(DBMに保存されているので)そのまま使えます(つまり値が永続的だということ)。
No.2
- 回答日時:
tie によるハッシュとDBMの結合を行っている場合には、
ハッシュに対する操作はそのままDBMに対する永続的な更新になります。
なので、スクリプトの最後にuntie するようにすれば良いです。
No.1
- 回答日時:
DBを更新しないとデータが変わらないのだから、DBを更新するしかないと思います。
この回答への補足
ではゲーム系CGIはどのような構造なのでしょうか・・・
DBMをオープンするサブルーチンを呼び出した後、
$aaa[0]++;等でDB内の値を変えるとDBが更新されているのです。
何かが起こるたびにDBが書き換えられているのでしょうか?
参考にしているゲームのDB読み込みのサブルーチンは
tieで読み書きモードで呼び出し、それぞれの値を
splitを使って配列に入れ込む。ただそれだけです。
DB作成のルーチンも特別なものがなく、戦闘部分のサブルーチン内でDB読み込みのサブルーチンが呼び出され、戦闘が行われた後の処理が続いています。($aaa[0]++;とか)
結構探しましたが、$DBM{"baka"} = ("0<>1<>2<>");のような記述がDB作成の部分しかみあたらずでした。
説明がややこしくてわかりずらいですが引き続きお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハッシュ値が一致したデータは...
-
まったく同じファイルのハッシ...
-
チェックデジットについて
-
列挙型と連想配列の違いを教え...
-
文字列を変数名として扱う方法
-
ハッシュのキーを変数で
-
UTF-8で書かれたJSPの日本語文...
-
英語でのシャープとコメの呼び...
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
DoEventsが必要な理由について
-
VBAのautofilter、criteriaの配...
-
GIFアニメをループさせたくない
-
vba
-
アクティブセルから、A列最終行...
-
データベースから取得したデー...
-
VBA Dir関数でファイルをループ...
-
VBのReturnの使い方
-
流れ図(フローチャート)が分か...
-
二次元配列のインデックスについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースでユーザーのパス...
-
文字列を変数名として扱う方法
-
ハッシュ検索はなぜ速い
-
まったく同じファイルのハッシ...
-
列挙型と連想配列の違いを教え...
-
ハッシュ値が一致したデータは...
-
重複ファイルを削除したいので...
-
*(アスタリスク)の意味
-
UTF-8で書かれたJSPの日本語文...
-
チェックデジットについて
-
ハッシュマーク以降のアドレス取得
-
ハッシュリストって単にハッシ...
-
一意(ユニーク)かつ、ソート...
-
多次元連想配列の削除
-
英語でのシャープとコメの呼び...
-
perlで配列名を動的に作り出したい
-
連想配列のサイズ制限
-
ハッシュ値によるファイルの同...
-
全ての変数を初期化する方法は...
-
文字列をハッシュにしなければ...
おすすめ情報