Sunday, January 3, 2010

CakePHP isUnique fail?

Good day,

the isUnique-Flag doesn't work for me - based on a wrong query.
Here my validation rules for User:
/**
* Validate the incoming data
*/
var $validate = array(
'name' => array(
'fieldUnique' => array(
'rule' => 'checkUnique',
'message' => 'Dieser Nutzername wird schon verwendet',
'last' => true
),
'nameNumeric' => array(
'rule' => 'alphaNumeric',
'message' => 'Benutzernamen dürfen nur Buchstaben und Zahlen
enthalten.'
),
'nameLengthMin' => array(
'rule' => array('minLength', 5),
'message' => 'Benutzernamen müssen mindestens 5 Zeichen lang
sein.'
),
'nameLengthMax' => array(
'rule' => array('maxLength', 20),
'message' => 'Benutzernamen dürfen nicht länger als 20 Zeichen
sein'
),
'nameregex'=> array(
'rule' => array('custom',"/^[a-zA-Z][-a-z-A-Z0-9]*$/"),
'message' => 'Benutzernamen dürfen keiner Sonderzeichen
enthalten und nicht mit einer Zahl beginnen.'
)
),
'password' => array(
'passwordmin' => array(
'rule' => array('minLength',8),
'message' => 'Ihr Passwort muß mindestens 8 Zeichen lang sein'
),
'passwordmax' => array(
'rule' => array('maxLength',20),
'message' => 'Ihr Passwort darf maximal 20 Zeichen lang sein'
),
'passwordequal' => array(
'rule' => array('checkPasswordsEqual'),
'message' => 'Sie haben zwei unterschiedliche Passwörter
eingegeben'
)
),
/*'password_repeat' => array(
'rule' => array('checkPasswordsEqual'),
'message' => 'Sie haben zwei unterschiedliche Passwörter
eingegeben'
),*/
'mail' => array(
'rule' => array('email', true),
'message' => 'Sie haben keine gültige E-Mail Adresse angegeben.'
)
);

And now the validation code:
/**
* Checks if both passwords are equal
* @param string the repeated password
* @return bool
*/
public function checkPasswordsEqual($repeated){
return ($repeated['password'] == $this->data['User']
['password_repeat']);
}

function checkUnique($data)
{
$fieldName = key($data);
$valid = false;
if(isset($fieldName) && $this->hasField($fieldName))
{
$valid = $this->find(array($fieldName => $data
[$fieldName]));
}
return !empty($valid);
}


That works. Now the "better validation":
'name' => array(
'fieldUnique' => array(
'rule' => 'isUnique',
'message' => 'Dieser Nutzername wird schon verwendet',
'last' => true
),
'nameNumeric' => array(
'rule' => 'alphaNumeric',
'message' => 'Benutzernamen dürfen nur Buchstaben und Zahlen
enthalten.'
),
'nameLengthMin' => array(
'rule' => array('minLength', 5),
'message' => 'Benutzernamen müssen mindestens 5 Zeichen lang
sein.'
),
'nameLengthMax' => array(
'rule' => array('maxLength', 20),
'message' => 'Benutzernamen dürfen nicht länger als 20 Zeichen
sein'
),
'nameregex'=> array(
'rule' => array('custom',"/^[a-zA-Z][-a-z-A-Z0-9]*$/"),
'message' => 'Benutzernamen dürfen keiner Sonderzeichen
enthalten und nicht mit einer Zahl beginnen.'
)
),

=> doesn'T work, it procudes the following query to my Databse:
SELECT COUNT(*) AS `count` FROM `users` AS `User` WHERE `User`.`name`
= 'assdasadfsdfsdfsd' AND `User`.`name` = ''

wtf?


How to solve this? There could be the reason for this behavior?


Regards,

dispy

Check out the new CakePHP Questions site http://cakeqs.org and help others with their CakePHP related questions.

You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

No comments: