みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
旧掲示板に書き込みしていたようなので、再度こちらにも書き込ませていただきます。
(重複になり規約違反等でしたら削除してください。)
Filemaker API for PHPで簡単なシステムを作っています。
仮にAとBのテーブルがXというフィールドでリレーションされており
Aの中のフィールドYをLast(B)したいのですが、
PHPで計算フィールドを表示することができません。
テキストフィールドにしてデータの自動入力で計算にするとフィールドの表示は出来るのですが、
PHP上でXフィールドを入力しても計算されません。
(FilemakerでXフィールドに入力・変更するとYはちゃんと計算されます)
((正確にはXフィールドにはIPアドレスを自動取得して入力しています))
ご教授お願いいたします。
Aの中のフィールドYをLast(B)したいのですが、
BテーブルでLast(A::Y)が計算できないという意味ですかね。
XフィールドにはIPアドレスを自動取得して入力
Get関数でクライアントのIPアドレスが入ると思ってる間違いかな?
Offline
わかりにくい書き方ですみません・・・。
IPアドレスを取得してAテーブルのXフィールドに入力します。これは<?php echo $_SERVER["REMOTE_ADDR"];?>で正しく自動取得できています。
そのIPアドレスのPC使用者を別テーブルBからとってきてAテーブルのYフィールドに入力したいのですが、
YフィールドをLast(B:PC使用者)という計算フィールドにすると、PHPで表示することが出来ません。
そこでYを計算フィールドではなく、テキストフィールドにし、入力値の自動化の計算値でLast(B:PC使用者)とすると
Xが入力されてもPHP上では計算されずYフィールドに反映されません。
Filemaker上でXに入力するとYフィールドに反映されます。
(計算フィールドの際はXにIPアドレスが自動取得され入力されると随時計算され更新される)
計算フィールドがPHP上で表示できるようになればいいのですが、その方法がわからず・・・。
<?php echo nl2br(storeFieldNames('Y', 0, $record, true, 'EDITTEXT', 'text'))?>
では計算フィールドが表示されないのですが、計算フィールドの際は特別な書き方があるのでしょうか??
Yを表示したフォームでXに入力して送信してるのでは?
Yも同時に送信されて自動入力の値を上書きしてるケースのような。
YをXより先に送信されるように配置するか、入力する必要はないのでEDITTEXTにしなければいいと思いますが。
Offline
問題点が少しずれていました。
計算フィールドが表示できないのではなく、他のファイルからリレーションを貼った場合の計算フィールドが表示されないみたいです。
Bテーブルは他のファイルなのですが、PHPでは他のファイルを参照できないのでしょうか?
アクセス権があってレイアウトにあれば参照できるはずでは。
ゲストユーザーに完全アクセス権を持たせ、レイアウトにもあるのですが参照できないようです。
計算フィールドを使うのはあきらめて、
テキストフィールドの自動入力の計算値で表示させようと思います。
Yを表示したフォームでXに入力して送信してるのでは?
Yも同時に送信されて自動入力の値を上書きしてるケースのような。
Xの入力画面にYは表示していないのですが、PHPでXに入力してもYの計算を行うトリガにはならないのでしょうか。
何かYを再計算するようなものを入力と表示の間に噛ませないといけないのでしょうか。
バージョンが12じゃないですよね?
計算フィールドでBを参照できなければ、同じ式で自動入力させようとしても参照できないでしょう。
フィールド設定の後レコード確定してみるとか?
環境を書いていなくてすみません。
FileMaker Pro 11 Advancedです。
ルックアップも出来ないので、PHPでは別ファイルは参照できないようです。
フィールド設定の後レコード確定とは具体的にはどのようなことをすればよいのでしょうか?
<input type="submit" class="buttons" name="-edit" value="保存">の前に何かすればよいのでしょうか?
storeFieldNames()という関数が見慣れないのですが、普通は
echo $record->getField("Y");
じゃないですか?
storeFieldNames()を使うと、うちでは関数が見つからないエラーになります。
Offline
storeFieldNames()は、APIには無いので、サイトアシスタントのもの(FM12で廃止)でしょう。
name="-edit" で呼び出すファイルで、入力データを保存後にレコードを検索すればいいんですが
FM11SのドキュメントはWEB上に無いのでよくわからない。
storeFieldNames()という関数が見慣れないのですが、普通は
echo $record->getField("Y");
じゃないですか?
PHP Site Assistant で生成したコードがstoreFieldNames()だったのでそのまま使っています。
特にecho $record->getField("Y");との違いが感じなかったのですが、
普通は使えないのでしょうか???
使えないってことは無いですけど、APIのドキュメントにないので生成したコードを見ないと動作がわかりません。
Xの入力画面にYは表示していない
レイアウトにはあるんじゃないですか?これでYがフィールド設定されないのかどうかもわからないです。FMS11の環境持ってないのですいません。
APIなら、FileMaker_Command_Editをexecute()した結果からgetFirstRecord () してgetField("Y")する、とかになるんでしょうけど
12のしか手元にないので11だと少し違うかも
単純にファイルBが参照できてない節もあるんで、PHPアクセス権の設定は確認しました?
Site Assistant はオワコンなのと、最初に見た時、中身が冗長に見えたので使ってないです。
<form>の中で使ってるのかな? それならXを入力してサーバーへ送信するスクリプトの中でページをリロードしないとダメだと思います。
サーバーのデータ書き換えはうまく行ってますか?
Offline
Pages: 1
[ Generated in 0.019 seconds, 7 queries executed - Memory usage: 532.07 KiB (Peak: 552.61 KiB) ]