Book DB - 蔵書管理スクリプト

概要

蔵書を管理するための、cgiで動作するphpスクリプト。
出かけた先で何気なく暇つぶしに入った本屋。
「あれ、この本って買ってたっけ?忘れた〜」
という状況。
そんなとき、さっとケータイから蔵書チェック。 というソリューション。
基本コンセプトは:
入力は、蔵書状態を確認できる最小限の情報に絞り、UIも極力簡素化しています。
が、その中身はphpとかSQLとかJavaScriptとかHTMLとかcssとかcgiとかXMLHttpRequestとかがごちゃごちゃ混ざった複雑プログラム。

ダウンロード

アーカイブ

サンプル

デモのログインパスワードは最初から入力されています。 ログイン状態になると、内容を自由に編集することができます。 編集された内容は、適当なタイミングで復元されます。
登録されている偏った蔵書内容については気にしない方向で。

必要システム

必須項目

ちなみに、bdb.phpはさくらのレンタルサーバ「スタンダード」を利用して開発しています。 ので、ここならとりあえず動くかと思います。

使用条件

bdb.php (C) 2008 junnno, all rights reserved.
bdb.phpはフリーソフトです。 ソースコード内に表示されている著作者表示を削除しなければ、自由に改造、複製、設置して利用することが出来ます。 不特定多数への再配布には作者の許可が必要です。 このソフトウェアを使用して生じた不利益について、作者は責任を負いません。

設置方法

bdb.phpの設定

bdb.zipを展開し、bdb.phpの先頭部分を書き換えます。
$sqlserver     = 'SQLサーバ名';
$sqluser       = 'SQLサーバの接続ユーザ名';
$sqlpassword   = 'SQLサーバの接続パスワード';
$sqldb         = 'SQLサーバのデータベース名';
$sqltable      = '蔵書情報を保存するテーブル名';
$initpassword  = '蔵書情報を初期化するためのパスワード';
$loginpassword = '蔵書情報を更新するためのパスワード';
$awskey        = 'Amazon Web Service Access Key ID';
$awssecretkey  = 'Amazon Web Service Secret Access Key';
$aatag         = 'Amazon Associate Tracking ID';
例えば:
$sqlserver     = 'mysql.db.sakura.ne.jp';
$sqluser       = 'username';
$sqlpassword   = 'password';
$sqldb         = 'username';
$sqltable      = 'bookdb';
$initpassword  = 'initpassword';
$loginpassword = 'loginpassword';
$awskey        = '(Amazon Web Service Access Key ID)';
$awssecretkey  = '(Amazon Web Service Secret Access Key)';
$aatag         = '(Amazon Associate Tracking ID)';
ISBN検索、amazon検索の機能を利用するためには、$awskeyと$awssecretkeyの設定が必要です。 $aatagにアソシエイトキーを設定すれば、Amazonを参照するリンクにアソシエイト情報が付きます。
Amazon Web Service Access Key IDとAmazon Web Service Secret Access Keyは、Amazon Web Serviceのページで登録すれば作成できます。 Amazon Associate Tracking IDは、Amazon アソシエイト セントラルのページで登録すれば作成できます。

php.iniの設定

php.iniの内容は次のように設定することをお勧めします。
mbstring.language             = Japanese
session.use_only_cookies      = Off
session.use_cookies           = On
session.use_trans_sid         = On
register_globals              = Off
output_buffering              = Off
magic_quotes_gpc              = Off
bdb.phpは、日本語での利用を想定しています。 httpの入出力の文字コードは、EUC-JPを想定しています。 データベースには、EUC-JPで情報を格納します。
セッション管理(ログイン情報の保存)にはcookieを利用することを前提としています。 cookieに対応していない携帯端末などを利用する場合には、session.use_only_cookiesをoff、session.use_trans_sidをonにする必要があります。
register_globalsの機能は利用しないので、どちらでも良いです。
output_bufferingの機能も利用しないので、適当に。
magic_quotes_gpcの状態には依存しないように設計されています。
さくらのレンタルサーバで利用する場合、phpのバージョンは5を選択する必要があります。 php.iniとphpのバージョンはサーバコントロールパネルから設定可能です。 (PHP設定ファイルの編集、PHPのバージョン選択)

アップロード

適当なフォルダにアップロードして、bdb.phpに実行属性を付けます。 通常はuserに実行属性が必要ですが、otherに必要な場合もあります。 また、user以外にwrite属性があると、動作させることが出来ないサーバもあります。
さくらのレンタルサーバだと700ぐらいが良いです。

初期化

httpでbdb.phpにアクセスしてください。 エラーが出たら、これまでの過程の何かが間違っています。悔い改めましょう。
メインメニューが表示されたら、まずログインします。 「ログイン」をクリックし、そのリンク先で$loginpasswordで設定した文字列を入力し、「ログイン」を押します。 これで、ログイン状態になります。
ログインしてからメインメニューに戻ると、一番下に「初期化」のリンクが表示されます。 「初期化」をクリックし、そのリンク先で$initpasswordで設定した文字列を入力し、「実行」を押します。 $sqltableで指定した名前のテーブルが既にあると、その内容は全て削除されるので注意してください。
以上でデータベースの初期化作業は終了です。 ログイン状態を解除するには、メインメニューの「ログアウト」をクリックします。
$initpasswordが空文字列になっていると、初期化が出来ません。 誤操作が心配な場合は、初期化が終了したら、$initpasswordを空にしておくと良いでしょう。

運用

蔵書を登録する

蔵書のデータを登録するには、何通りかの方法があります。 データを入力するときは、必ずログイン状態である必要があります。

一冊ずつ情報を入力して登録

メインメニューから「一冊登録」をクリックします。 書名、巻号、著者、ISBN…にそれぞれ本の情報を入力してから、「登録」ボタンを押せば登録されます。 書名かISBNのどちらか一方は、必ず入力しなければなりません。
登録に成功すると、確認のため、登録された内容が表示されます。 間違って入力した場合は、ここで修正してください。
また、別の本を登録する:から、引き続き別の本を登録することができます。 このとき、書名、巻号、著者などのデータはそのままコピーされるので、 続き物の本は巻号だけ変えて連続して入力できます。
複数の著者が存在する場合、半角スラッシュ(/)で区切ります。

複数のデータを一括して登録

メインメニューから「複数登録」をクリックします。 テキストエリアが表示されるので、表計算ソフトなどからデータを流し込んでください。
一行に一冊分のデータを入力します。 項目は書名、巻号、著者、ISBN、分類、メモの順で、項目間はタブで区切ります。 通常、Microsoft ExcelやOpenOffice Calcなどからコピー&ペーストすれば、タブ区切りになります。
データを入力して「登録」をクリックすると、データが登録されます。 解釈できなかった行(書名とISBNのいずれも入力されていないなど)は無視されます。 また、すでに存在する本のデータは登録されません。

ISBNから検索して登録

この機能を利用するには、$awskeyの設定が必要です。
メインメニューから「ISBN検索/登録」をクリックします。 ISBNを10桁または13桁で入力してください。 10桁のISBNでは、末尾のXのみ省略して入力することができます。
入力したISBNはAmazonで検索され、検索結果:に表示されます。 蔵書にISBNの一致する本がある場合は、その上に蔵書情報:として表示されます。
Amazonの検索結果は自動的に変換され、書名、巻号、著者…の入力エリアに配置されます。 間違っている場合はそれらを修正し、「この本を蔵書登録」を押すと登録されます。 蔵書から検索された本がある場合は、「蔵書情報を上書き」となり、入力エリアの内容でその情報が上書きされます。
続けて別の本を登録する場合は、一番下のフォームに再びISBNを入力して検索します。

amazonからフリーワードで検索して登録

この機能を利用するには、$awskeyの設定が必要です。
メインメニューから「amazon検索」をクリックします。 書籍を特定するキーワードを入力し、「検索」をクリックします。
Amazonから本が検索され、上位の検索結果が数点表示されるので、 登録したい本のISBNのリンクをクリックします。
ISBN検索結果の画面が表示されるので、適宜修正してから、「この本を蔵書登録」を押します。

連続してISBNを打ち込んで登録

この機能を利用するには、$awskeyの設定が必要です。 ブラウザがJavaScriptに対応している必要があります。 JavaScriptの動作はFirefox2とIE7で確認しています。
メインメニューから「連続ISBN登録」をクリックします。
左端のセルにISBNを数字のみで入力します。 10桁または13桁の正しいISBNが入力されると、自動的に検索が始まり、結果が右のセルに入力されます。 ISBNの入力が確定するたびに、新しい行が追加されるので、連続してISBNを入力していきます。
ISBNの末尾が「X」の場合は、9文字目まで入力してEnterを押すと、自動的に補完されて検索されます。 または、「.」を入力すると、代わりに「X」が入力されます。
検索結果を修正したい場合は、直接セルの内容を書き換えます。 ISBNのセルでEnterを押すと、情報が再検索されます。
「登録する」ボタンを押すと、本の情報が一括して登録されます。 入力を間違えた行がある場合は、行の右端のチェックをはずせば、登録されません。 また、すでに存在する本のデータは登録されません。

蔵書を検索する

書名、巻号、著者…の一部分を入力し、「検索」を押すと検索されます。 各項目はANDで結合されます。 「その項目が入力されていない」という条件を指定するには、項目に半角ハイフン(-)を一文字だけ入力します
検索結果は表形式で表示されます。 本の書名、巻号、著者、分類をクリックすると、それをキーワードとして再検索されます。 本のISBNをクリックすると、ISBN検索が実行されます。
「詳細」をクリックすると、蔵書のすべての情報が表示されます。 ログイン状態では、ここから本の情報を修正することができます。
「AMZN」をクリックすると、本の書名、巻号、著者をキーワードとしてamazon検索が実行されます。 ログイン状態では、ここから本の情報をamazon検索した情報で更新することができます。

蔵書の情報を更新する

入力した本の情報を更新するには、いくつかの方法があります。 データを入力するときは、必ずログイン状態である必要があります。

個別にデータを更新

ログイン状態で更新したい書籍を検索し、表から「詳細」をクリックします。 本の情報が入力エリアに表示されるので、変更してから「蔵書情報を上書き」を押します。

一括でデータを編集・更新

ログイン状態で更新したい書籍を検索し、検索表を出します。
編集したい行の右端のチェックボックスにチェックを入れます。
表の一番下の、チェック項目を:「編集」を選択し、「実行」を押します。
入力エリアの表が表示されるので、適当に編集して、チェック項目の:「蔵書情報を上書き」を押します。 このとき、右端がチェックされていない行は更新されません。最初は全てチェックされています。 また、入力エリアを空白にした場合、その項目は変更されません。 項目の内容を消去したい場合は、半角ハイフン(-)を一文字だけ入力します。

ISBNから書籍の情報を取得して更新

ログイン状態で更新したい書籍を検索し、表のISBNをクリックします。
Amazonから本の情報が検索され、元の蔵書情報と検索結果が上下に対比して表示されます。
必要であれば、検索結果の内容を修正して、「蔵書情報を上書き」を押します。

amazonで書籍の情報を検索して更新

ログイン状態で更新したい書籍を検索し、表のAMZNをクリックします。
Amazonから書名、巻号、著者の情報を元に書籍が検索され、候補が数件表示されます。
該当する本があれば、その本のISBNのリンクをクリックします。 該当する本がなければ、キーワードを修正して目的の本が見つかるまで検索しなおします。
ISBN検索結果の画面が表示されるので、適宜修正してから、「この本を蔵書登録」を押します。

amazonで書籍情報を一括検索して更新

ログイン状態で更新したい書籍を検索し、検索表を出します。
Amazonから情報を取得したい行の右端のチェックボックスにチェックを入れます。
表の一番下の、チェック項目を:「amazon検索」を選択し、「実行」を押します。
ISBNが入力されている場合、ISBNを元に本の情報を検索します。 ISBNが入力されていない場合は、書名、巻号、著者をキーワードにAmazonで検索し、 一番上の結果をその本の情報として採用します。
蔵書情報と検索結果の対比表が表示されるので、必要なら検索結果を編集して、チェック項目の:「蔵書情報を上書き」を押します。 このとき、右端がチェックされていない行は更新されません。最初は全てチェックされています。 また、入力エリアを空白にした場合、その項目は変更されません。 項目の内容を消去したい場合は、半角ハイフン(-)を一文字だけ入力します。

蔵書の情報を削除する

個別に削除

ログイン状態で更新したい書籍を検索し、表から「詳細」をクリックします。 「登録を抹消」を押すと、登録が削除されます。

まとめて削除

ログイン状態で更新したい書籍を検索し、検索表を出します。
削除したい行の右端のチェックボックスにチェックを入れます。
表の一番下の、チェック項目を:「削除」を選択し、「実行」を押します。

すべてを削除

データベースを初期化します。

仕様

MySQLの利用方法など、プログラムの仕様についての情報です。

データベース

テーブル内の文字列はEUCJPで格納されています。
ISBNは10桁または13桁のいずれかの形式で格納されています。 推奨する形式はありません。 データベースの検索時には、可能な限り10桁と13桁を相互変換し、両方を検索します。 ISBNがテーブル内でユニークであることは保証されていません。
&、<、>、'、"などの文字は、HTMLエンティティにエスケープされた状態で格納されています。
入力した文字列に含まれるHTMLエンティティは、一度、元の文字に復元されます。 その後、一部の文字は再びHTMLエンティティに変換され、格納されます。
大文字と小文字は区別されて保存されますが、検索時には区別されません。
巻号は、1〜9999の範囲で入力されることが期待されています。 10000以降は非数字の巻号(上中下など)のために予約されています。 0は巻号が無いことを意味します。

文字コード

スクリプト内の文字列はEUCJPで記述されています。
出力文字コードは、EUCJPです。
入力文字コードは、EUCJPであることが期待されています。 それ以外の文字コードで入力された場合の結果は、phpの文字コード自動変換の成否に依存しています。

入力の制限

項目内にタブ文字を含めることはできません。
全角と半角は区別されます。自動変換はしません。

内部変数

冒頭のほうで$richmode=0とすると、通常より転送量を削減した簡易な出力をします。 作者はpreminiを使用しているため、preminiでアクセスしてきたときだけ、$richmode=0になるようにしています。

リンク

bdb.phpに関連するリンク集です

バージョン改訂履歴

Ver.4
AWSの認証に対応
Ver.3
DHTML連携での一括入力に対応
Ver.2
不明
Ver.1
初版

戻る