表单辅助函数

表单辅助函数包含了一些函数用于帮助你处理表单。

加载辅助函数

使用下面的代码来加载表单辅助函数:

  1. $this->load->helper('form');

对域值转义

你可能会需要在表单元素中使用 HTML 或者诸如引号这样的字符,为了安全性,你需要使用 通用函数html_escape()

考虑下面这个例子:

  1. $string = 'Here is a string containing "quoted" text.';
  2.  
  3. <input type="text" name="myfield" value="<?php echo $string; ?>" />

因为上面的字符串中包含了一对引号,它会破坏表单,使用 html_escape()函数可以对 HTML 的特殊字符进行转义,从而可以安全的在域值中使用字符串:

  1. <input type="text" name="myfield" value="<?php echo html_escape($string); ?>" />

注解

如果你使用了这个页面上介绍的任何一个函数,表单的域值会被自动转义,所以你无需再调用这个函数。只有在你创建自己的表单元素时需要使用它。

可用函数

该辅助函数有下列可用函数:

  • formopen([$action = ''[, $attributes = ''[, $hidden = array()_]]])

参数:

  • $action (string) — Form action/target URI string
  • $attributes (array) — HTML attributes
  • $hidden (array) — An array of hidden fields' definitions返回:An HTML form opening tag返回类型:string

生成一个 form 起始标签,并且它的 action URL 会根据你的配置文件自动生成。你还可以给表单添加属性和隐藏域,另外,它还会根据你配置文件中的字符集参数自动生成 accept-charset 属性。

使用该函数来生成标签比你自己写 HTML 代码最大的好处是:当你的 URL 变动时,它可以提供更好的可移植性。

这里是个简单的例子:

  1. echo form_open('email/send');

上面的代码会创建一个表单,它的 action 为根 URL 加上 "email/send",向下面这样:

  1. <form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send">

添加属性

可以通过第二个参数传递一个关联数组来添加属性,例如:

  1. $attributes = array('class' => 'email', 'id' => 'myform');echo form_open('email/send', $attributes);

另外,第二个参数你也可以直接使用字符串:

  1. echo form_open('email/send', 'class="email" id="myform"');

上面的代码会创建一个类似于下面的表单:

  1. <form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send&#34; class="email" id="myform">

添加隐藏域

可以通过第三个参数传递一个关联数组来添加隐藏域,例如:

  1. $hidden = array('username' => 'Joe', 'member_id' => '234');echo form_open('email/send', '', $hidden);

你可以使用一个空值跳过第二个参数。

上面的代码会创建一个类似于下面的表单:

  1. <form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send"&gt; <input type="hidden" name="username" value="Joe" /> <input type="hidden" name="member_id" value="234" />
  • formopen_multipart([$action = ''[, $attributes = array()[, $hidden = array()_]]])

参数:

  • $action (string) — Form action/target URI string
  • $attributes (array) — HTML attributes
  • $hidden (array) — An array of hidden fields' definitions返回:An HTML multipart form opening tag返回类型:string

这个函数和上面的 form_open() 函数完全一样,只是它会给表单添加一个 multipart 属性,在你使用表单上传文件时必须使用它。

  • formhidden($name[, $value = ''_])

参数:

  • $name (string) — Field name
  • $value (string) — Field value返回:An HTML hidden input field tag返回类型:string

生成隐藏域。你可以使用名称和值两个参数来创建一个隐藏域:

  1. form_hidden('username', 'johndoe');
  2. // Would produce: <input type="hidden" name="username" value="johndoe" />

… 或者你可以使用一个关联数组,来生成多个隐藏域:

  1. $data = array(
  2. 'name' => 'John Doe',
  3. 'email' => 'john@example.com',
  4. 'url' => 'http://example.com'
  5. );
  6.  
  7. echo form_hidden($data);
  8.  
  9. /*
  10. Would produce:
  11. <input type="hidden" name="name" value="John Doe" />
  12. <input type="hidden" name="email" value="john@example.com" />
  13. <input type="hidden" name="url" value="http://example.com" />
  14. */

你还可以向第二个参数传递一个关联数组:

  1. $data = array(
  2. 'name' => 'John Doe',
  3. 'email' => 'john@example.com',
  4. 'url' => 'http://example.com'
  5. );
  6.  
  7. echo form_hidden('my_array', $data);
  8.  
  9. /*
  10. Would produce:
  11.  
  12. <input type="hidden" name="my_array[name]" value="John Doe" />
  13. <input type="hidden" name="my_array[email]" value="john@example.com" />
  14. <input type="hidden" name="my_array[url]" value="http://example.com" />
  15. */

如果你想创建带有其他属性的隐藏域,可以这样:

  1. $data = array(
  2. 'type' => 'hidden',
  3. 'name' => 'email',
  4. 'id' => 'hiddenemail',
  5. 'value' => 'john@example.com',
  6. 'class' => 'hiddenemail'
  7. );
  8.  
  9. echo form_input($data);
  10.  
  11. /*
  12. Would produce:
  13.  
  14. <input type="hidden" name="email" value="john@example.com" id="hiddenemail" class="hiddenemail" />
  15. */
  • forminput([$data = ''[, $value = ''[, $extra = ''_]]])

参数:

  • $data (array) — Field attributes data
  • $value (string) — Field value
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML text input field tag返回类型:string

用于生成标准的文本输入框,你可以简单的使用文本域的名称和值:

  1. echo form_input('username', 'johndoe');

或者使用一个关联数组,来包含任何你想要的数据:

  1. $data = array(
  2. 'name' => 'username',
  3. 'id' => 'username',
  4. 'value' => 'johndoe',
  5. 'maxlength' => '100',
  6. 'size' => '50',
  7. 'style' => 'width:50%'
  8. );
  9.  
  10. echo form_input($data);
  11.  
  12. /*
  13. Would produce:
  14.  
  15. <input type="text" name="username" value="johndoe" id="username" maxlength="100" size="50" style="width:50%" />
  16. */

如果你还希望能包含一些额外的数据,例如 JavaScript ,你可以通过第三个参数传一个字符串:

  1. $js = 'onClick="some_function()"';
  2. echo form_input('username', 'johndoe', $js);

Or you can pass it as an array:

  1. $js = array('onClick' => 'some_function();');
  2. echo form_input('username', 'johndoe', $js);
  • formpassword([$data = ''[, $value = ''[, $extra = ''_]]])

参数:

  • $data (array) — Field attributes data
  • $value (string) — Field value
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML password input field tag返回类型:string

该函数和上面的 form_input() 函数一样,只是生成的输入框为 "password" 类型。

  • formupload([$data = ''[, $value = ''[, $extra = ''_]]])

参数:

  • $data (array) — Field attributes data
  • $value (string) — Field value
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML file upload input field tag返回类型:string

该函数和上面的 form_input() 函数一样,只是生成的输入框为 "file" 类型,可以用来上传文件。

  • formtextarea([$data = ''[, $value = ''[, $extra = ''_]]])

参数:

  • $data (array) — Field attributes data
  • $value (string) — Field value
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML textarea tag返回类型:string

该函数和上面的 form_input() 函数一样,只是生成的输入框为 "textarea" 类型。

注解

对于 textarea 类型的输入框,你可以使用 rowscols 属性,来代替上面例子中的 maxlengthsize 属性。

  • formdropdown([$name = ''[, $options = array()[, $selected = array()[, $extra = ''_]]]])

参数:

  • $name (string) — Field name
  • $options (array) — An associative array of options to be listed
  • $selected (array) — List of fields to mark with the selected attribute
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML dropdown select field tag返回类型:string

用于生成一个标准的下拉框域。第一个参数为域的名称,第二个参数为一个关联数组,包含所有的选项,第三个参数为你希望默认选中的值。你也可以把第三个参数设置成一个包含多个值的数组,CodeIgniter 将会为你生成多选下拉框。

例如:

  1. $options = array(
  2. 'small' => 'Small Shirt',
  3. 'med' => 'Medium Shirt',
  4. 'large' => 'Large Shirt',
  5. 'xlarge' => 'Extra Large Shirt',
  6. );
  7.  
  8. $shirts_on_sale = array('small', 'large');
  9. echo form_dropdown('shirts', $options, 'large');
  10.  
  11. /*
  12. Would produce:
  13.  
  14. <select name="shirts">
  15. <option value="small">Small Shirt</option>
  16. <option value="med">Medium Shirt</option>
  17. <option value="large" selected="selected">Large Shirt</option>
  18. <option value="xlarge">Extra Large Shirt</option>
  19. </select>
  20. */
  21.  
  22. echo form_dropdown('shirts', $options, $shirts_on_sale);
  23.  
  24. /*
  25. Would produce:
  26.  
  27. <select name="shirts" multiple="multiple">
  28. <option value="small" selected="selected">Small Shirt</option>
  29. <option value="med">Medium Shirt</option>
  30. <option value="large" selected="selected">Large Shirt</option>
  31. <option value="xlarge">Extra Large Shirt</option>
  32. </select>
  33. */

如果你希望为起始标签

  • formmultiselect([$name = ''[, $options = array()[, $selected = array()[, $extra = ''_]]]])

参数:

  • $name (string) — Field name
  • $options (array) — An associative array of options to be listed
  • $selected (array) — List of fields to mark with the selected attribute
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML dropdown multiselect field tag返回类型:string

用于生成一个标准的多选下拉框。第一个参数为域的名称,第二个参数为一个关联数组,包含所有的选项,第三个参数为你希望默认选中的一个或多个值。

参数的用法和上面的 form_dropdown() 函数一样,只是域的名称需要使用数组语法,例如:foo[]

  • formfieldset([$legendtext = ''[, $attributes = array()]])

参数:

  • $legend_text (string) — Text to put in the tag
  • $attributes (array) — Attributes to be set on the
    tag返回:An HTML fieldset opening tag返回类型:string

用于生成 fieldset 和 legend 域。

例如:

  1. echo form_fieldset('Address Information');
  2. echo "<p>fieldset content here</p>\n";
  3. echo form_fieldset_close();
  4.  
  5. /*
  6. Produces:
  7.  
  8. <fieldset>
  9. <legend>Address Information</legend>
  10. <p>form content here</p>
  11. </fieldset>
  12. */

和其他的函数类似,你也可以通过给第二个参数传一个关联数组来添加额外的属性:

  1. $attributes = array(
  2. 'id' => 'address_info',
  3. 'class' => 'address_info'
  4. );
  5.  
  6. echo form_fieldset('Address Information', $attributes);
  7. echo "<p>fieldset content here</p>\n";
  8. echo form_fieldset_close();
  9.  
  10. /*
  11. Produces:
  12.  
  13. <fieldset id="address_info" class="address_info">
  14. <legend>Address Information</legend>
  15. <p>form content here</p>
  16. </fieldset>
  17. */

  • formfieldset_close([$extra = ''_])

参数:

  • $extra (string) — Anything to append after the closing tag, as is返回:An HTML fieldset closing tag返回类型:string

用于生成结束标签 ,使用这个函数唯一的一个好处是,它可以在结束标签的后面加上一些其他的数据。例如:

  1. $string = '</div></div>';
  2. echo form_fieldset_close($string);
  3. // Would produce: </fieldset></div></div>
  • formcheckbox([$data = ''[, $value = ''[, $checked = FALSE[, $extra = ''_]]]])

参数:

  • $data (array) — Field attributes data
  • $value (string) — Field value
  • $checked (bool) — Whether to mark the checkbox as being checked
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML checkbox input tag返回类型:string

用于生成一个复选框,例如:

  1. echo form_checkbox('newsletter', 'accept', TRUE);
  2. // Would produce: <input type="checkbox" name="newsletter" value="accept" checked="checked" />

第三个参数为布尔值 TRUE 或 FALSE ,用于指定复选框默认是否为选定状态。

和其他函数一样,你可以传一个属性的数组给它:

  1. $data = array(
  2. 'name' => 'newsletter',
  3. 'id' => 'newsletter',
  4. 'value' => 'accept',
  5. 'checked' => TRUE,
  6. 'style' => 'margin:10px'
  7. );
  8.  
  9. echo form_checkbox($data);
  10. // Would produce: <input type="checkbox" name="newsletter" id="newsletter" value="accept" checked="checked" style="margin:10px" />

另外,如果你希望向标签中添加额外的数据如 JavaScript ,也可以传一个字符串给第四个参数:

  1. $js = 'onClick="some_function()"';
  2. echo form_checkbox('newsletter', 'accept', TRUE, $js);

Or you can pass it as an array:

  1. $js = array('onClick' => 'some_function();');
  2. echo form_checkbox('newsletter', 'accept', TRUE, $js);
  • formradio([$data = ''[, $value = ''[, $checked = FALSE[, $extra = ''_]]]])

参数:

  • $data (array) — Field attributes data
  • $value (string) — Field value
  • $checked (bool) — Whether to mark the radio button as being checked
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML radio input tag返回类型:string

该函数和 form_checkbox() 函数完全一样,只是它生成的是单选框。

  • formlabel([$labeltext = ''[, $id = ''[, $attributes = array()]]])

参数:

  • $label_text (string) — Text to put in the
  • $id (string) — ID of the form element that we're making a label for
  • $attributes (mixed) — HTML attributes返回:An HTML field label tag返回类型:string

生成

  1. echo form_label('What is your Name', 'username');
  2. // Would produce: <label for="username">What is your Name</label>

和其他的函数一样,如果你想添加额外的属性的话,可以传一个关联数组给第三个参数。

例如:

  1. $attributes = array(
  2. 'class' => 'mycustomclass',
  3. 'style' => 'color: #000;'
  4. );
  5.  
  6. echo form_label('What is your Name', 'username', $attributes);
  7. // Would produce: <label for="username" class="mycustomclass" style="color: #000;">What is your Name</label>

  • formsubmit([$data = ''[, $value = ''[, $extra = ''_]]])

参数:

  • $data (string) — Button name
  • $value (string) — Button value
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML input submit tag返回类型:string

用于生成一个标准的提交按钮。例如:

  1. echo form_submit('mysubmit', 'Submit Post!');
  2. // Would produce: <input type="submit" name="mysubmit" value="Submit Post!" />

和其他的函数一样,如果你想添加额外的属性的话,可以传一个关联数组给第一个参数,第三个参数可以向表单添加额外的数据,例如 JavaScript 。

  • formreset([$data = ''[, $value = ''[, $extra = ''_]]])

参数:

  • $data (string) — Button name
  • $value (string) — Button value
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML input reset button tag返回类型:string

用于生成一个标准的重置按钮。用法和 form_submit() 函数一样。

  • formbutton([$data = ''[, $content = ''[, $extra = ''_]]])

参数:

  • $data (string) — Button name
  • $content (string) — Button label
  • $extra (mixed) — Extra attributes to be added to the tag either as an array or a literal string返回:An HTML button tag返回类型:string

用于生成一个标准的按钮,你可以简单的使用名称和内容来生成按钮:

  1. echo form_button('name','content');
  2. // Would produce: <button name="name" type="button">Content</button>

或者使用一个关联数组,来包含任何你想要的数据:

  1. $data = array(
  2. 'name' => 'button',
  3. 'id' => 'button',
  4. 'value' => 'true',
  5. 'type' => 'reset',
  6. 'content' => 'Reset'
  7. );
  8.  
  9. echo form_button($data);
  10. // Would produce: <button name="button" id="button" value="true" type="reset">Reset</button>

如果你还希望能包含一些额外的数据,例如 JavaScript ,你可以通过第三个参数传一个字符串:

  1. $js = 'onClick="some_function()"';
  2. echo form_button('mybutton', 'Click Me', $js);
  • formclose([$extra = ''_])

参数:

  • $extra (string) — Anything to append after the closing tag, as is返回:An HTML form closing tag返回类型:string

用于生成结束标签 ,使用这个函数唯一的一个好处是,它可以在结束标签的后面加上一些其他的数据。例如:

$string = '</div></div>';echo form_close($string);// Would produce: </form> </div></div>
  • setvalue($field[, $default = ''[, $htmlescape = TRUE]])

参数:

  • $field (string) — Field name
  • $default (string) — Default value
  • $html_escape (bool) — Whether to turn off HTML escaping of the value返回:Field value返回类型:string

用于你显示 input 或者 textarea 类型的输入框的值。你必须在第一个参数中指定名称,第二个参数是可选的,允许你设置一个默认值,第三个参数也是可选,可以禁用对值的转义,当你在和 form_input() 函数一起使用时,可以避免重复转义。

例如:

  1. <input type="text" name="quantity" value="<?php echo set_value('quantity', '0'); ?>" size="50" />

当上面的表单元素第一次加载时将会显示“0”。

注解

If you've loaded the 表单验证类 andhave set a validation rule for the field name in use with this helper, then it willforward the call to the 表单验证类'sown set_value() method. Otherwise, this function looks in $_POST for thefield value.

  • setselect($field[, $value = ''[, $default = FALSE_]])

参数:

  • $field (string) — Field name
  • $value (string) — Value to check for
  • $default (string) — Whether the value is also a default one返回:'selected' attribute or an empty string返回类型:string

如果你使用

  • setcheckbox($field[, $value = ''[, $default = FALSE_]])

参数:

  • $field (string) — Field name
  • $value (string) — Value to check for
  • $default (string) — Whether the value is also a default one返回:'checked' attribute or an empty string返回类型:string

允许你显示一个处于提交状态的复选框。

第一个参数必须包含此复选框的名称,第二个参数必须包含它的值,第三个参数是可选的,用于设置复选框是否为默认选中状态(TRUE / FALSE)。

例如:

  1. <input type="checkbox" name="mycheck" value="1" <?php echo set_checkbox('mycheck', '1'); ?> />
  2. <input type="checkbox" name="mycheck" value="2" <?php echo set_checkbox('mycheck', '2'); ?> />
  • setradio($field[, $value = ''[, $default = FALSE_]])

参数:

  • $field (string) — Field name
  • $value (string) — Value to check for
  • $default (string) — Whether the value is also a default one返回:'checked' attribute or an empty string返回类型:string

允许你显示那些处于提交状态的单选框。该函数和上面的 set_checkbox() 函数一样。

例如:

  1. <input type="radio" name="myradio" value="1" <?php echo set_radio('myradio', '1', TRUE); ?> />
  2. <input type="radio" name="myradio" value="2" <?php echo set_radio('myradio', '2'); ?> />

注解

如果你正在使用表单验证类,你必须为你的每一个表单域指定一个规则,即使是空的,这样可以确保 set*() 函数能正常运行。这是因为如果定义了一个表单验证对象,set*() 函数的控制权将移交到表单验证类,而不是辅助函数函数。

  • formerror([$field = ''[, $prefix = ''[, $suffix = ''_]]])

参数:

  • $field (string) — Field name
  • $prefix (string) — Error opening tag
  • $suffix (string) — Error closing tag返回:HTML-formatted form validation error message(s)返回类型:string

表单验证类 返回验证错误消息,并附上验证出错的域的名称,你可以设置错误消息的起始和结束标签。

例如:

  1. // Assuming that the 'username' field value was incorrect:
  2. echo form_error('myfield', '<div class="error">', '</div>');
  3.  
  4. // Would produce: <div class="error">Error message associated with the "username" field.</div>
  • validationerrors([$prefix = ''[, $suffix = ''_]])

参数:

  • $prefix (string) — Error opening tag
  • $suffix (string) — Error closing tag返回:HTML-formatted form validation error message(s)返回类型:string

form_error() 函数类似,返回所有 表单验证类生成的错误信息,你可以为为每个错误消息设置起始和结束标签。

例如:

  1. echo validation_errors('<span class="error">', '</span>');
  2.  
  3. /*
  4. Would produce, e.g.:
  5.  
  6. <span class="error">The "email" field doesn't contain a valid e-mail address!</span>
  7. <span class="error">The "password" field doesn't match the "repeat_password" field!</span>
  8.  
  9. */
  • formprep($str_)

参数:

  • $str (string) — Value to escape返回:Escaped value返回类型:string

允许你在表单元素中安全的使用 HTML 和例如引号这样的字符,而不用担心对表单造成破坏。

注解

如果你使用了这个页面上介绍的任何一个函数,表单的域值会被自动转义,所以你无需再调用这个函数。只有在你创建自己的表单元素时需要使用它。

注解

该函数已经废弃,现在只是 通用函数html_escape()的一个别名,请使用 html_escape() 代替它。