HTMLであるページから別のページに遷移する際にはページリンク(<a href="リンク先のページURL">リンクメッセージ</a>)を利用するのが一般的ですが、そのリンクにパラメーター(変数=値)を付けてリンク先に渡すことができます。ColdFusionでは、リンク先で渡されてきたパラメーターをURL変数として利用することができます。ページのURLとパラメータを区別するのに、クエスチョンマーク(?)を使用します。
▲左画面の社員一覧(list.cfm)から右画面の社員詳細(detail.cfm)へのHTMLリンクを例にして解説します。左画面では必要最低限の情報をまとめて一覧で表示しています。ユーザーは、その一覧から希望する項目に貼られているリンクをクリックすることによって、希望する情報の詳細を見ることができます。リンクを使って目的の情報を辿っていくやり方は、Webサイトのナビゲーションとして良く行われる方法です(オンラインショップや宿の予約、キーワード検索など、Webブラウザを使ったさまざまな操作の中で多くのサイトがこの方法を使ってページを作っていることに気づくかと思います)。
従来の静的HTMLでは、項目の数だけ詳細をページを作らないといけず、非常に手間がかかる作業です。そこでColdFusionをはじめとするWebアプリケーションの多くでは、詳細ページへのリンクは共通にして、個々のリンクを区別するためのパラメータを付加して、リンク先のページでどの項目をユーザーが選んだかを判別して、該当する詳細を表示するわけです。
上記の左画面の一覧部分を抜粋した例は下記となります。社員A〜Fのどの社員のリンクをクリックしても、いずれもdetail.cfmページへリンクすることが分かります。違いは付加されたパラメーター(empid)の値です。個々の社員に固有の値(例えば社員番号をベースにした値など)を割り当てることで、どの社員かをリンク先で判定します。
<h3>○○会社 社員一覧</h3> <a href="detail.cfm?empid=101">社員A</a><br> <a href="detail.cfm?empid=102">社員B</a><br> <a href="detail.cfm?empid=103">社員C</a><br> <a href="detail.cfm?empid=104">社員D</a><br> <a href="detail.cfm?empid=105">社員E</a><br> <a href="detail.cfm?empid=106">社員F</a><br>
パラメーターを動的に指定する場合の例は下記となります。下記は、EMPLOYEEテーブルの中から empid と nameの列を取得し、それをもとに一覧を作成しています。
<cfquery name="qEmpList" datasource="XXXXX"> SELECT empid, name FROM EMPLOYEE ORDER BY empid </cfquery> <h3>○○会社 社員一覧</h3> <cfoutput query="qEmpList"> <a href="detail.cfm?empid=#qEmpList.empid#">#qEmpList.name#</a><br> </cfoutput>
リンク先で渡された値はURL変数として利用することができます。URL変数を呼び出す際は、渡されてきたパラメーターの名前を変数名として頭に「URL.」を付けます。上記の例では、渡されてきたパラメーターを使ってデータベースからデータを取得し、取得した詳細は画面に表示しています。
<cfquery name="qEmp" datasource="XXXXX"> SELECT * FROM EMPLOYEE WHERE EMPID = <cfqueryparam cfsqltype="cf_sql_integer" value="#Url.empid#"> </cfquery> <cfoutput query="qEmp"> <h3>#qEmp.name# 社員詳細</h3> <table> ... データベースから取得した詳細情報を画面に表示 ... </table> </cfoutput>
URL変数もForm変数と同じく、あるページから別のページに変数の値を渡すのに便利ですが、注意も必要です。下記はリンク先の詳細ページの画面例ですが URLのアドレスには、パラメーター名も値も記載された状態で表示されています。つまり、URL変数はURLアドレスの機能を用いて値を渡しているため、ユーザーの目に付きやすいだけでなく、ユーザーによって値を変えられやすいという点にも注意が必要です。
▲上記は、社員番号102、社員Bさんの詳細を画面に表示しています。これだと、URLアドレスに含まれる empid の値 empid=102 を 101 や 104 に変えれば、他の社員情報も見れることが容易に想像できてしまいます。また、社員の一覧を画面に表示して、特定の社員情報を削除するプログラムを作った際、<a href="delete_employee.cfm?empid=105>社員削除</a>のように安易に社員番号を使っていると、ユーザーによってempidを103 や 106 などに変えられてしまうと、別の社員の社員情報も消されかねない事態を引き起こします。
他にも、クレジットカード番号や会員番号などをそのままURLパラメーターとして渡していると他の人にクレジットカード番号が知られたりURLの値を変えて他の人の情報を覗かれたりする可能性があります。それらセキュリティ問題を起こしかねない値をURLパラメーターには使用しないで下さい。また、必要に応じて値が適正かをチェックしたり、値を暗号化するなどを心がけて下さい。