И IF, и ELSE выполняются - нужна помощь, чтобы определить ошибки - PullRequest
0 голосов
/ 09 марта 2012

Я задал этот вопрос в этом , если еще для отображения 2 представлений в одной функции с именем thread, и я попытался исправить это, как мне было предложено, но проблема остается.Надеюсь, что кто-то может мне помочь ... Это имеет как то, что внутри "если", так и то, что имеет внутри "еще"?

У меня есть небольшая проблема с функцией перенаправления, у меня есть функция контроллера с именем "someview", и я также создал файл представления с тем же именем (someview.ctp). Функция контроллера будет делать некоторые вещи (запросданные из модели).это можно просто описать следующим образом:

function someview()
{
    $result=$this->User->getdatafrommodel();
    if(!empty($result))
    {
        //do something
                    sendmail(.....);
    }
    else
    {
        $this->redirect(array('action'=>'usernotexist'));
    }
}

function usernotexist()
{
    $this->loadSkin();
}

Я также создал страницу с именем "usernotexist.ctp", на которой я хотел бы отобразить некоторую информацию о том, когда указанного пользователя не существует в системе базы данных.Тем не менее, моя предыдущая функция (someview) всегда выполняет «if» и «else» после вызова.Если я уберу часть «else» в этой функции, она тогда будет работать правильно для меня;страница с именем "someview.ctp" отображается.Значение $ result, возвращаемое функцией getdatafrommodel, является правильным.Спасибо за любую помощь.

ОБНОВЛЕНИЕ
это работает:

    function someview()
{
    $result=$this->User->getdatafrommodel();
            print_r($result);
            exit();
    if(!empty($result))
    {
        //do something
    }
    else
    {
        $this->redirect(array('action'=>'usernotexist'));
    }
}

function usernotexist()
{
    $this->loadSkin();
}

это печатает пустой массив.

    function someview()
{
    $result=$this->User->getdatafrommodel();
            print_r($result);
    if(!empty($result))
    {
        //do something
    }
    else
    {
        $this->redirect(array('action'=>'usernotexist'));
    }
}

function usernotexist()
{
    $this->loadSkin();
}

[ ОБНОВЛЕНИЕ ]

Что я вижу после того, как я щелкну ссылку в представлении под названием «папка / подпапка / someview», чтобы вызвать метод контроллера, как я описал выше, страница в «ELSE» перенаправляется.НО в части IF я также включаю функцию «Sendmail» для отправки электронного письма на мою учетную запись.Sendmail РАБОТАЕТ.Это странная вещь, которую я хотел бы понять.Ясно, что если затем выполнятся оба остальных действия.

Что я хотел бы сделать, так это сразу после того, как пользователь щелкнет ссылку, чтобы активировать метод контроллера (someview), если запрос возвращает пустую запись, я буду перенаправлен настраница «usernotexist» или я отправлю ему электронное письмо в противном случае.

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

Вот оно

    function newpassword()
    {
        $this->loadSkinForAction();
        $result=$this->EwtUser->get_user_from_email($_POST['email']);

        if(!empty($result))
        {
            $userid = $result[0]['ewt_users']['id'];
            $password=$this->EwtUser->get_and_change_user_password($_POST['email']);            
            $mail="Your new password is: ".$password."<br/>Please use it for next login.<br/>You are recommended to change this password again in your 'Personal Profile' section.";
            $this->sendmail($userid,$mail,$_POST['email']); 
        }
        else
        {
            //print_r($result);
            $this->redirect(array('action'=>'userexists'));
        }
    }

    function userexists()
    {
        $this->loadSkinForAction();     
    } 

и функция модели для запроса данных

function get_and_change_user_password($email)
    {
        $password=$this->genRandStr();
        $sql=sprintf("UPDATE ewt_users SET password='%s' WHERE email='%s'",md5($password),$email);
        $this->query($sql);
        return $password;
    }

А вот функция sendmail,

function sendmail($userid, $reportcontent,$email){
        //if($this->Session->read($this->_userName))
        {
            $this->loadModel('EwtMailtemplate');
            $this->loadModel('EwtUser');
            $this->loadModel('EwtSetting');
            $this->autoRender = false;

            $date = date("Y-m-d");
            $userinfo = $this->EwtUser->read(null, $userid);
            $fullname = $userinfo['EwtUser']['fullname'];
            $lastname = $userinfo['EwtUser']['lastname'];
            $mailtempl = $userinfo['EwtUser']['mailtempl'];
            if ($mailtempl == 0) {
                $mailtempl = 1;
            }

            $setting = $this->EwtSetting->find('first');
            $mailhost = $setting['EwtSetting']['mailhost'];
            $mailuser = $setting['EwtSetting']['mailuser'];
            $mailpass = $setting['EwtSetting']['mailpass'];
            //$reportmail = $setting['EwtSetting']['reportmail'];
            $reportmail=$email;
            $bodymail = $this->EwtMailtemplate->read(null, $mailtempl);
            //$header = $bodymail['EwtMailtemplate']['header'];
            //$footer = $bodymail['EwtMailtemplate']['footer'];
            //$title = $bodymail['EwtMailtemplate']['title'];
            $subject="New login password for working time system";
            //$subject = $lastname . " " . str_replace("[date]", $date, $title);
            //$header = str_replace("[lastname]", $lastname, $header);
            //$header = str_replace("[date]", $date, $header);
            //$footer = str_replace("[lastname]", $lastname, $footer);

            //$content = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><html><head><meta http-equiv="Content-Type" content="text/html; charset =utf-8" /></head><body>'.$header ."<br />" . $reportcontent . "<br />" .  $footer . '</body></html>';

            $content = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><html><head><meta http-equiv="Content-Type" content="text/html; charset =utf-8" /></head><body>'."<br />".$reportcontent."<br />".'</body></html>';

            $this->Email->to = $reportmail;
            $this->Email->charset = 'UTF-8';
            $this->Email->from = sprintf("%s <%s>", $fullname, $mailuser);
            $this->Email->replyto = sprintf("%s <%s>", $fullname, $mailuser);
            $this->Email->subject = $subject;
            $this->Email->sendAs ='html';
            $smtp = array(
                        'port'=>25,
                        'host'=>$mailhost,
                        'timeout'=>99,
                        'username'=>$mailuser,
                        'password'=>$mailpass
            );
            $this->Email->smtpOptions = $smtp;
            $this->Email->delivery = 'smtp';

            if ($this->Email->send($content)) {
                $this->redirect('newpassword');         
            } else {
                $this->redirect('userexists');
            }

            $smtp_error = $this->Email->smtpError;
            if (strlen($smtp_error)>0){
                $this->Session->setflash($smtp_errors);
            }
        }
    }

Опять же, он выполняет ветки IF и ELSE Спасибо за вашу заботу, и я бы очень хотел услышать ваши комментарии или советы: -)

ВАУ мое сообщениеслишком долго.Я скоро могу сделать филогенетическое дерево!: -DD

1 Ответ

3 голосов
/ 09 марта 2012

Вы перенаправляете внутри своей sendmail функции!

if ($this->Email->send($content)) {
    $this->redirect('newpassword');         
} else {
    $this->redirect('userexists');
}
...