【问题标题】:Forgot password not working [duplicate]忘记密码不起作用[重复]
【发布时间】:2016-11-23 12:36:19
【问题描述】:

当用户忘记密码但它不起作用时,我有一些代码。当用户继续时,消息不会发送到他们的电子邮件。怎么了?

这是PHP中的代码

require_once 'includes/definitions.php';
require_once FUNCS_DIR . 'core.functions.php';

$pid = 13;

$template->assign(PAGE_TITLE, $langs[47]);
$template->assign(PAGE_ID, $pid);

/* Rendering template */

$errors = array();
$step = 1;

$reset_code = null;

if(empty($_POST) == false) {

    if(isset($_POST['email'])) {

        $email = $_POST['email';

        if (email_exists($email) == false)
            $errors[] = $langs[264];

        if (empty($errors)) {

            $reset_code = md5($_POST['email'] + microtime());

            update_email_code($email, $reset_code);

            $data['reset_link'] = get_setting('base_url') . 'forgot_password?reset_code=' . $reset_code;

            send_email_template('forgot_password.tpl', $data, $email, get_setting('site_name') . ' - Password Reset');
        }

    }else{

        $password = $_POST['password'];
        $password_repeat = $_POST['password_repeat'];
        $reset_code = $_POST['reset_code'];

        $member_data = get_member_email_code($reset_code);

        $step = 2;

        if($member_data == false)
            $errors[] = $langs[265];

        if($password != $password_repeat)
            $errors[] = $langs[266];

        if(strlen($password) < get_setting('min_pass_length'))
            $errors[] = $langs[267];

        if(!preg_match('/[A-Z]/', $password))
            $errors[] = $langs[268];

        if (!preg_match('#[0-9]#', $password))
            $errors[] = $langs[269];

        if(empty($errors)){

            $password_hash = hash('sha256', $password);

            if(update_password($member_data['members_id'], $password_hash)){
                redirect('login?pr=true');
            }else{
                $errors[] = $langs[270];
            }

        }

    }

}

if(empty($_GET) == false){

    $reset_code = $_GET['reset_code'];
    $member_data = get_member_email_code($reset_code);

    if(empty($reset_code)){
        $errors[] = $langs[271];
    }else if($member_data == false){
        $errors[] = $langs[272];
    }

    if(empty($errors)){

        $step = 2;

    }

}

$template->assign('reset_code', $reset_code);

$template->assign('errors', $errors);
$template->assign('step', $step);

$template->display($current_template . 'forgot_password.tpl');

【问题讨论】:

  • 发送电子邮件的实际mail() 调用在哪里?
  • 你在这里丢了东西:$email = $_POST['email';
  • 还有send_mail_template()函数在哪里?

标签: php database email forgot-password


【解决方案1】:

当您的脚本不起作用时。首先查看错误日志。在这种情况下,您应该会在此行看到语法错误:

$email = $_POST['email';

替换为:

$email = $_POST['email'];

【讨论】:

  • 是的,复制粘贴时出错。当您输入重置密码的电子邮件时显示此消息:我们已发送一封电子邮件,要求您重置密码。请检查您的垃圾邮件文件夹。但消息不会发送到我输入的电子邮件,并且在错误日志中没有显示任何内容
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 2014-06-07
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多