Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Не работает save

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
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()))
}
Если ВСЕ ок, то отработает этот код.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru