Hi Team
I dont have errors i have debugged the application, basically what i am trying to do. When before submiting a form, the form should hold until a user receive an email has an otp, so that can insert and continue. Problem i am experience i am not receiving an email.Maybe its something i am missing, setup everything from the phpmailer because it is working for registering users to the site.
// forgot-password.php
<script> $(document).ready(function() { $('#forgot-password').validate({ rules: { email: { required: true, email: true }, 'new-password': { required: true, minlength: 6 }, 'confirm-password': { required: true, equalTo: '#new-password' } }, messages: { email: { required: 'Please enter your email address', email: 'Please enter a valid email address' }, 'new-password': { required: 'Please enter a password', minlength: 'Your password must be at least 6 characters long' }, 'confirm-password': { required: 'Please enter the same password as above', equalTo: 'Your passwords do not match' } }, errorElement: 'div', errorPlacement: function(error, element) { // Add the Bootstrap "alert" class to the error message error.addClass('alert alert-danger'); // Add the error message after the input element error.insertAfter(element); }, success: function(label) { // Remove the Bootstrap "alert-danger" class from the label label.removeClass('alert-danger'); // Add the Bootstrap "alert-success" class to the label }, submitHandler: function(form) { // Generate a random OTP var otp = Math.floor(100000 + Math.random() * 900000); // Store the email and new password in the session sessionStorage.setItem('email', $("#email").val()); sessionStorage.setItem('newPassword', $("#new-password").val()); sessionStorage.setItem('otp', otp); // Prompt the user to enter the OTP var enteredOtp = prompt("Please enter the OTP sent to your email:"); // If the entered OTP matches the generated OTP, submit the form if (enteredOtp == otp) { // Submit the form to otp-confirmation.php form.action = 'otp-confirmation.php'; form.submit(); } else { alert("Invalid OTP. Please try again."); } } }); }); </script>
// otp-confirmation.php
<?php // Start the session session_start(); // Include the PHPMailer library require_once(__DIR__ . '/sendEmails/vendor/autoload.php'); use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; // Check if the password reset form is submitted if (isset($_POST['submit'])) { // Get the email from the form $email = $_POST['email']; // Include the database connection file require_once "dbconn.php"; // Check if the email exists in the database $sql = "SELECT * FROM users WHERE email = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $email); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows == 1) { // Generate a random OTP and store it in the session $otp = rand(100000, 999999); $_SESSION['otp'] = $otp; $_SESSION['email'] = $email; // Send an email to the user with the OTP $mail = new PHPMailer; $mail->isSMTP(); $mail->SMTPDebug = 0; $mail->Host = 'smtp.outlook.com'; $mail->Port = 587; $mail->SMTPSecure = 'tls'; $mail->SMTPAuth = true; $mail->Username = '[email protected]'; $mail->Password = '***'; $mail->setFrom('[email protected]', 'Your Name'); $mail->addAddress($email); $mail->Subject = 'Password reset OTP'; $mail->Body = 'Dear user,<br><br>Your OTP to reset your password is: ' . $otp; $mail->AltBody = 'Dear user, your OTP to reset your password is: ' . $otp; $mail->isHTML(true); if (!$mail->send()) { $error = 'Error: ' . $mail->ErrorInfo; } else { // Redirect the user to the OTP verification page header("Location: verify_otp.php"); exit(); } } else { // If the email does not exist in the database, display an error message $error = "Email not found. Please try again."; } } ?>