Форма сброса пароля не работает

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

Всякий раз, когда я набираю электронное письмо, независимо от того, что это, оно говорит: «Недействительное письмо». Любая помощь будет оценена. Кроме того, я немного новичок в PHP, но я понимаю весь код здесь. Мой код ниже:

<?php include "base.php"; ?>
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="style.css" type="text/css" />
<link rel="stylesheet" href="style2.css" type="text/css" />
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Forgot Password</title>
</head>
<body>

<div id="main"><h1>Forgot Password</h1>

<p>If you forgot your password, please enter the email associated with your account, and we will send you a reset link.</p>

<form action="" method="post" name="passwd" id="passwd">
<fieldset>
<label for="emailadd"><div>Email Address:</div></label><input id="emailid" name="emailid" type="text" placeholder="Your Account's Email"><br>
<input type="submit" value="Reset Password" />
</fieldset>
</form>
</div>

<?php

if(!empty($_POST['emailid']))
{
$emailaddress = mysqli_real_escape_string($_POST['emailid']);
if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $emailaddress))  // Validate email address
{
echo '<p id="msg"><center>That is an invalid email address. Please try again.</center></p>';
}
else
{
$query = "SELECT UserID FROM users where  EmailAddress='".$emailaddress."'";
$result = mysqli_query($query);
$Results = mysqli_fetch_array($result);

if(count($Results)==1)
{
$encrypt = md5(XXXXXXXXXXXXXXXXXXX);
echo '<p id="msg"><center>Your password reset link has been sent to your email.</center></p>';
$to=$emailaddress;
$subject="Forgot Password";
$from = '[email protected]';
$body='Hello, <br/> <br/>Your Membership ID is:   '.$Results['id'].' <br><br>Click <a href="http://XXXXXXXXXXX.com/home/forgot/reset.php?encrypt='.$encrypt.'&action=reset">here</a> to reset your password, or follow the link below:<br><br>http://XXXXXXXXXXXX.com/home/forgot/reset.php?encrypt='.$encrypt.'&action=reset <br/> <br/>--<br>XXXXXXXXXXXX<br>Games, Tools, and so much more!';
$headers = "From: " . strip_tags($from) . "\r\n";
$headers .= "Reply-To: ". strip_tags($from) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

mail($to,$subject,$body,$headers);

}
else
{
echo '<p id="msg"><center>Account not found. Please try again.    </center></p>';
}
}
} elseif(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username'])) {

echo "<meta http-equiv='refresh'              content='0;http://www.XXXXXXXXXXXX.com/home/main.php'/>";

} else {

}
//    include("html.inc");
?>

</body>
</html>

Постскриптум Base.php подключается к моей базе данных, а буквы X обозначают либо мое шифрование, либо адрес моего сайта.

Заранее спасибо!

-2

Решение

Следующие функции не работают:

  • mysqli_real_escape_string($_POST['emailid'])
  • mysqli_query($query)

Обе эти функции требуют передачи соединения с БД и в качестве первого параметра.

Рекомендации:

Также убедитесь, что вы начали сеанс, видя, что вы используете их.

Ссылка:


Примечания:

Если вы заметили в этой учебной ссылке, что вы сказали, что вы следовали http://www.phpgang.com/how-to-create-forget-password-form-in-php_381.html

Они передают соединение с обеими этими функциями:

$encrypt = mysqli_real_escape_string($connection,$_GET['encrypt']);

а также

$result = mysqli_query($connection,$query);

Итак, вы должны следовать этому руководству к «Т», что-то, чего ты не делал

Сделайте это и измените базу данных, чтобы она соответствовала этому руководству с их кодом, типами столбцов, правильной длиной и т. Д.

Да, и MD5 не считается безопасным для использования в качестве хеширования пароля.

Используйте одно из следующего:

Другие ссылки:

Важная информация о длине столбца:

Если и когда вы решите использовать password_hash() или crypt, важно отметить, что если длина вашего нынешнего столбца пароля меньше 60, его нужно изменить на это (или выше). В руководстве предлагается длина 255.

Вам нужно изменить длину столбца и начать заново с нового хеша, чтобы он вступил в силу. В противном случае MySQL потерпит неудачу молча.

добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

Примечание: Отображать ошибки следует только в постановке, а не в производстве.

так же как or die(mysqli_error($connection)) в mysqli_query(),

Вы не показали нам, с каким MySQL API вы используете соединение.

«P.S. Base.php подключается к моей базе данных, а буквы X представляют либо мое шифрование, либо адрес моего сайта».

Убедитесь, что вы используете MySQLi API для подключения, видя, что вы используете mysqli_query() и не mysql_ или PDO.

  • Разные API не смешиваются.

Обратитесь к следующему:

Вы также должны убедиться, что почта доступна для вас.

Если нет, то это выходит за рамки этого вопроса.

изменения

mail($to,$subject,$body,$headers);

в

if(mail($to,$subject,$body,$headers)){
echo "Mail sent";
}
else {
echo "Error";
}

и, увидев «Письмо отправлено», mail() сделал свою работу

Если вы видите «Ошибка», то вам нужно выяснить, «почему» это так.

Опять же «вне рамок» вопроса.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]