Thank you for you reply, Rob.
I simplified things trying to get the troubleshooting more easy. I
created
a model, and a view with only one field, "first_name". I also created
an
add function in the controller which is supposed to validate input
rather
then saving data to the database. The problem remains and I get
redirected
back to the form, where a label "Valid characters: letters and numbers
only, please try again" is attached to the field.
The view:
<?php
<div class="leads form">
<?php echo $form->create('Lead');?>
<fieldset>
<legend><?php __('Add Lead');?></legend>
<?php
echo $form->input('first_name'); ?>
</fieldset>
<?php echo $form->end('Submit');
pr($this->validationErrors);
pr($session);
?>
The model:
<?php
class Lead extends AppModel {
var $name = 'Lead';
var $validate = array(
'first_name' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Valid characters: letters and numbers only,
please try
again.'
)));
}
?>
The add function in the controller:
function add() {
if (!empty($this->data)) {
if ($this->RequestHandler->isPost()) {
$this->Lead->create();
$this->Lead->set($this->data);
Debugger::dump($this->data['Lead']);
Debugger::dump($this->Lead->validationErrors);
Debugger::dump($this->Lead->invalidFields());
Debugger::dump($this->Lead->validate);
if ($this->Lead->validates()) {
$this->_sendMail();
$this->Session->setFlash(__('The Lead
has been saved', true));
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash(__('The Lead
could not be saved. Please,
try
again.', true));
}
}
}
}
Output from the Debugger statements in the add function:
array(
"first_name" => "Paul"
)
array()
array(
"first_name" => "Valid characters: letters and numbers only, please
try
again."
)
array(
"first_name" => array()
)
Dump of the SessionHelper Object:
SessionHelper Object
(
[helpers] =>
[__active] => 1
[valid] =>
[error] =>
[_userAgent] => 372acfb5aa1873a6a6ce218959a07d36
[path] => /
[lastError] =>
[security] =>
[time] => 1229549419
[sessionTime] =>
[watchKeys] => Array
(
)
[id] =>
[_log] =>
[base] => /somepath
[webroot] => /somepath/
[here] => /somepath/leads/add
[params] => Array
(
[pass] => Array
(
)
[named] => Array
(
)
[controller] => leads
[action] => add
[plugin] =>
[form] => Array
(
)
[data] => Array
(
[Lead] => Array
(
[first_name] => Paul
)
)
[url] => Array
(
[url] => leads/add
)
[isAjax] =>
[models] => Array
(
[0] => Lead
)
)
[action] => add
[data] => Array
(
[Lead] => Array
(
[first_name] => Paul
)
)
[themeWeb] =>
[plugin] =>
[validationErrors] => Array
(
[Lead] => Array
(
[first_name] => Valid characters: letters and
numbers
only, please try again.
)
)
)
On 17 Dec, 20:03, Rob <[email protected]> wrote:
> Without looking at your data model, I can't say for sure, but it would
> seem like you may be breaking a rule that is implied by the table.
>
> That said, you might want to add a message to your $validate like:
>
> 'last_name' => array(
> 'alphaNumeric' => array(
> 'rule' => 'alphanumeric',
> 'message' => 'Only letters and numbers for last
> name, please try again.'
> ),
> )
>
> On Dec 17, 2:56 am, Oribium <[email protected]> wrote:
>
> > I am taking a look at cake 1.2, and I run into problems with the
> > validation
> > of form data. I took advantage of the console application to bake some
> > views, a model, and a controller based on an existing MySQL-database.
> > I
> > don't yet have a deep understanding of cake, and would happily welcome
> > hints and pointers which direction I should go.
>
> > I am trying to post data from a form to a database. However, whatever
> > data
> > I post, I get redirected back to the form, where a label "This field
> > cannot
> > be left blank" is attached to all fields. For instance if I fill the
> > alphanumeric field "last_name" with "Jones" (without qoutes), I will
> > get
> > the error message: "This field cannot be left blank". Futhermore,
> > $this->validationErrors contains all fields and the same error
> > message. I
> > have verified that the correct data from the form are assigned to the
> > controller object's data array with Configure::write('debug', 3);
>
> > The view is just a simple form like:
>
> > echo $form->create('Lead');
> > echo $form->input('last_name');
> > echo $form->input('modified_user_id');
> > ... quite a few more fields here ...
> > echo $form->end('Submit');
>
> > There are also a few form fields added with pure html code. These
> > fields
> > are not supposed to be posted to the database, neither be validated
> > with
> > the standard cake validation feature.
>
> > In the model, there is nothing but "name" and the validation array.
>
> > The model's validation array looks like:
>
> > var $validate = array(
> > 'last_name' => array('alphanumeric'),
> > 'modified_user_id' => array('alphanumeric'),
> > --- quite a few more fields here ---
> > )
>
> > The controller's add function:
>
> > function add() {
> > if (!empty($this->data)) {
> > if ($this->RequestHandler->isPost()) {
> > $this->Lead->create();
> > $this->Lead->set($this->data);
> > if ($this->Lead->save($this->data)) {
> > $this->Session->setFlash(__('The Lead has been saved', true));
> > $this->redirect(array('action'=>'index'));} else {
>
> > $this->Session->setFlash(__('The Lead could not be saved. Please, try
> > again.', true));
>
> > }
> > }
> > }
> > }
>
> > I also tried the following code in the controller: if
> > ($this->Lead->validates()) with the same result.
>
> > PHP version: 5.1.6
> > OS: Linux
>
> > CakePHP version:
> > $Id: VERSION.txt 7692 2008-10-02 05:06:48Z nate $
>
> > libs/model/model.php version:
> > $Id: model.php 7690 2008-10-02 04:56:53Z nate $
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---