http urlから別のcfmページに変数の値を送信していますが、他のページでその値を取得する方法がわかりません。PHPでは$_GET['variable']
;を使用します。何がColdFusionに相当するのかわかりません。
5 に答える
ColdFusion には、PHP で行っているように、これらの変数にアクセスするオプションがあります。
PHP:
$foo = $_GET['variablename'];
$bar = $_POST['variablename'];
CFスクリプト:
foo = URL['variablename'];
bar = FORM['variablename'];
CFML:
<cfset foo = URL['variablename']>
<cfset bar = FORM['variablename']>
編集: Form Scope Case Insensitivity の議論と回避策
ColdFusion は、フォーム スコープ内ですべてのフォーム フィールド名を大文字に変換します。フィールド名が繰り返される場合、複数の値が単一のコンマ区切り値にマージされます。フォーム自体を制御できない場合、不満が生じる可能性があります。
与えられたフォーム:
<form name="main" action="handler.cfm" method="post">
<input type="text" name="conFUSion" value="abc" />
<input type="text" name="CONfusion" value="def" />
<input type="submit" name="Submit" />
</form>
受信ページのフォーム スコープは次のようになります。
ただしgethttprequestdata().content
、投稿された元のフォームの大文字と小文字が保持されたフィールドと値に直接アクセスするために使用できます。
conFUSion=abc&CONfusion=def&Submit=送信
ColdFusion 構造体では大文字と小文字が区別されないため、この文字列を単純に解析して通常の構造体にすることはできません。代わりにjava.util.HashMap
、ColdFusion 構造体に非常によく似ていますが、大文字と小文字が保持されます。
arFormscope = gethttprequestdata().content.split('&');
cs_form = createobject('java','java.util.HashMap').init();
for( i=1; i<=arraylen(arFormscope); i++ ){
arElement = arFormscope[i].split('=');
key = arElement[1];
value = arElement[2];
cs_form[key] = value;
}
cs_form
ハッシュマップをダンプすると、次のようになります。
...そして最後に:
cs_form['CONfusion']; // def
cs_form['conFUSion']; // abc
cs_form['CONFUSION']; // Error, undefined in java.util.HashMap
#URL.variable#
GETに使用します。#FORM.variable#
POSTに使用します。
十分な答えがありますが、構造体キーにアクセスするための連想配列表記の優れた点の 1 つは、構文的に無効なキーにアクセスできることです。したがって、次のような test.cfm というページを作成したとします。
<cfdump var="#url#">
<cfoutput>
#url['bad bad var name']#<br />
</cfoutput>
そしてそれを次のように呼び出しました:
http://localhost/test.cfm?bad bad var name=foo
ページに「foo」の出力が表示されます。
しかし、これを試した場合:
<cfdump var="#url#">
<cfoutput>
#url.bad bad var name#
</cfoutput>
次のように表示されます。
3 行目の 10 列目に無効な CFML 構造が見つかりました。ColdFusion は次のテキストを参照していました。
悪い
変数名にスペースを含めることはできないためです。
もちろん、意図的にスペースを含む URL パラメータに名前を付ける人はいないでしょう (希望します) が、これは、クエリなどの場合に便利であり、外部データは開発者が直接制御することはできません。
を使用してそれらにアクセスできます#url.variable#
。たとえば、PHPでは次のように$_GET['id']
なり、CFでは次のようになります。#url.id#
私は以前coldfusion 7でこれをやったことがあります。
cgi.query_string 値を使用してクエリ文字列を取得し、次のように分割できます。
httpGetValues = createobject('java','java.util.HashMap').init();
nameValuePairs = cgi.query_string.split('&');
for( i=1; i lte arraylen(nameValuePairs); i = i + 1 ){
pair= nameValuePairs[i].split('=');
key = URLDecode(pair[1], "UTF-8");
value = URLDecode(pair[2], "UTF-8");
httpGetValues[key] = value;
}
必ず値をデコードしてください。