トピック このトピックに返信する
TOPIC 複数のデータベース同士の検索について
Posted by Cinnamon6
at 2010/03/10(水) 16:05
分類: カスタマイズノートサポート | AmigoDatabaseバージョン: ver9.85

はじめまして。
お世話になります。

この度AmigoDatabaseを利用して求人情報サイトの立ち上げを行っております。
A.求人情報を掲載する店舗ユーザ
B.個人プロフィールを登録する求職ユーザ
この二種類のデータベースをお互いに検索し合うシステムが出来ればと考えております。

ユーザ毎に登録データを変える事が自分には出来ませんでしたので
今はAmigoDatabaseをAとBそれぞれに設置するしか無いかと考えております。
その場合AとBお互いに検索しあうというのは可能なのでしょうか?
またログインしたユーザのみ検索出来る様にするにはどうするのが一番適切でしょうか?

アドバイスなどどうぞご教示お願い致します。
よろしくお願い致します。

編集: 2010/03/17(水) 19:49

編集: 2010/03/22(月) 20:33

編集: 2010/03/23(火) 19:08

編集: 2010/03/23(火) 21:01

編集: 2010/03/26(金) 14:55
トピック このトピックに返信する
レス表示 古い順 新しい順 | 12件のレス 1-12 表示中
RES レスメッセージ
Posted by Bear
at 2010/03/10(水) 23:16
Re:複数のデータベース同士の検索について
> No3839への引用返信
> はじめまして。
> お世話になります。
>
> この度AmigoDatabaseを利用して求人情報サイトの立ち上げを行っております。
> A.求人情報を掲載する店舗ユーザ
> B.個人プロフィールを登録する求職ユーザ
> この二種類のデータベースをお互いに検索し合うシステムが出来ればと考えております。
>
> ユーザ毎に登録データを変える事が自分には出来ませんでしたので
> 今はAmigoDatabaseをAとBそれぞれに設置するしか無いかと考えております。
> その場合AとBお互いに検索しあうというのは可能なのでしょうか?
> またログインしたユーザのみ検索出来る様にするにはどうするのが一番適切でしょうか?
>
> アドバイスなどどうぞご教示お願い致します。
> よろしくお願い致します。

こんばんは。
AmigoDatabase内であれば環境設定にて「登録ユーザー以外の検索」を制限する設定がありますが、別のAmigoDatabaseを検索するときにはこれは有効になりませんね。
そこで別の方法ですが、ユーザーのCOOKIE情報を利用した検索制限が可能かもしれません。
「ユーザーCOOKIEが保存されている=ユーザーである」という認識でユーザーを判別します。

まずそれぞれのAmigoDatabaseで環境設定でのCOOKIE名設定をそれぞれ同一の名前にして下さい。デフォルトでは「AmigoDatabase」となっています。

次にdatabase.cgiのSetCookieサブルーチンの次の部分を修正します。AmigoDatabase二つとも修正して下さい。
print"Set-Cookie: $cookname=$cookval; expires=$expires\n"; 1;}
上記を
print"Set-Cookie: $cookname=$cookval; path=/; expires=$expires\n"; 1;}
このように修正します。
これは、通常COOKIEの保存はCOOKIEを保存したディレクトリ以下(database.cgiのあるdatabaseディレクトリ以下)で有効になるものですが。これをルートディレクトリ以下から有効にするよう変更するものです。

次にデータ検索時にCOOKIEが取得出来ない場合にエラーを返す修正です。
db-s.cgiのSearchサブルーチンを修正します。
  sub Search{
+ &GetCookie("$CNF{Cookie}{Name}(User)");
+ if(!$COOKIE{UserNum} && !$COOKIE{Pass}){
+     &Error("検索を行うにはユーザーログインして下さい。");
+ }
- #&GetCookie("$CNF{Cookie}{Name}(Admin)");
- #($FORM{AdminPass} eq '') and $FORM{AdminPass}=$COOKIE{AdminPass};
  if($FORM{AdminPass} ne '' and $FORM{ScName} ne ''){
以上のように修正します。
デフォルトでは検索開始時には管理者COOKIEを読み込むように設計されていますが、この機能を停止させます。そして新たにユーザーCOOKIEを読み込むように変更しています。そしてユーザーCOOKIEにユーザー番号、パスワードの値がなければエラーを返します。

※管理者COOKIEを停止するのはCOOKIEは一つの情報しか読み込めないためです。
※管理者COOKIE読込停止により何らかの原因が起これば別件ご相談下さい。

以上、作動確認はしていませんがお試し下さい。
ご不都合があればまたご連絡頂けましたら幸いです。

編集: 2010/03/10(水) 23:22
Posted by Cinnamon6
at 2010/03/21(日) 13:40
Re:複数のデータベース同士の検索について
Bear様

返信遅くなり申しわけありません。
Bear様にご教示して頂いた方法にて試して見たところ、
お互いのデータベースからおのおののユーザ番号とパスワードにて相互検索が出来る様になりました。
管理者のcookieが読み込み停止されることによりなんら不具合が出る事もなく快調に動作しております。
この度は誠に有り難うございました。

しかしデータ詳細ページからユーザーへフォームからメールを送る画面にて「ユーザー番号又はパスワードに誤りがあります」と言われてしまいます。
これは検索した時点で余所のdatabase.cgiに移動してしまうために
起きてしまう事だと思うのですが、
これを元のユーザ番号&パスワードを使用して利用する方法はないものでしょうか?

もしかしたら複数のデータベースを利用するという事ではなく、
一つのデータベースにて作成した方が適当なのかも知れないとも思い始めましたが…。
重ね重ね申し訳ございません。どうぞご教示お願い致します。
Posted by Bear
at 2010/03/21(日) 17:26
Re:複数のデータベース同士の検索について
こんにちは。

> しかしデータ詳細ページからユーザーへフォームからメールを送る画面にて「ユーザー番号又はパスワードに誤りがあります」と言われてしまいます。
> これは検索した時点で余所のdatabase.cgiに移動してしまうために
> 起きてしまう事だと思うのですが、
> これを元のユーザ番号&パスワードを使用して利用する方法はないものでしょうか?

おっしゃる通りですね。AデータベースユーザーはBデータベースのフォームメールはユーザー認証出来ませんので使えないですね。
これを可能にするにはちょっと大掛かりなカスタマイズが必要になります。よって当掲示板では扱えないカスタマイズとなりますのでご容赦下さい。

> もしかしたら複数のデータベースを利用するという事ではなく、
> 一つのデータベースにて作成した方が適当なのかも知れないとも思い始めましたが…。

本当はそちらの方が管理も含めいいかもしれません。
ただし、様々なページを2ユーザー対応に修正する必要があります。テンプレートHTMLを追加するだけでは対応できない部分も多々あります。
基本的な部分はお教えする事は出来るかと思いますが、全てに対しサポートすることは無理かと存じますので、ご自身でチャレンジする意欲がありましたらまたお返事下さい。
Posted by Cinnamon6
at 2010/03/21(日) 17:52
Re:複数のデータベース同士の検索について
Bear様

仰るとおり一つのデータベースにて二通りのユーザーがおのおのの登録データを登録しまた検索しあう様な形になるよう
本フォーラムの過去ログ等参照しつつ計画し直してみます。
この度はお忙しい中ご返答有り難うございました。
Posted by Bear
at 2010/03/21(日) 20:16
Re:複数のデータベース同士の検索について
こんばんは。

> 仰るとおり一つのデータベースにて二通りのユーザーがおのおのの登録データを登録しまた検索しあう様な形になるよう
> 本フォーラムの過去ログ等参照しつつ計画し直してみます。
> この度はお忙しい中ご返答有り難うございました。

過去ログ探してみましたがあまりいいトピックがないようですし、基本的なことは差ほど難しいことではないのでご説明しておきます。

まずユーザー登録ページを分ける方法です。
db-ur.cgiのUserRegistサブルーチンを修正します。
- #my$html=($FORM{AdminPass} ne '')?'user-regist-admin.html':'user-regist.html';
+ my$html;
+ if($FORM{UserGroups} eq 'A'){
+     $html = ($FORM{AdminPass} ne '')?'user-regist-admin-A.html':'user-regist-A.html';
+ }elsif($FORM{UserGroups} eq 'B'){
+     $html = ($FORM{AdminPass} ne '')?'user-regist-admin-B.html':'user-regist-B.html';
+ }

次にプレビュー用ページと登録完了ページ、仮登録完了ページの分離です。
同じdb-ur.cgiのUserRegistActサブルーチンの次の部分を修正します。
- #&RegistPreview('user-regist-preview.html',\%{$CNF{UserItem}});
+ ## プレビューページ
+ if($FORM{UserGroups} eq 'A'){
+     &RegistPreview('user-regist-preview-A.html',\%{$CNF{UserItem}});
+ }elsif($FORM{UserGroups} eq 'B'){
+     &RegistPreview('user-regist-preview-B.html',\%{$CNF{UserItem}});
+ }
  
  ...
  
- #$html=($FORM{AdminPass} ne '')?'user-regist-admin.html':'user-regist.html';
+ ## 登録完了ページ
+ if($FORM{UserGroups} eq 'A'){
+     $html=($FORM{AdminPass} ne '')?'user-regist-admin-A.html':'user-regist-A.html';
+ }elsif($FORM{UserGroups} eq 'B'){
+     $html=($FORM{AdminPass} ne '')?'user-regist-admin-B.html':'user-regist-B.html';
+ }
  
  ...
  
- #$html='user-regist-temp.html';
+ ## 仮登録完了ページ
+ if($FORM{UserGroups} eq 'A'){
+     $html='user-regist-temp-A.html';
+ }elsif($FORM{UserGroups} eq 'B'){
+     $html='user-regist-temp-B.html';
+ }

上記で追加したテンプレートHTMLをそれぞれ複製して作成します。
登録ページであれば「template」ディレクトリ内の管理用「user-regist-admin.html」と一般用「user-regist.html」がありますが、これらをそれぞれ複製して
user-regist-admin-A.html
user-regist-admin-B.html
user-regist-A.html
user-regist-B.html
の4種類を作成します。

プレビュー用ページは
user-regist-preview-A.html
user-regist-preview-B.html
の2種類。

仮登録完了ページは
user-regist-temp-A.html
user-regist-temp-B.html
の2種類。

登録完了ページは
user-regist-admin-A.html
user-regist-admin-B.html
user-regist-A.html
user-regist-B.html
の4種類。
※登録完了ページ、仮登録完了ページのテンプレートHTMLは「/template/complete」ディレクトリにあるテンプレートHTMLです。

複製が終了したら登録ページとプレビューページのフォーム内に追加する必要のあるタグを記述します。

●登録ページ
・user-regist-admin-A.html,user-regist-A.html
<input type="hidden" name="UserGroups" value="A">
・user-regist-admin-B.html,user-regist-B.html
<input type="hidden" name="UserGroups" value="B">

●プレビューページ
・user-regist-preview-A.html,user-regist-preview-B.html
<input type="hidden" name="UserGroups" value="$FORM{UserGroups}">

登録完了ページと仮登録ページは、特に追加するタグなどはございません。

最後に「UserGroups」というユーザーデータ種類を追加します。
管理者室から「データ種類追加」を選択し、ユーザーファイルベース(user.cgi)側に「UserGroups」というデータ種類を追加します。

ユーザー登録時にそれぞれのページを表示する方法
・ユーザーAグループ登録ページ
<a href="$BaseDir/$MainCGI?cmd=ur&UserGroups=A">
・ユーザーBグループ登録ページ
<a href="$BaseDir/$MainCGI?cmd=ur&UserGroups=B">
とします。

以上で登録プロセスでのユーザーの分類は可能です。

ユーザーデータ変更はdb-ue.cgiを同様に修正する事で可能です。
その辺からはご自身で頑張ってみて下さい。

編集: 2010/03/21(日) 20:21
Posted by Cinnamon6
at 2010/03/22(月) 15:54
Re:複数のデータベース同士の検索について
Bear様

早速のご返答有り難うございます。
またユーザ登録の分け方について詳しくご教示下さり
重ね重ねお礼申し上げます。

db-ur.cgiに修正を施し、
テンプレートhtmlもAB両種類作成致しました。
またユーザ登録ページへのリンクを
&UserGroups=A、&UserGroups=Bと二種類作成し、
db-html.cgiに付け加えました。

ですがユーザ登録ページに進もうとすると
「db-ur.cgiを呼び出せません。」
というエラーメッセージが出てしまいます。
db-ur.cgiのパーミッションを色々と変えてみましたがエラーは解消されませんでした。
db-ur.cgiへの修正の仕方に問題があるのでしょうか?
どうぞご教示頂けましたら幸いです。
Posted by Bear
at 2010/03/22(月) 16:47
Re:複数のデータベース同士の検索について
こんにちは。

> ですがユーザ登録ページに進もうとすると
> 「db-ur.cgiを呼び出せません。」
> というエラーメッセージが出てしまいます。
> db-ur.cgiのパーミッションを色々と変えてみましたがエラーは解消されませんでした。
> db-ur.cgiへの修正の仕方に問題があるのでしょうか?

db-ur.cgiでの修正でプログラムエラーがあるようですね。
もう一度修正内容をご確認下さい。
分からない場合は、db-ur.txtと名前を変更し、そのファイルまでのURLをご提示頂ければ確認させて頂きます。
Posted by Cinnamon6
at 2010/03/22(月) 17:39
Re:複数のデータベース同士の検索について
Bear様

早速のご返信有り難うございます。

txt形式に変更して改めて確認した所、
コピー&ペーストしました部分のバックスラッシュが
文字化けを起こしておりました。
只今Macintosh環境にて作業している為起きた間違いだと思います。
お騒がせして申しわけありません。

そして確認しましたところuser-regist-A.html、user-regist-B.html共に表示されております。
これを参照に続けて二種類のユーザデータ部分の作成を行っていきたいと思います。
この度は本当に有り難うございました。
Posted by Cinnamon6
at 2010/03/26(金) 15:02
Re:複数のデータベース同士の検索について
度々申しわけありません。

No3883を参考にユーザ編集ページ、データ編集ページ両方にAもしくはBと振り分けを行っておりますがどうもある作業を行うと画面が真っ白になってしまいます。
ユーザ編集ページでは登録完了の画面で真っ白となり、
データ編集ページではデータ一覧から編集ボタンをクリックした時点で真っ白な画面となってしまいます。
この様な場合それぞれのdb-ue.cgiとdb-de.cgiに問題があるという考え方で宜しいでしょうか?
やはりNo3883と全く同じ作業で、という事ではないのでしょうか。
Posted by Bear
at 2010/03/26(金) 19:00
Re:複数のデータベース同士の検索について
こんばんは。

> No3883を参考にユーザ編集ページ、データ編集ページ両方にAもしくはBと振り分けを行っておりますがどうもある作業を行うと画面が真っ白になってしまいます。
> ユーザ編集ページでは登録完了の画面で真っ白となり、
> データ編集ページではデータ一覧から編集ボタンをクリックした時点で真っ白な画面となってしまいます。
> この様な場合それぞれのdb-ue.cgiとdb-de.cgiに問題があるという考え方で宜しいでしょうか?
> やはりNo3883と全く同じ作業で、という事ではないのでしょうか。

何故真っ白なページが表示されるかは上記情報だけでは私には分かりかねます。
原因だと思えるdb-ue.cgiなどをdb-ue.txtなどとしてそのファイルまでのURLをお知らせして頂ければ、ファイルを拝見した上何らかのお返事が出来るかもしれません。
また真っ白なページが表示されるかは、それぞれの詳細ページに問題がある可能性もあります。
http://www.cgi-search.info/amigo/faq.html
こちを参考にして下さい。
Posted by Cinnamon6
at 2010/03/26(金) 21:06
Re:複数のデータベース同士の検索について
ご返答ありがとうございます。

http://girls-ch.net/database/lib/db-de.txt
http://girls-ch.net/database/lib/db-ue.txt

こちらの様になっております。
htmlの方はまるで触っていないのでこちらの方に何か問題があるのではと考えております。
どうかご助言などいただければ幸いです。
Posted by Bear
at 2010/03/27(土) 13:21
Re:複数のデータベース同士の検索について
こんにちは。

> http://girls-ch.net/database/lib/db-de.txt
> http://girls-ch.net/database/lib/db-ue.txt

拝見させて頂きました。

> ユーザ編集ページでは登録完了の画面で真っ白となり、

db-ue.cgiの修正は問題ないかと思います。であるならば「$FORM{UserGroups}」にデータが受け渡しされていないのかもしれません。ユーザー編集ページのテンプレートHTMLに「UserGroups」の登録データを送るhiddenフォームは設置されましたか?
value値は「A」など固定でも問題ないですが、登録データ値は$DATA{UserGroups}でも可能ですね。

追加補足
user-edit-A.htmlを拝見しました。やはりhiddenに問題があるようですね。
<input type="hidden" name="UserGroups" value="$FORM{UserGroups}">

<input type="hidden" name="UserGroups" value="$DATA{UserGroups}">
と修正して下さい。

> データ編集ページではデータ一覧から編集ボタンをクリックした時点で真っ白な画面となってしまいます。

データ編集ページを開く際はdb-de.cgiのDataEditPartサブルーチンが実行されます。
これは以前にご質問いただいたNo3888と同じですね。$TargetUserが$TargetDataに置き換わってるだけです。

エラーなど何らかの問題が出た場合、まずは最初からよく見直しをするように心がけて下さい。原因は単純なことが多々あります。
また、最初に申し上げた通り最後までサポート出来ることではありませんので、改造を行う以上これを機会にご自身でPerlを勉強して問題に当たられる努力をお願い致します。それでもなお問題が解決しない場合は、なにをどのようにしたかなど修正ソースを提示して頂いたうえでご質問下さい。
少しきつい言葉になってしまいましたがご理解とご容赦をお願い致します。

編集: 2010/03/27(土) 13:44
Access: 1,219,875
 
ソーシャルブックマーク: Yahoo!ブックマーク Google Bookmarks はてなブックマーク Livedoorクリップ @niftyクリップ FC2ブックマーク Buzzurl Delicious トピックイット newsing it!