Location: PHPKode > projects > Runemaster > docs/form.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第4章 フォーム</title>
<link rel="stylesheet" href="style.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="index.html" title="Runemaster マニュアル">
<link rel="up" href="index.html" title="Runemaster マニュアル">
<link rel="prev" href="template.variable.evaluation.html" title="3.3. 条件判定 (if)">
<link rel="next" href="template.form.select.element.html" title="4.2. セレクト要素の操作">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">第4章 フォーム</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="template.variable.evaluation.html">前のページ</a> </td>
<th width="60%" align="center"> </th>
<td width="20%" align="right"> <a accesskey="n" href="template.form.select.element.html">次のページ</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="chapter" lang="ja">
<div class="titlepage"><div><div><h2 class="title">
<a name="form"></a>第4章 フォーム</h2></div></div></div>
<div class="toc">
<p><b>目次</b></p>
<dl>
<dt><span class="section"><a href="form.html#template.form.value">4.1. フォーム内の各要素への処理</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="form.html#form.value.setting">4.1.1. フォーム要素への値のセット</a></span></dt>
<dt><span class="section"><a href="form.html#form.value.setting">4.1.2. フォーム値のエスケープ処理</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="template.form.select.element.html">4.2. セレクト要素の操作</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="template.form.select.element.html#select.options.setting">4.2.1. オプションリストを設定する</a></span></dt>
<dt><span class="section"><a href="template.form.select.element.html#set.value.with.option.list">4.2.2. オプションリストを設定した要素を選択状態にする</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="template.form.hidden.element.html">4.3. Hidden (隠し) データ</a></span></dt>
<dd><dl><dt><span class="section"><a href="template.form.hidden.element.html#hidden.value.setting">4.3.1. Hidden データを挿入する</a></span></dt></dl></dd>
</dl>
</div>
<div class="section" lang="ja">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="template.form.value"></a>4.1. フォーム内の各要素への処理</h2></div></div></div>
<div class="section" lang="ja">
<div class="titlepage"><div><div><h3 class="title">
<a name="form.value.setting"></a>4.1.1. フォーム要素への値のセット</h3></div></div></div>
<p>
      HTML ページのフォームには &lt;INPUT&gt;, &lt;SELECT&gt; といった様々な要素が存在しており、
      その要素の内容や種類 (type) にあわせて value 属性や checked 属性、
      selected 属性といった適当な属性に対して値を設定することで、
      目的に沿った入力フォームフィールドを表現しています。
    </p>
<p>
      これら異なる方法によって表現されるフォーム要素の値も、
      Runemaster を使えばとても簡単にセットすることができます。
    </p>
<p>
      フォーム要素の値をセットするために、テンプレート側フォームの
      HTML は特別な記述をすることはほとんどありません。
      値を適応したいフォーム (&lt;FORM&gt;)、および要素に対して name 属性で名称を付与する程度です。
      これは HTML ページ上に入力フォームを作成する際に、
      当然のように行っているであろう HTML 記述でしょう。
    </p>
<pre class="programlisting">
&lt;form name="form1"&gt;
  &lt;input type="text" name="email" /&gt;
&lt;/form&gt;</pre>
<p>
      一方プログラムでは、各要素の name 属性に対応する形で値を設定します。
      なおここでは、前節までに登場したテンプレート変数とは異なる「フォーム値」として、
      setFormValue メソッドを利用して値を設定することになります。
      setFormValue メソッドの第一パラメータには &lt;FORM&gt; に設定した
      name 属性の値をセットし、第二パラメータには各要素の name 属性の値をプロパティとしたオブジェクト、もしくはキーとした連想配列のどちらかをセットします。
    </p>
<pre class="programlisting">
$formValue = new stdClass();
$formValue-&gt;email = 'hide@address.com';

$master-&gt;setFormValue('form1', $formValue);
$master-&gt;cast('example');</pre>
<p>
      以上のコードを実行すると、次のような結果を得ることができます。
      今回の例では、種類がテキスト (type="text") である場合の
      &lt;INPUT&gt; 要素の値として 自動的に value 属性が追加され、
      またその属性の値としてプログラム上でセットされたものが利用されています。
    </p>
<pre class="programlisting">
&lt;form name="form1"&gt;
  &lt;input type="text" name="email" value="hide@address.com"/&gt;
&lt;/form&gt;</pre>
<p>
      またラジオボタンとして表現されている要素に対して、
      その要素をチェック状態にしたい場合も、先ほどの例とはほとんど違いはありません。
    </p>
<pre class="programlisting">
&lt;form name="form1"&gt;
  &lt;input type="radio" name="item" value="1" /&gt;杖
  &lt;input type="radio" name="item" value="2" /&gt;書物
&lt;/form&gt;</pre>
<p>
      このようなラジオボタンが準備されているフォームにて「杖」側の要素をチェック状態にする場合、
      プログラムではフォーム値の item を 1 としてセットします。
    </p>
<pre class="programlisting">
$master = new Rune_Master('/path/to/templateDirectory');

$formValue = new stdClass();
$formValue-&gt;item = 1;

$master-&gt;setFormValue('form1', $formValue);
$master-&gt;cast('example');</pre>
<p>
      以上のコードの実行結果は次のようになります。
      テキストの例とは異なり、ラジオボタン値として value="1" の要素へ
      checked 属性が追加されます。
    </p>
<pre class="programlisting">
&lt;form name="form1"&gt;
  &lt;input type="radio" name="item" value="1" checked="checked" /&gt;杖
  &lt;input type="radio" name="item" value="2" /&gt;書物
&lt;/form&gt;</pre>
</div>
<div class="section" lang="ja">
<div class="titlepage"><div><div><h3 class="title">
<a name="form.value.setting"></a>4.1.2. フォーム値のエスケープ処理</h3></div></div></div>
<p>
      テンプレート変数と同様、
      setFormValue メソッドによってセットされたフォーム値は、
      自動的にHTML エンティティに変換する処理が自動的に行われます。
      これにより、思いがけない形でスクリプトが不正に実行されるといった問題を未然に防ぐことができます。
    </p>
<div class="example">
<a name="id343111"></a><p class="title"><b>例 4.1. フォーム値のHTMLエンティティ変換</b></p>
<div class="example-contents"><div class="variablelist"><dl>
<dt><span class="term">PHP コード</span></dt>
<dd><pre class="programlisting">
/* onkeydown 属性を紛れ込ませようとする */
$formValue-&gt;email = '" onkeydown="alert(\'hello\')';

$master-&gt;setFormValue($formValue);
$master-&gt;cast('example');</pre></dd>
<dt><span class="term">実行結果</span></dt>
<dd><pre class="programlisting">
&lt;form name="form1"&gt;
  &lt;input type="text" name="email" value="&amp;quot; onkeydown=&amp;quot;alert(&amp;#039;hello&amp;#039;)" /&gt;
&lt;/form&gt;</pre></dd>
</dl></div></div>
</div>
<br class="example-break"><p>
      なおテンプレート変数とは異なる点として、フォーム値に対して変換処理を行わないようにすることができないようになっています。
    </p>
</div>
</div>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="template.variable.evaluation.html">前のページ</a> </td>
<td width="20%" align="center"> </td>
<td width="40%" align="right"> <a accesskey="n" href="template.form.select.element.html">次のページ</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">3.3. 条件判定 (if) </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">ホーム</a></td>
<td width="40%" align="right" valign="top"> 4.2. セレクト要素の操作</td>
</tr>
</table>
</div>
</body>
</html>
Return current item: Runemaster