继续收到错误消息msg使用我的重置传递将数组发送到字符串转换

时间:2017-07-30 11:13:54

标签: php arrays email localhost

Notice: Array to string conversion in C:\wamp\www\myphpfile\reset_pass_form.php on line <i>33</i>

An email has been sent for you to reset your password!

我已经在我的电子邮箱中检查了我是否获得了正确的user_id =值&amp; reset_token = value

reset_pass_form.php

if ( !empty($_POST) && !empty($_POST['forgot_emailpass']) ) { 

$email = escape_data($_POST['forgot_emailpass']);

$result = $heidisql->prepare("SELECT * FROM users WHERE email_address='$email'");
$result->execute();

$user = $result->fetch();

    If($user) {

        session_start();

        $reset_token = random_str(30);
        $new_hashtoken = bin2hex($reset_token);

        $sql = "UPDATE users "
                . "SET reset_token= '$new_hashtoken', "
                . "reset_allocated_time= now() "
                . "WHERE user_id='$user' "; // <- Error is here!

        $reset_pass = $heidisql->prepare($sql);

        $reset_pass->execute();

    // Send registration confirmation link (reset.php)
    $to= $email;
    $from = "smtp.intnet.mu";
    $subject = 'Reset Password';

    //Compose a simple HTML email msg
    $message = "<html><body>";
    $message .= "<h1 style='color: darkblue;'> Hi, there you</h1>";
    $message .= "<p><b>Email:</b> $email</p>";
    $message .= "<p>To reset your password, please click on the given link below: </p>";
    $message .= "<a href='http://localhost:8080/myphpfile/reset_pass_form.php?user_id=".$user['user_id']."&reset_token=".$new_hashtoken. " '> Click Here</a>"; //http://localhost:8080/myphpfile/reset_pass_form.php?
    $message .= "</body></html>";

    $headers = 'From:' .$from. "\r\n" . // Creating the email headers // To send an HTML mail, content-type must be set to HTML
                        'Reply-To: '.$from. "\r\n" .
                        'MIME-Version: 1.0' . "\r\n" . 
                        'Content-type: text/html; charset=iso-8859-1' . "\r\n" .
                        'X-Mailer: PHP/' . phpversion();

    if (mail($to, $subject, $message, $headers)) { // Sending email // email_to, subject, body,email_from

            echo 'An email has been sent for you to reset your password!'; // As you can see above the email is being sent
            exit();

        } else {

            echo'Server failed to sent message, please try again later.';
            exit();

        }

    }
}

在我的数据库中,我的 reset_token 仍为为空,而不是$ new_hashtoken值,我的 reset_allocated_time 也是如此< / p>

2 个答案:

答案 0 :(得分:0)

print_r $user变量并使用where子句中数组的键。

$sql = "UPDATE users "
                . "SET reset_token= '$new_hashtoken', "
                . "reset_allocated_time= now() "
                . "WHERE user_id=$user['user_id'] "; // <- user id or what ever the key is

答案 1 :(得分:0)

$user = $result->fetch();可能会返回一个数组。它可以是用户数组或用户数组。尝试var_dump($user);检查它所拥有的内容。

如果它返回一组用户:

$user[0]->id; // in case it was an array of user objects
OR
$user[0]['id']; // in case it was an array of user arrays

如果它返回用户数组:

$user['id'];

此外,我的other answer可能会帮助您了解如何更好地访问数组和对象。