Я пытаюсь отобразить сообщения об ошибках.Если я использую функцию exit()
вместо записи всех ошибок в переменную сообщения, тогда код работает нормально, но сообщения об ошибках по-прежнему не отображаются на той же странице, я перехожу на другую страницу.
Я хочу, чтобы ошибки отображались на той же странице при каждом нажатии кнопки отправки.
Это страница index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Reset Password</title>
</head>
<body>
<a href="request-reset.php">Forgot password?</a>
</body>
</html>
Это страница request-reset.php
<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'db.php';
if(isset($_POST['email']) && $_POST['email'] != "") {
$emailTo = $_POST['email'];
if(!filter_var($emailTo, FILTER_VALIDATE_EMAIL)) {
echo "ERROR: Email is invalid";
exit();
}
$code = uniqid(true);
$emailCheck = mysqli_query($connection, "SELECT email FROM users WHERE email = '$emailTo'");
if(mysqli_num_rows($emailCheck) > 0) {
$query = mysqli_query($connection, "INSERT INTO reset_passwords(code, email) VALUES('$code', '$emailTo')");
if(!$query) {
exit("Error");
}
}
else {
exit("Email does not exist in our database!");
}
$mail = new PHPMailer(true); // Passing `true` enables exceptions
try {
//Server settings
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'ramanath781@gmail.com'; // SMTP username
$mail->Password = '11111111111'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
//Recipients
$mail->setFrom('ramanath784@gmail.com', 'Music Online');
$mail->addAddress($emailTo); // Add a recipient
$mail->addReplyTo('no-reply@ramanath.com', 'No Reply');
//Content
$url = "https://" . $_SERVER["HTTP_HOST"] . dirname($_SERVER["PHP_SELF"]) . "/reset-password.php?code=$code";
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Request For Password Change';
$mail->Body = "<h1>You requested a password reset</h1>
Click <a href='$url'>this link</a> to change the password";
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
exit();
}
?>
<?php
include("header.php");
include("forgot-password-form.php");
include("footer.php");
?>
Это страница reset-password.php
<?php
include("db.php");
if(!isset($_GET['code'])) {
exit("Can't find page!");
}
$message = null;
$code = $_GET['code'];
$getEmailQuery = mysqli_query($connection, "SELECT email FROM reset_passwords WHERE code = '$code'");
if(mysqli_num_rows($getEmailQuery) == 0) {
exit("<h1>Can't find page!</h1>");
}
if(isset($_POST['submit'])) {
$newPassword1 = mysqli_real_escape_string($connection, $_POST['newPassword1']);
$newPassword2 = mysqli_real_escape_string($connection, $_POST['newPassword2']);
if(!isset($_POST['newPassword1']) || !isset($_POST['newPassword2'])) {
$message = "ERROR: Not all passwords have been set";
}
if($_POST['newPassword1'] == "" || $_POST['newPassword2'] == "") {
$message = "ERROR: Please fill in all fields";
}
$newPassword1 = $_POST['newPassword1'];
$newPassword2 = $_POST['newPassword2'];
if($newPassword1 != $newPassword2) {
$message = "ERROR: Your new passwords do not match";
}
if(preg_match("/[^A-Za-z0-9]/", $newPassword1)) {
$message = "ERROR: Your password must only contain alphanumeric characters";
}
if(strlen($newPassword1) > 20 || strlen($newPassword1) < 8) {
$message = "ERROR: Your password must be between 8 and 20 characters";
}
$pw = $_POST['newPassword1'];
$pw = md5($pw);
$row = mysqli_fetch_array($getEmailQuery);
$email = $row['email'];
$query = mysqli_query($connection, "UPDATE users SET password = '$pw' WHERE email = '$email'");
if($query) {
$query = mysqli_query($connection, "DELETE FROM reset_passwords WHERE code = '$code'");
$message = "Password updated";
}
else {
$message = "Something went wrong!";
}
}
?>
<?php
include("header.php");
?>
<form id="register-form" role="form" autocomplete="off" class="form" method="post">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="password" name="newPassword1" placeholder="New password" class="form-control" type="password">
</div>
<span><?php echo $message; ?></span>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="password" name="newPassword2" placeholder="Confirm password" class="form-control" type="password">
</div>
<span><?php echo $message; ?></span>
</div>
<div class="form-group">
<input name="submit" class="btn btn-lg btn-primary btn-block" value="Reset Password" type="submit">
</div>
<input type="hidden" class="hide" name="token" id="token" value="">
</form>
<?php
include("footer.php");
?>