变量保持返回NULL,php

时间:2012-08-11 18:06:53

标签: php zend-framework sendmail

protected $_name = 'usertable';  //table name for database [Impt] Please change accordingly
protected $_temp;       

function resetPass($userid)
{
    $pass = new Application_Model_Register();
    $salt = $pass->generateSalt();
    $temp = $pass->generatePass();
    $this->_temp = (string) $temp;


    $data = array(
            'password' => hash("sha256", ($salt. $temp)),
            'salt' => $salt, //get salt from generateSalt()
    );

    //$auth= Zend_Auth::getInstance(); //declare zend_auth to get instance
    //$user= $auth->getIdentity(); //get identity of user
    //$userid   = $user->userid; //get userid of user

    echo $temp;


    $this->update($data, 'userid = '. (int)($userid));
    return $this;
}

function getTemp()
{
    return parent::$this->_temp;
}

这是我在模型中的代码。我试图返回$ _temp因此我做了$ this-> temp = $ temp。我的问题是它返回NULL。

public function sendEmail($email)
{

    $email = $_POST['email'];

    $userid = '30';

    $reset = new Application_Model_DbTable_Register();
    $reset->resetPass($userid);

    $pswd = new Application_Model_DbTable_Register();
    $pswd = $pswd->getTemp();
    var_dump($pswd);

    $mail = new Zend_Mail();

    $mail->setFrom('swap.test@yahoo.com.sg', 'Inexorable Beauty');
    $mail->addTo($email, $email);
    $mail->setSubject('Inexorable Beauty: Password Reset');
    $mail->setBodyText('Dear Customer,

            You have requested to reset your password.
            This is the temporary password: '.$pswd.'

            Please log in immediately and change your password.
            Thank You.

            Yours Sincerely,
            Inexorable Beauty');

    $mail->send();

    if($mail->send())
    {
        echo "Email successfully sent!";
    }
    else
    {
        echo "Email was not sent";
    }



}

这是我的控制器代码。我正在尝试将临时密码发送到客户的电子邮件中。我从我的模型中调用getTemp()函数来获取passwd字符串但是你可以看到我做了var_dump($ pswd)并且它一直返回NULL。任何解决方案?

3 个答案:

答案 0 :(得分:1)

您正在使用

 return parent::$this->_temp;

父对象中是否存在$_temp?看来你在这个对象中定义了它,它并不存在于你希望继承的父对象中。

答案 1 :(得分:1)

看起来你正在创建两个DbTable_Register对象,在第一个上调用reset,但在第二个上调用reset,然后你试图从第二个对象获取临时密码。第二个没有临时因为你没有在第二个对象上调用resetPass

尝试更改:

$reset = new Application_Model_DbTable_Register();
$reset->resetPass($userid);

$pswd = new Application_Model_DbTable_Register();
$pswd = $pswd->getTemp();
var_dump($pswd);

要:

$reset = new Application_Model_DbTable_Register();
$reset->resetPass($userid);
$pswd  = $reset->getTemp();

var_dump($pswd);

看看是否有效。

答案 2 :(得分:1)

首先:检查 Application_Model_Register :: generatePass(); 功能

第二次:在resetPass函数中删除此:

$this->_temp = (string) $temp;

并添加:

if (empty($temp)){
    $this->_temp = (string) $temp;
}

是否返回值的某些内容?如果没有,那么 generatePass()函数错误

第三次:在您的控制器上

$reset = new Application_Model_DbTable_Register();
$reset->resetPass($userid);
$pswd = new Application_Model_DbTable_Register();
$pswd = $pswd->getTemp();
var_dump($pswd);

不要制作像 $ reset $ pswd 这样的双重对象。

尝试:

$reset = new Application_Model_DbTable_Register();
$pswd = $reset->resetPass($userid)->getTemp();
echo "<pre>";
print_r($pswd);
如果我错了,请纠正我。