Проверка формы phpmailer на одной странице не работает должным образом.Как отображать сообщения об ошибках на той же странице? - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь отобразить сообщения об ошибках.Если я использую функцию 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");
 ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...