Автор Тема: CodeIgniter login форма - част 2  (Прочетена 6454 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

metost

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 13
  • -Получени: 41
  • Публикации: 764
CodeIgniter login форма - част 2
« -: 20 Юни 2010, 14:21:57 »
** Тази тема дискутира:: CodeIgniter login форма - част 2 **
Автор: Методи

В урока ще разгледаме:
  • Как да направим регистрационна форма + Разширена валидация
  • Вземане на информация от сесията
  • Ограничаване на достъпа до дадена страница в зависимост дали потребителят е влязъл или не
  • Унищожаване на сесията
  • Добавяне на запис в БД
  • Редактиране на запис в БД
  • Генериране на Random стринг от букви и цифри.
  • Изпращане на e-mail с помощта на CI
  • Използване на класът URI и вземане на информация от URL
« Последна редакция: 15 Април 2015, 21:06:22 от Avalanche »
(рɐǝɥ ɹпoʎ uɹпʇ ʇ,uoр)

Firefighter

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 2
Отг:CodeIgniter login форма - част 2
« Отговор #1 -: 23 Юни 2010, 17:56:36 »
Уроците са страхотни продължавайте в същия дух, искам да питам мога да изтегля сорс кода на уреците от някъде? Много по-лесно би било, когато се упражнява човек просто да поглежда от файл с разписания код, когато му възникнът въпроси, отколкото постоянно да превърта плеъра.

metost

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 13
  • -Получени: 41
  • Публикации: 764
Отг:CodeIgniter login форма - част 2
« Отговор #2 -: 23 Юни 2010, 19:36:03 »
Здравей Firefighter, радвам се че уроците те харесват! Относно сорс кода - тук така се процедира от самото начало на сайта, за разлика от други места, където заедно с даден урок се предоставя и сорса. До някъде съм съгласен с теб, че може и да е по-неудобно вместо да се превърта плеара да погледнеш написаното, но от друга страна съм убеден, че така човек по-лесно и по-бързо научава нещо, когато го усмисля! Защото малко му трябва на всеки да се изкуши и да запчоне Copy&Paste - приложението му да заработи от първия път и да се самозалъгва, че е станал невероятен програмист  :woohoo: . Няма удоволствие от дадено нещо ако не изкочат  " хиляда и една "  грешки и човек не си поблъска главата в клавиатурата! Тогава наистина се научава нещо!

Поздрави.... ;)
(рɐǝɥ ɹпoʎ uɹпʇ ʇ,uoр)

Firefighter

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 2
Отг:CodeIgniter login форма - част 2
« Отговор #3 -: 24 Юни 2010, 14:25:11 »
Абсолютно си прав, че човек научава най-много, когато  " изстрада "  сорса, който пише. Уважавам политиката, която сте избрали. Лично аз с нетърпение очаквам следващите уроци за Codeigniter :) !

qwerty

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 176
Отг:CodeIgniter login форма - част 2
« Отговор #4 -: 25 Юни 2010, 14:17:55 »
Много добър урок браво!!! Продължавай все така.

chokybp

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 2
Отг:CodeIgniter login форма - част 2
« Отговор #5 -: 21 Юли 2010, 03:08:56 »
Уроците наистина са страхотни. Доста се помъчих, но не разбрах как да направя нещо:
например логин формата.При въвеждане на име и парола ако грешката е от типа на trim|required|min_length всичко е ок. Обаче когато грешката е след като се направи взръзка с базата и се рефрешва страницата въведените данни от потребителя изчезват. Въпроса ми как да се направи за да се запазват. Поздрави

metost

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 13
  • -Получени: 41
  • Публикации: 764
Отг:CodeIgniter login форма - част 2
« Отговор #6 -: 21 Юли 2010, 08:58:35 »
Трябва да сетнеш value с метода set_value() когато създаваш конкретния инпут.

Например:

$username = array(
               ' name '         =>  ' username ' ,
               ' id '           =>  ' username ' ,
               ' value '        => set_value(),
            );

echo form_input($username);
(рɐǝɥ ɹпoʎ uɹпʇ ʇ,uoр)

chokybp

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 2
Отг:CodeIgniter login форма - част 2
« Отговор #7 -: 21 Юли 2010, 14:07:33 »
Код: PHP
  1. Ами това съм го направил в view-то:
  2. $username = array(
  3.      ' name '  =>  ' username ' ,
  4.      ' id '  =>  ' username ' ,
  5.      ' value '  => set_value( ' username ' )
  6. );
  7.  
  8. <div>
  9.          <?=form_label( &#39; Потребител :   &#39; ,$username[ &#39; name &#39; ]); ?>
  10.          <?=form_input($username);?>
  11. </div>
  12.  
  13. // А това долу ми е метода в контролера:
  14.  
  15. function validate(){
  16.         $this->load->library( &#39; form_validation &#39; );
  17.         $val = $this->form_validation;
  18.  
  19.         $val->set_rules( &#39; username &#39; , &#39; Име &#39; ,  &#39; trim|required|min_length[4] &#39; );
  20.         $val->set_rules( &#39; password &#39; , &#39; Парола &#39; ,  &#39; trim|required|min_length[6] &#39; );
  21.  
  22.         if ($val->run()){
  23.             $this->load->model( &#39; users_model &#39; );
  24.             if ($this->users_model->validate_login() ){
  25.                 if($this->users_model->is_active() == FALSE){
  26.                     redirect( &#39; login/index &#39; );
  27.                 }
  28.                 else {
  29.                 $data = array(
  30.                      &#39; is_logged &#39;  => TRUE ,
  31.                      &#39; username &#39;  => $this->input->post( &#39; username &#39; )
  32.                 );
  33.  
  34.                     $this->session->set_userdata($data);
  35.                     redirect( &#39; members &#39; );
  36.                 }
  37.             }
  38.                 else {
  39.                     $this->session->set_flashdata( &#39; errmsg &#39; , &#39; Грешно име или парола &#39; );
  40.                     redirect( &#39; login/index &#39; );
  41.                    
  42.                 }
  43.             }
  44.         else $this->index();
  45.     }
  46. // А users_model->validate_login е :
  47.  
  48. function validate_login(){
  49.         $username = $this->input->post( &#39; username &#39; );
  50.         $password = md5($this->input->post( &#39; password &#39; ));
  51.  
  52.         $this->db->where( &#39; username &#39; ,$username);
  53.         $this->db->where( &#39; password &#39; ,$password);
  54.         $query = $this->db->get( &#39; users &#39; );
  55.  
  56.         if ($query->num_rows() == 1){
  57.             return TRUE;
  58.         }
  59.     }
  60.  
  61. Благодяря за отделеното внимание.
« Последна редакция: 26 Януари 2011, 23:42:54 от echeveria »

borkata

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 1
Отг:CodeIgniter login форма - част 2
« Отговор #8 -: 27 Юли 2010, 09:03:53 »
Урокът е прекрасен. Ако имаш добри познания по PHP, показването как се прилагат модули и контролери, би ти било достатъчно, за да използваш CodeIgniter за почти всякакви проекти (ако използваш юзъргайда естествено  :) ).

Продължавай с уроците  :) Чудесни са :)

Lambenstein

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 1
Отг:CodeIgniter login форма - част 2
« Отговор #9 -: 29 Септември 2010, 20:58:48 »
Код: PHP
  1. урока е супер, но искам да попитам как да използвам send_mail функцията в ето този скрипт
  2. [code]<?php
  3. /**
  4.  * Mailer.php
  5.  *
  6.  * The Mailer class is meant to simplify the task of sending
  7.  * emails to users. Note: this email system will not work
  8.  * if your server is not setup to send mail.
  9.  *
  10.  */
  11.  
  12. class Mailer
  13. {
  14.    /**
  15.     * sendWelcome - Sends a welcome message to the newly
  16.     * registered user, also supplying the username and
  17.     * password.
  18.     */
  19.    function sendWelcome($user, $email, $pass, $userid){
  20.       $from =  " From:  " .EMAIL_FROM_NAME. "  < " .EMAIL_FROM_ADDR. " > " ;
  21.       $subject =  " Jpmaster77 &#39; s Site - Welcome! " ;
  22.       $body = $user. " ,\\n\\n "
  23.              . " Welcome! You &#39; ve just registered at Jpmaster77 &#39; s Site  "
  24.              . " with the following information:\\n\\n "
  25.              . " Username:  " .$user. " \\n "
  26.              . " Password:  " .$pass. " \\n\\n "
  27.              . " Before you can login you need to activate your\\n "
  28.              . " account by clicking on this link:\\n\\n "
  29.              . " http://the-sims-3-stuffs.co.cc/valid.php?qs1= " .$user. " &qs2= " .$userid. " \\n\\n "
  30.              . " If you ever lose or forget your password, a new  "
  31.              . " password will be generated for you and sent to this  "
  32.              . " email address, if you would like to change your  "
  33.              . " email address you can do so by going to the  "
  34.              . " My Account page after signing in.\\n\\n "
  35.              . " - Jpmaster77 &#39; s Site " ;
  36.                          
  37.                          $cofig = array(
  38.                              &#39; protocol &#39;  =>  &#39; smtp &#39; ,
  39.                                  &#39; smtp_host &#39;  =>  &#39; ssl://smtp.gmail.com &#39; ,
  40.                                  &#39; smtp_port &#39;  => 465,
  41.                                  &#39; smtp_user &#39;  =>  &#39; ilambenstein@gmail.com &#39; ,
  42.                                  &#39; smtp_pass &#39;  =>  &#39; 33924070 &#39; ,
  43.                          );
  44.                
  45.       return mail($email,$subject,$body,$from);
  46.    }
  47.    
  48.    /**
  49.     * sendConfirmation - Sends a confirmation to users
  50.     * who click a  " Send confirmation "  button.  This
  51.     * only needs to be used if the EMAIL_WELCOME constant
  52.     * is changed to true and the user &#39; s  &#39; valid &#39;  field is 0
  53.     */
  54.    function sendConfirmation($user, $userid, $email){
  55.        $from =  " From:  " .EMAIL_FROM_NAME. "  < " .EMAIL_FROM_ADDR. " > " ;
  56.        $subject =  " jpmaster77 &#39; s Site - Welcome! " ;
  57.        $body = $user. " ,\\n\\n "
  58.                . " We &#39; re sorry for the inconvenience.  We are making\\n "
  59.                . " our website more secure for both your and our \\n "
  60.                . " benefit.\\n\\n "
  61.                . " To activate your account you can either click on the\\n "
  62.                . " following link or copy the link and paste it into your\\n "
  63.                . " address bar.\\n\\n "
  64.                . " http://the-sims-3-stuffs.co.cc/valid.php?qs1= " .$user. " &qs2= " .$userid. " \\n\\n "
  65.                . " We here at Jpmaster77 &#39; s Site hope you continue to\\n "
  66.                . " enjoy our wonderful service.\\n\\n "
  67.                . " Sincerely,\\n\\n "
  68.                . " - Jpmaster77 &#39; s Site " ;
  69.                          
  70.                          
  71.                            $cofig = array(
  72.                              &#39; protocol &#39;  =>  &#39; smtp &#39; ,
  73.                                  &#39; smtp_host &#39;  =>  &#39; ssl://smtp.gmail.com &#39; ,
  74.                                  &#39; smtp_port &#39;  => 465,
  75.                                  &#39; smtp_user &#39;  =>  &#39; ilambenstein@gmail.com &#39; ,
  76.                                  &#39; smtp_pass &#39;  =>  &#39; 33924070 &#39; ,
  77.                          );
  78.                
  79.       return mail($email,$subject,$body,$from);
  80.    }
  81.    
  82.    
  83.    /**
  84.     * sendNewPass - Sends the newly generated password
  85.     * to the user &#39; s email address that was specified at
  86.     * sign-up.
  87.     */
  88.    function sendNewPass($user, $email, $pass){
  89.       $from =  " From:  " .EMAIL_FROM_NAME. "  < " .EMAIL_FROM_ADDR. " > " ;
  90.       $subject =  " Jpmaster77 &#39; s Site - Your new password " ;
  91.       $body = $user. " ,\\n\\n "
  92.              . " We &#39; ve generated a new password for you at your  "
  93.              . " request, you can use this new password with your  "
  94.              . " username to log in to Jpmaster77 &#39; s Site.\\n\\n "
  95.              . " Username:  " .$user. " \\n "
  96.              . " New Password:  " .$pass. " \\n\\n "
  97.              . " It is recommended that you change your password  "
  98.              . " to something that is easier to remember, which  "
  99.              . " can be done by going to the My Account page  "
  100.              . " after signing in.\\n\\n "
  101.              . " - Jpmaster77 &#39; s Site " ;
  102.                          
  103.                          $cofig = array(
  104.                              &#39; protocol &#39;  =>  &#39; smtp &#39; ,
  105.                                  &#39; smtp_host &#39;  =>  &#39; ssl://smtp.gmail.com &#39; ,
  106.                                  &#39; smtp_port &#39;  => 465,
  107.                                  &#39; smtp_user &#39;  =>  &#39; ilambenstein@gmail.com &#39; ,
  108.                                  &#39; smtp_pass &#39;  =>  &#39; 33924070 &#39; ,
  109.                          );
  110.              
  111.       return mail($email,$subject,$body,$from);
  112.    }
  113. };
  114.  
  115.    
  116.  
  117. ?>
П.С.: така не става[/code]
« Последна редакция: 26 Януари 2011, 23:43:10 от echeveria »

mitakkka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 1
Отг:CodeIgniter login форма - част 2
« Отговор #10 -: 01 Октомври 2010, 17:55:38 »
Здравей, Metost - наистина много добри уроци - малко инфо кога да очакваме нови уроци за CodeIgniter ?

antony

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 60
Re: CodeIgniter login форма - част 2
« Отговор #11 -: 26 Януари 2011, 17:37:52 »
Поздрави и от мен за уроците,

Ти си вторият човек който ме надъхва, че нещата стават(първият е Иван).
Наистина, ако може да разясниш за emails през настроен смпт сървър. Освен това ти каза в последният урок, ако искаме да сложим отметка "Запомни ме", става малко по трудно. Мисля че ще се получи страхотно, ако направиш едно напълно завършено приложение (както Иван направи) например:
-Форум, галерийка или адресна книга.

Благодаря ти и ще чакам с нетърпение следващите уроци!
« Последна редакция: 26 Януари 2011, 20:14:39 от antony »

TheHavoc

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 5
Re: CodeIgniter login форма - част 2
« Отговор #12 -: 06 Декември 2011, 22:36:21 »
Поздравления за урока, но имам един въпрос.
При регистрацията . Извикваме метода register от контролера, който зарежда view-to.

Код: PHP
  1.     public function register() {
  2.         $data['main_view'] = 'login/register_form';
  3.         $this->load->view('include/main', $data);
  4.     }
  5.  
Така след това, метода register_validate.
Когато се стигне до проверките за email и username, дали вече ги има в базата данни. Или връща true или изписва грешка. Но не трябва да има echo-та в контролера, затова сложих в else да извиква отново view-tata.

Код: PHP
  1.             if ($this->user_model->_exist_user()) {
  2.                 if ($this->user_model->_exist_email()) {
  3.                     $activation_code = $this->_gen_pass(32);
  4.                     if ($this->_send_mail($activation_code)) {
  5.                         if ($this->user_model->_reg_user()) {
  6.                             $data['main_view'] = 'login/login_form';
  7.                             $this->load->view('include/main', $data);
  8.                         } else {
  9.                             return FALSE;
  10.                         }
  11.                     } else {
  12.                        
  13.                     }
  14.                 } else {
  15.                     $data['main_view'] = 'login/register_form';
  16.                     $data['error'] = 'login/exist_email.php';
  17.                     $this->load->view('include/main', $data);
  18.                 }
  19.             } else {
  20.                 $data['main_view'] = 'login/register_form';
  21.                 $data['error'] = 'login/exist.php';
  22.                 $this->load->view('include/main', $data);
  23.             }
  24.  
И виждам, че първо в формата за регистриране зареждам 'login/register_form'; , след това когато username се повтаря. Викам пак register_form , но добавям една променлива $error .  И във view-то на register_form добавям.
Код: PHP
  1.     if (!empty($error)) {
  2.         $this->load->view($error);
  3.     }
  4.  

След това, ако emaila се повтаря отново викам view-to register_form но променливата error вика view-to exist_email.

view: exist.php -> <p>username is exist.</p>
view: exist_email.php ->  <p>emailis exist.</p>

Със  $this->form_validation->set_error_delimiters();  доста добре става, защото избягвам тези гимнастики само като добавя на полето  <?php echo form_error('blabla'); ?>  , но е само за определени неща.

И така на въпроса.. Оптимално и правилно ли е да викам всеки път едно и също view, както съм го направил само за един ред.

« Последна редакция: 15 Април 2015, 21:07:29 от Avalanche »

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: CodeIgniter login форма - част 2
« Отговор #13 -: 06 Декември 2011, 23:37:01 »
@TheHavoc Ами ти реално пишеш едно и също нещо няколко пъти, при това вече го имаш написано в отделен метод. Може вместо всеки пък да include-ваш 'login/register_form', просто да извикаш наново метода register от същия контролер.
Код: PHP
  1. $this->register();
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

texnika

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 1
Re: CodeIgniter login форма - част 2
« Отговор #14 -: 23 Ноември 2012, 10:00:32 »
Браво за добрите уроци.
А как да направи и потребителски панел.По точно самите проверки за потребителско ниво и ограничаването му до дадена част от сайта.Нещо като админ панел.