Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
Watched Topics
FAQ
Поиск
Пользователи
Группы
Регистрация
Профиль
Войти и проверить личные сообщения
Вход
Список форумов Cake-PHP.ru
->
Общий
Ответить
Имя
Тема
Сообщение
Смайлики
Дополнительные смайлики
Цвет шрифта:
По умолчанию
Тёмно-красный
Красный
Оранжевый
Коричневый
Жёлтый
Зелёный
Оливковый
Голубой
Синий
Тёмно-синий
Индиго
Фиолетовый
Белый
Чёрный
Размер шрифта:
Размер шрифта
Очень маленький
Маленький
Обычный
Большой
Огромный
Закрыть теги
[quote="aktuba"]Код контроллера: [code]// Регистрация пользователя 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); }[/code] Кстати, может кто предложит более оптимальную схему, т.к. в таком виде мне не нравится, но, как мне уже сказали - "сначала сделай чтобы работало..." Код модели: [code]<?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'); } } ?>[/code][/quote]
Настройки
HTML
ВЫКЛЮЧЕН
BBCode
ВКЛЮЧЕН
Смайлики
ВКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
Если у вас плохое зрение или вы не можете прочесть этот код по какой-то другой причине, то обратитесь за помощью к
Администратору
.
Код подтверждения: *
Введите код в точности так, как вы его видите. Код является регистро-зависимым, а символ нуля имеет косую линию внутри цифры.
Часовой пояс: GMT + 3
Перейти:
Выберите форум
CakePHP Форум
----------------
Общий
Установка и настройка
Творчество
Вопросы и пожелания
Комментарии к главам руководства по CakePHP 1.1
Обзор темы
Автор
Сообщение
Антон Исайкин
Добавлено: 21 Янв 2008 21:18:11
Заголовок сообщения:
aktuba
Ужас! Зачем вам такая вложенность?! Вы сами с какого раза прочитываете свой исходник? Если унесете все в модель -- проблема пропадет. А вообще, действуйте по принципу:
Код:
if (!(все_ок)) {
сообщаем об ошибке;
return;
}
if (!(все_ок1)) {
сообщаем об ошибке;
return; (ну или $this->redirect($this->referer()))
}
Если ВСЕ ок, то отработает этот код.
evilbloodydemon
Добавлено: 21 Янв 2008 20:21:02
Заголовок сообщения:
хм.. для начала я бы перечитал мануал =)
если вкратце, то проверка данных должна быть в модели ($validate и все такое), а действия по их обработке - в контроллере. а тут все ровно наоборот.
для начала я бы стёр это все и сделал бы по такому плану:
1. таблица пользователей
2. модель
3. простой контроллер, который из формы заполняет данные модели
4. валидация данных в модели
5. отправка почты в контроллере
6. Sanitize
и никакого SQL.
aktuba
Добавлено: 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
Добавлено: 21 Янв 2008 15:04:17
Заголовок сообщения:
код контроллера покажи
aktuba
Добавлено: 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, а во второй все отлично? В чем отличие?
Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB
Если ничего интересного не нашли, можно рекламу почитать, а рекламируется у нас сегодня «».