|
Cake-PHP.ru Форум программистов CakePHP (на сайт)
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
aktuba
цитировать
Зарегистрирован: 18 Янв 2008 10:24:01 Сообщения: 38
|
Добавлено: 21 Янв 2008 13:22:15 Заголовок сообщения: Не работает save |
|
|
Две строки:
Код: | $this -> save(array('login' => $login, 'password' => $passwd, 'email' => $email, 'hash' => $result, 'hash_date' => $date, 'type' => 0)); |
Код: | $this -> execute('INSERT INTO users(login, password, email, type, hash, hash_date) VALUES("' . $login . '", "' . $passwd . '", "' . $email . '", 0, "' . $result . '", ' . $date . ')'); |
Почему в первой не сохраняется hash и hash_date, а во второй все отлично? В чем отличие? |
|
Вернуться к началу |
|
|
evilbloodydemon
цитировать
Зарегистрирован: 11 Окт 2007 20:32:19 Сообщения: 125
|
Добавлено: 21 Янв 2008 15:04:17 Заголовок сообщения: |
|
|
код контроллера покажи _________________ поздняк метаться - ракеты в воздухе
jabber-конференция по CakePHP - xmpp:cakephp@conference.jabber.ru |
|
Вернуться к началу |
|
|
aktuba
цитировать
Зарегистрирован: 18 Янв 2008 10:24:01 Сообщения: 38
|
Добавлено: 21 Янв 2008 17:08:24 Заголовок сообщения: |
|
|
Код контроллера:
Код: | // Регистрация пользователя
function register() {
if ($this -> Session -> check('User')) $this -> redirect('/');
if (empty($this -> data['user'])) $this -> render('register');
uses('sanitize');
$mrClean = new Sanitize();
$symb = array('@', '_', '-', '.');
$login = $mrClean -> paranoid($this -> data['user']['login'], $symb);
$passwd = $mrClean -> paranoid($this -> data['user']['password'], $symb);
$passwd2 = $mrClean -> paranoid($this -> data['user']['repassword'], $symb);
$email = $mrClean -> paranoid($this -> data['user']['email'], $symb);
$rules = $mrClean -> paranoid($this -> data['user']['rules']);
$err = '';
if(!empty($login) && strlen($login) >= 3) {
if(!empty($passwd) && strlen($passwd) >= 3) {
if($passwd == $passwd2) {
if(preg_match('/^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$/i', $email)) {
if ($rules == '1') {
$passwd = md5($passwd);
if(!$this -> User -> findBylogin($login)) {
if(!$this -> User -> findByemail($email)) {
$this -> User -> register($login, $passwd, $email);
$this -> set('help_activate', 'На ваш e-mail отправлено письмо с кодом активации.');
$this -> render('activate');
} else {
$err = 'Пользователь с таким e-mail уже зарегистрирован.';
}
} else {
$err = 'Пользователь с таким логином уже зарегистрирован.';
}
} else {
$err = 'Вы не приняли правила сайта.';
}
} else {
$err = 'Неверный e-mail.';
}
} else {
$err = 'Введенные пароли не совпадают.';
}
} else {
$err = 'Пароль не может быть менее 3-х символов.';
}
} else {
$err = 'Логин не может быть менее 3-х символов.';
}
if (!empty($err)) $this -> set('err_register', $err);
} |
Кстати, может кто предложит более оптимальную схему, т.к. в таком виде мне не нравится, но, как мне уже сказали - "сначала сделай чтобы работало..."
Код модели:
Код: | <?php
class User extends AppModel {
var $name = 'User';
function register($login, $passwd, $email) {
$date = time();
$result = md5($login . $password . $email . $date);
//$this -> save(array('login' => $login, 'password' => $passwd, 'email' => $email, 'hash' => $result, 'hash_date' => $date, 'type' => 0));
$this -> execute('INSERT INTO users(login, password, email, type, hash, hash_date) VALUES("' . $login . '", "' . $passwd . '", "' . $email . '", 0, "' . $result . '", ' . $date . ')');
// Отправить сообщение на e-mail
$message = 'Сегодня в '.date('d.m.Y',$date).' на сайте ' . $sitename . ' был зарегистрирован пользователь с вашим email\'ом.'."\n".
' Поэтому вы получили данное письмо. Если вы не регистрировались на нашем сайте, то попросту удалите данное письмо,'."\n".
' а если же это были вы то перейдите по нижеприведённой ссылке. Активация аккаунта будет действительна до '.date('d.m.Y', $date + 3 * 86400).','."\n".
' после чего данный аккаунт будет удален!<br /><br />'."\n\n".
' Ссылка для активации: <a href="http://' . $site . '/users/activate?active=' . $result . '" >http://' . $site . '/users/activate?active=' . $result . '</a><br /><br />'."\n".
'-------------------------------------------------------------------<br /><br />'."\n".
'С уважением администрация '.$sitename.'<br />'."\n".
'Email для контактов: <a href=\'mailto:'.$admin_mail.'\'>'.$admin_mail.'</a>'."\n";
mail($email, 'Активация аккаунта', $message, 'Content-Type: text/html; charset=utf-8');
}
}
?> |
|
|
Вернуться к началу |
|
|
evilbloodydemon
цитировать
Зарегистрирован: 11 Окт 2007 20:32:19 Сообщения: 125
|
Добавлено: 21 Янв 2008 20:21:02 Заголовок сообщения: |
|
|
хм.. для начала я бы перечитал мануал =)
если вкратце, то проверка данных должна быть в модели ($validate и все такое), а действия по их обработке - в контроллере. а тут все ровно наоборот.
для начала я бы стёр это все и сделал бы по такому плану:
1. таблица пользователей
2. модель
3. простой контроллер, который из формы заполняет данные модели
4. валидация данных в модели
5. отправка почты в контроллере
6. Sanitize
и никакого SQL. _________________ поздняк метаться - ракеты в воздухе
jabber-конференция по CakePHP - xmpp:cakephp@conference.jabber.ru |
|
Вернуться к началу |
|
|
Антон Исайкин Site Admin цитировать
Зарегистрирован: 08 Окт 2007 12:02:56 Сообщения: 150 Откуда: Санкт-Петербург
|
Добавлено: 21 Янв 2008 21:18:11 Заголовок сообщения: |
|
|
aktuba
Ужас! Зачем вам такая вложенность?! Вы сами с какого раза прочитываете свой исходник? Если унесете все в модель -- проблема пропадет. А вообще, действуйте по принципу:
Код: |
if (!(все_ок)) {
сообщаем об ошибке;
return;
}
if (!(все_ок1)) {
сообщаем об ошибке;
return; (ну или $this->redirect($this->referer()))
}
Если ВСЕ ок, то отработает этот код.
|
|
|
Вернуться к началу |
|
|
|
|
Вы можете начинать темы Вы можете отвечать на сообщения Вы можете редактировать свои сообщения Вы можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group Русская поддержка phpBB
|