Я собрал страницу забытого пароля, которая должна вставить токен в мою таблицу базы данных потерянных паролей и отправить пользователю электронное письмо со ссылкой для сброса пароля, но я не получаю электронное письмо и просто получаю сообщение об ошибке на забытом страницу пароля после нажатия кнопки отправки и немного не уверен, в чем проблема. Мой код ниже
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$db = new mysqli("localhost", "username", "password", "databasename");
if(isset($_POST['submit'])){
$email = $_POST['email'];
$stmt = $db->prepare("SELECT * FROM `users` where `customer_email` = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$res = $stmt->get_result();
if($res->num_rows < 1){
echo "No such email has been found";
} else{
$fetch = $res->fetch_assoc();
$userid = $fetch['user_id'];
$token = bin2hex(openssl_random_pseudo_bytes(45));
$from = "[email protected]";
$url = 'https://www.domain.co.uk/account/passwordreset.php?token='.$token;
if(mail($email, $url, $from)){
//if(mail($to,$subject,$message,$url,$headers)){
$stmt = $db->prepare("INSERT INTO `lost_password`(user_id, token) values(?,?)");
$stmt->bind_param('is', $userid, $token);
$stmt->execute();
$to = $email;
$subject = "New Password Instructions";
$message = " Please visit $url to reset your password";
// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
// More headers
$headers .= 'From: <[email protected]>' . "\r\n";
$mail=mail($to,$subject,$message,$headers);
if($stmt->affected_rows == 1){
echo "We have emailed you instructions on how to reset your password";
} else {
echo "there was an error";
}
}
}
}
?>
echo "there was an error";
или около 500 страниц? - person user3783243   schedule 28.12.2019echo "there was an error"
на странице - person Ian Haney   schedule 28.12.2019affected_rows
условной попыткиprintf("Error: %s.\n", $stmt->error);
. Кроме того, это будет отправка 2 электронных писем, это предназначено? - person user3783243   schedule 28.12.2019printf("Error: %s.\n", $stmt->error);
, и он показывает ошибку на странице Ошибка: поле «id» не имеет значения по умолчанию. Была допущена ошибка. Также не следует отправлять только одно электронное письмо, я предполагаю, что это потому, что у меня есть две почтовые строки в коде?if(mail($email, $url, $from)){' and '$mail=mail($to,$subject,$message,$headers);
- person Ian Haney   schedule 28.12.2019lost_password
необходимо обновить свою схему, поэтомуid
автоматически увеличивается. - person user3783243   schedule 28.12.2019if(mail($email, $url, $from)){
следует удалить. Посмотрите, что такое$mail
. stackoverflow.com/questions/4633227/why-mail-fails -in-php Обычно я используюswift
илиphpmailer
, встроенная функция не самая лучшая stackoverflow.com/questions/5335273/ - person user3783243   schedule 28.12.2019if(mail($email, $url, $from)){
, и, судя по тому, что я вижу, почтовая кодировка выглядит нормально, но электронная почта все еще не приходит? Я предпочитаю использовать почту, а не phpmailer, и почтовый код работает на моей странице регистрации, поэтому я пытаюсь сравнить два - person Ian Haney   schedule 28.12.2019mail()
заключается в том, что они более переносимы, поскольку не зависят от каких-либо конкретных конфигураций сервера. Они также значительно упрощают создание электронных писем в формате HTML и использование надлежащего SMTP (что настоятельно рекомендуется). - person Magnus Eriksson   schedule 28.12.2019