В yii как отправить ссылку для сброса пароля

В yii я создаю функцию забывания пароля. Для этого пользователя вводится идентификатор электронной почты. Если этот идентификатор электронной почты верен, я хочу получить идентификатор securityQuestion из базы данных и отобразить этот вопрос пользователю. Если его ответ правильный, то ссылка для сброса пароля будет отправлена на адрес электронной почты пользователя. В контроллере я сделал действие как

 public function ActionForget{if(isset($_POST['email']))
      { $record=User::model()->find(array(
        'select'=>'primaryEmail',
        'condition'=>'PrimaryEmail=:email',
         'params'=>array(':email'=>$_POST['email']))
             ); if($record===null) {
         $error = 'Email invalid';
         }  else {
          $mailer = Yii::createComponent('application.extensions.mailer.EMailer');
          $mailer->IsSMTP();
          $mailer->IsHTML(true);
          $mailer->SMTPAuth = true;
          $mailer->SMTPSecure = "ssl";
          $mailer->Host = "smtp.gmail.com";
          $mailer->Port = 465;
          $mailer->CharSet = 'UTF-8';
          $mailer->Username = "[email protected]";
          $mailer->Password = "abc";
          $mailer->From = "[email protected]";
          $mailer->FromName = "Balaee.com";
          $mailer->AddAddress($record);
          $mailer->Subject = "welcome to Balaee";
          $mailer->IsHTML(true);
          $mailer->Body = "<h1>Thanks to showing interest </h1><br>click on link for                            other detail ".$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if($mailer->Send()) {echo "Please check mail";}
else {echo "Fail to send your message!"; }}}
else{ $this->render('emailForm'); //show the view with the password field}}

У меня есть password.php в качестве файла просмотра для ввода основного идентификатора электронной почты и кнопки отправки.

     <?php $form=$this->beginWidget('CActiveForm', array(
         'id'=>'email-form',
           'enableClientValidation'=>true,
            ));
          echo CHtml::textField('email');
          echo CHtml::submitButton('Send');
          $this->endWidget();

Но после отправки пользователем основного идентификатора электронной почты никаких действий не происходит. Так может кто-нибудь сказать мне, какие изменения мне нужно сделать


person Shilpa Kirad    schedule 28.11.2012    source источник
comment
Пожалуйста, отладьте свой код, поместив операторы эха, и проверьте, где прерывается элемент управления, а затем найдите проблему.   -  person hemc4    schedule 28.11.2012
comment
Я делаю это сейчас поэтапно. Если идентификатор электронной почты правильный, я хочу получить этот пользовательский securityQuestionid из пользовательской таблицы, чтобы отобразить ему контрольный вопрос. Я создал запрос как будто (isset ($_POST ['email'])) {$record = User1 :: model()-›find(array( 'select'=›'primaryEmail', 'condition'=›'PrimaryEmail=:email', 'params'=›array(':email'=›$_POST['email'] ))); if(!$record===null) {эхо-письмо существует; $id=User1::model()-›findByAttributes(array('userId'=›$record-›userId));$sqid=User1::model()-›findByAttributes(array('securityQuestionId'=›$record -›securityQusetionId));echo $sqid;}} не работает   -  person Shilpa Kirad    schedule 28.11.2012
comment
Публикация снова и снова не поможет, мам, попробуй написать код. Спасибо.   -  person Coder anonymous    schedule 28.11.2012
comment
Для начала попробуйте функцию findByAttributes вместо find, нужно только указать там array('primaryEmail' => Yii::app()->request->getPost('email')) . Также вы можете вместо этого заменить if на if ($record != NULL). !$record приводит к логическому значению, и строгая проверка на NULL всегда будет терпеть неудачу.   -  person Blizz    schedule 28.11.2012


Ответы (2)


Разве имя метода контроллера не должно быть actionForgot вместо ActionForgot. PHP чувствителен к регистру, также когда вы визуализируете страницу, отправьте модель с ней, например this->render->('emailForm',$email), где $email — имя вашей модели.

person Akshay    schedule 19.01.2013
comment
PHP не чувствителен к регистру, когда речь идет о функциях/методах. - person diesonne; 14.01.2014

Хорошо, мне нравится начало, и вот некоторые исправления существующего кода выше.

Однако каков был ваш план после того, как вы успешно отправили электронное письмо; посмотрите, существующий код дает вам URL-адрес, который выглядит следующим образом: http://yoursite.com/yourapp/user/forget, и это вернет вас прямо к форме, в которой вы вводите свою электронную почту, тем самым создавая гигантский цикл.

См. ссылку, которая на самом деле должна быть проверена и, таким образом, давать пользователю доступ к своей пользовательской записи. Вам нужна какая-то другая функция для проверки и разрешения смены пароля.

<code>

public function actionForget() {
        if(isset($_POST['email'])) { 
         $record=User::model()->findByAttributes(array('email' => Yii::app()->request->getPost('email'))); 
         if ($record != NULL) {
              $mailer = Yii::createComponent('application.extensions.mailer.EMailer');
              $mailer->IsSMTP();
              $mailer->IsHTML(true);
              $mailer->SMTPAuth = true;
              $mailer->SMTPSecure = "ssl";
              $mailer->Host = "smtp.gmail.com";
              $mailer->Port = 465;
              $mailer->CharSet = 'UTF-8';
              $mailer->Username = "[email protected]";
              $mailer->Password = "P@ssWord";
              $mailer->From = "[email protected]";
              $mailer->FromName = "HQ-DEV-01";
              $mailer->AddAddress($_POST['email']);
              $mailer->Subject = "welcome to CES Document Site";
              $mailer->IsHTML(true);
              $mailer->Body = "<h1>Thanks, please</h1><br>
                          click on link for other detail
                          ".$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

                           if($mailer->Send()) {
                     echo "Please check your email";
                }
                 else {
                     echo "Fail to send your message!"; 
                }

         } else {
            echo 'Email invalid'; 
     }
         else {
         $this->render('password'); 
         Yii::app()->user->setFlash('error', "Email is not valid!");
        //echo 'Email invalid'; 
    }

    }
else{ $this->render('password'); //show the view with the password field}}
      Yii::app()->user->setFlash('info', "Enter a valid e-mail!");
}

}

person Ken    schedule 17.09.2013