Fix #1624 and clear-up the form validation docs (manually applying #1603)
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index 91f46b6..c1bf519 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -957,15 +957,15 @@
/**
* Match one field to another
*
- * @param string
- * @param string field
+ * @param string $str string to compare against
+ * @param string $field
* @return bool
*/
public function matches($str, $field)
{
- $validation_array = empty($this->validation_data) ? $_POST : $this->validation_data;
-
- return isset($validation_array[$field]) ? ($str === $validation_array[$field]) : FALSE;
+ return isset($this->_field_data[$field], $this->_field_data[$field]['postdata'])
+ ? ($str === $this->_field_data[$field]['postdata'])
+ : FALSE;
}
// --------------------------------------------------------------------
diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst
index 3d6538e..0d83242 100644
--- a/user_guide_src/source/changelog.rst
+++ b/user_guide_src/source/changelog.rst
@@ -386,6 +386,7 @@
- Fixed a bug (#1811) - :doc:`URI Library <libraries/uri>` didn't properly cache segments for ``uri_to_assoc()`` and ``ruri_to_assoc()``.
- Fixed a bug (#1506) - :doc:`Form Helpers <helpers/form_helper>` set empty *name* attributes.
- Fixed a bug (#59) - :doc:`Query Builder <database/query_builder>` method ``count_all_results()`` ignored the DISTINCT clause.
+- Fixed a bug (#1624) - :doc:`Form Validation Library <libraries/form_validation>` rule **matches** didn't property handle array field names.
Version 2.1.3
=============
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index 6c6743d..4d19402 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -254,30 +254,30 @@
Before moving on it should be noted that the rule setting function can
be passed an array if you prefer to set all your rules in one action. If
-you use this approach you must name your array keys as indicated::
+you use this approach, you must name your array keys as indicated::
$config = array(
- array(
- 'field' => 'username',
- 'label' => 'Username',
- 'rules' => 'required'
- ),
- array(
- 'field' => 'password',
- 'label' => 'Password',
- 'rules' => 'required'
- ),
- array(
- 'field' => 'passconf',
- 'label' => 'Password Confirmation',
- 'rules' => 'required'
- ),
- array(
- 'field' => 'email',
- 'label' => 'Email',
- 'rules' => 'required'
- )
- );
+ array(
+ 'field' => 'username',
+ 'label' => 'Username',
+ 'rules' => 'required'
+ ),
+ array(
+ 'field' => 'password',
+ 'label' => 'Password',
+ 'rules' => 'required'
+ ),
+ array(
+ 'field' => 'passconf',
+ 'label' => 'Password Confirmation',
+ 'rules' => 'required'
+ ),
+ array(
+ 'field' => 'email',
+ 'label' => 'Email',
+ 'rules' => 'required'
+ )
+ );
$this->form_validation->set_rules($config);
@@ -291,7 +291,6 @@
$this->form_validation->set_rules('password', 'Password', 'required|matches[passconf]');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
-
The above code sets the following rules:
@@ -560,11 +559,10 @@
#. **Set delimiters in a config file**
You can add your error delimiters in application/config/form_validation.php as follows::
-
+
$config['error_prefix'] = '<div class="error_prefix">';
$config['error_suffix'] = '</div>';
-
Showing Errors Individually
===========================
@@ -592,8 +590,8 @@
If there are no errors, nothing will be shown. If there is an error, the
message will appear.
-**Important Note:** If you use an array as the name of a form field, you
-must supply it as an array to the function. Example::
+.. important:: If you use an array as the name of a form field, you
+ must supply it as an array to the function. Example::
<?php echo form_error('options[size]'); ?>
<input type="text" name="options[size]" value="<?php echo set_value("options[size]"); ?>" size="50" />
@@ -603,20 +601,20 @@
Validating an Array (other than $_POST)
=======================================
-Sometimes you may want to validate an array that does not originate from $_POST data.
+Sometimes you may want to validate an array that does not originate from ``$_POST`` data.
In this case, you can specify the array to be validated::
-
+
$data = array(
- 'username' => 'johndoe',
- 'password' => 'mypassword',
- 'passconf' => 'mypassword'
- );
+ 'username' => 'johndoe',
+ 'password' => 'mypassword',
+ 'passconf' => 'mypassword'
+ );
$this->form_validation->set_data($data);
-Creating validation rules, running the validation and retrieving error messages works the same whether you are
-validating $_POST data or an array.
+Creating validation rules, running the validation and retrieving error messages works the
+same whether you are validating ``$_POST`` data or an array.
**Important Note:** If you want to validate more than one array during a single execution, then you should
call the reset_validation() function before setting up rules and validating the new array.
@@ -644,32 +642,32 @@
the validation array will have this prototype::
$config = array(
- array(
- 'field' => 'username',
- 'label' => 'Username',
- 'rules' => 'required'
- ),
- array(
- 'field' => 'password',
- 'label' => 'Password',
- 'rules' => 'required'
- ),
- array(
- 'field' => 'passconf',
- 'label' => 'Password Confirmation',
- 'rules' => 'required'
- ),
- array(
- 'field' => 'email',
- 'label' => 'Email',
- 'rules' => 'required'
- )
- );
+ array(
+ 'field' => 'username',
+ 'label' => 'Username',
+ 'rules' => 'required'
+ ),
+ array(
+ 'field' => 'password',
+ 'label' => 'Password',
+ 'rules' => 'required'
+ ),
+ array(
+ 'field' => 'passconf',
+ 'label' => 'Password Confirmation',
+ 'rules' => 'required'
+ ),
+ array(
+ 'field' => 'email',
+ 'label' => 'Email',
+ 'rules' => 'required'
+ )
+ );
Your validation rule file will be loaded automatically and used when you
-call the run() function.
+call the ``run()`` method.
-Please note that you MUST name your array $config.
+Please note that you MUST name your ``$config`` array.
Creating Sets of Rules
======================
@@ -729,45 +727,44 @@
Calling a Specific Rule Group
=============================
-In order to call a specific group you will pass its name to the run()
-function. For example, to call the signup rule you will do this::
+In order to call a specific group you will pass its name to the ``run()``
+method. For example, to call the signup rule you will do this::
if ($this->form_validation->run('signup') == FALSE)
{
- $this->load->view('myform');
+ $this->load->view('myform');
}
else
{
- $this->load->view('formsuccess');
+ $this->load->view('formsuccess');
}
Associating a Controller Function with a Rule Group
===================================================
An alternate (and more automatic) method of calling a rule group is to
-name it according to the controller class/function you intend to use it
+name it according to the controller class/method you intend to use it
with. For example, let's say you have a controller named Member and a
-function named signup. Here's what your class might look like::
+method named signup. Here's what your class might look like::
<?php
class Member extends CI_Controller {
- function signup()
- {
- $this->load->library('form_validation');
+ function signup()
+ {
+ $this->load->library('form_validation');
- if ($this->form_validation->run() == FALSE)
- {
- $this->load->view('myform');
- }
- else
- {
- $this->load->view('formsuccess');
- }
- }
+ if ($this->form_validation->run() == FALSE)
+ {
+ $this->load->view('myform');
+ }
+ else
+ {
+ $this->load->view('formsuccess');
+ }
+ }
}
- ?>
In your validation config file, you will name your rule group
member/signup::
@@ -913,6 +910,9 @@
to two parameters, where at least one is required (to pass
the field data).
+.. note:: When using the **matches** rule, the form item specified
+ to compare against must already be defined.
+
******************
Prepping Reference
******************
@@ -945,7 +945,7 @@
functions.
$this->form_validation->set_rules();
-======================================
+====================================
.. php:method:: set_rules ($field, $label = '', $rules = '')
@@ -953,7 +953,7 @@
:param string $label: The field label
:param mixed $rules: The rules, as a string with rules separated by a pipe "|", or an array or rules.
:rtype: Object
-
+
Permits you to set validation rules, as described in the tutorial
sections above:
@@ -961,19 +961,19 @@
- :ref:`saving-groups`
$this->form_validation->run();
-===============================
+==============================
.. php:method:: run ($group = '')
:param string $group: The name of the validation group to run
:rtype: Boolean
-
+
Runs the validation routines. Returns boolean TRUE on success and FALSE
on failure. You can optionally pass the name of the validation group via
the function, as described in: :ref:`saving-groups`
$this->form_validation->set_message();
-========================================
+======================================
.. php:method:: set_message ($lang, $val = '')
@@ -984,7 +984,7 @@
Permits you to set custom error messages. See :ref:`setting-error-messages`
$this->form_validation->set_data();
-========================================
+===================================
.. php:method:: set_data ($data = '')
@@ -996,13 +996,13 @@
$this->form_validation->reset_validation();
===========================================
- .. php:method:: reset_validation ()
+ .. php:method:: reset_validation ()
- Permits you to reset the validation when you validate more than one array.
- This function should be called before validating each new array.
+ Permits you to reset the validation when you validate more than one array.
+ This method should be called before validating each new array.
$this->form_validation->error_array();
-========================================
+======================================
.. php:method:: error_array ()
@@ -1021,7 +1021,7 @@
**do not** require you to prepend them with $this->form_validation.
form_error()
-=============
+============
Shows an individual error message associated with the field name
supplied to the function. Example::
@@ -1032,7 +1032,7 @@
:ref:`changing-delimiters` section above.
validation_errors()
-====================
+===================
Shows all error messages as a string: Example::
@@ -1042,7 +1042,7 @@
:ref:`changing-delimiters` section above.
set_value()
-============
+===========
Permits you to set the value of an input form or textarea. You must
supply the field name via the first parameter of the function. The
@@ -1054,7 +1054,7 @@
The above form will show "0" when loaded for the first time.
set_select()
-=============
+============
If you use a <select> menu, this function permits you to display the
menu item that was selected. The first parameter must contain the name
@@ -1071,7 +1071,7 @@
</select>
set_checkbox()
-===============
+==============
Permits you to display a checkbox in the state it was submitted. The
first parameter must contain the name of the checkbox, the second
@@ -1082,7 +1082,7 @@
<input type="checkbox" name="mycheck[]" value="2" <?php echo set_checkbox('mycheck[]', '2'); ?> />
set_radio()
-============
+===========
Permits you to display radio buttons in the state they were submitted.
This function is identical to the **set_checkbox()** function above.
@@ -1090,4 +1090,4 @@
::
<input type="radio" name="myradio" value="1" <?php echo set_radio('myradio', '1', TRUE); ?> />
- <input type="radio" name="myradio" value="2" <?php echo set_radio('myradio', '2'); ?> />
+ <input type="radio" name="myradio" value="2" <?php echo set_radio('myradio', '2'); ?> />
\ No newline at end of file