Doug Posted yesterday at 11:44 AM Share Posted yesterday at 11:44 AM Hi all, I suspect that there may be a sample solution for my problem but after a week of trying various solutions I am still stumped. The code blow validates the two variables. This works if i do not send the details to form.php, so the line: <form name="form" action="" method="POST"> will validate the data and work fine. However if i want to send the details to form.php to send to my email: <form name="form" action="form.php" method="POST">. the validation stops working and I can put anything on the form and it arrives in my email with no validation Why would this be? Both coding below. this is validation code <?php $user = ['name' => '', 'age' => '', 'terms' => '', ]; $errors = ['name' => '', 'age' => '', 'terms' => false, ]; $message = ''; if ($_SERVER['REQUEST_METHOD'] == 'POST') { //if from submitted // validation filters $validation_filters['name']['filter'] = FILTER_VALIDATE_REGEXP; $validation_filters['name']['options']['regexp'] = '/^[A-z]{2,10}$/'; $validation_filters['age']['filter'] = FILTER_VALIDATE_INT; $validation_filters['age']['options']['min_range'] = 16; $validation_filters['age']['options']['max_range'] = 65; $user = filter_input_array(INPUT_POST, $validation_filters); // validate data //create error messages $errors['name'] = $user['name'] ? '' : 'Name must be 2-10 letters using A-z'; $errors['age'] = $user['age'] ? '' : 'You must be 16-65'; $invalid = implode($errors); if ($invalid) { $message = 'Please correct the following errors: '; } else { $message = 'Thank you, your data is valid'; } //Sanitize Data $user['name'] = filter_var($user['name'], FILTER_SANITIZE_FULL_SPECIAL_CHARS); $user['age'] = filter_var($user['age'], FILTER_SANITIZE_NUMBER_INT); } ?> <?php include 'includes/header.php'; ?> <?= $message ?> <form name="form" action="form.php" method="POST"> Name: <input type="text" name="name" value="<?= $user['name'] ?>"> <span class="error"><?= $errors['name'] ?></span> Age: <input type="text" name="age" value="<?= $user['age'] ?>"> <span class="error"><?= $errors['age'] ?></span><br> <input type="submit" value="Submit"> </form> . This is form.php <?php $name = $_POST['name']; $age = $_POST['age']; $to = 'myemail.com'; $subject = 'Contact'; $msg = "Name: $name\n" . "Age: $age\n"; mail($to, $subject, $msg, 'from:' . myemail.com); ?> <br /> <?php echo 'Thanks ' . $name . ' We have your info!<br />'; echo "Details: <br />"; echo 'name: ' . $name . '<br />'; echo 'age: ' . $age . '<br />'; ?> <a href="validate-form-using-filters.php" > GO back to form</a> Apologies for all the code but at this point in time I think there must be something other than form action at play here. All help apricated. Quote Link to comment https://forums.phpfreaks.com/topic/329921-validation-works-but-no-email-sent-validation-off-email-sent/ Share on other sites More sharing options...
Olumide Posted yesterday at 12:42 PM Share Posted yesterday at 12:42 PM The validation fails because the file containing the validation logic is never executed when the form is submitted. The standard and most effective solution is to handle everything in one file. The form page should be responsible for: Displaying the form. Receiving the submitted data. Validating the data. If invalid, re-displaying the form with errors. If valid, performing the final action (like sending an email). You just need to move the email-sending logic from form.php into the else block of your validation file. Here is the corrected and combined code. You can replace the entire contents of your first file with this. You will no longer need form.php at all. <?php // 1. SETUP $user = ['name' => '', 'age' => '']; $errors = ['name' => '', 'age' => '']; $message = ''; $form_submitted_successfully = false; // A flag to know when to hide the form // 2. PROCESS FORM IF SUBMITTED if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Validation filters $validation_filters['name']['filter'] = FILTER_VALIDATE_REGEXP; $validation_filters['name']['options']['regexp'] = '/^[A-z]{2,10}$/'; $validation_filters['age']['filter'] = FILTER_VALIDATE_INT; $validation_filters['age']['options']['min_range'] = 16; $validation_filters['age']['options']['max_range'] = 65; $user_input = filter_input_array(INPUT_POST, $validation_filters); // Create error messages $errors['name'] = $user_input['name'] ? '' : 'Name must be 2-10 letters using A-z'; $errors['age'] = $user_input['age'] ? '' : 'You must be between 16 and 65'; // Sanitize the original POST data to redisplay it safely in the form $user['name'] = filter_var($_POST['name'], FILTER_SANITIZE_FULL_SPECIAL_CHARS); $user['age'] = filter_var($_POST['age'], FILTER_SANITIZE_NUMBER_INT); // Check if there are any errors by joining all error messages $invalid = implode($errors); // 3. DECIDE WHAT TO DO NEXT if ($invalid) { // If there are errors, show an error message $message = 'Please correct the following errors:'; } else { // If data is valid, SEND THE EMAIL $to = '[email protected]'; // Use a real email address $subject = 'Contact Form Submission'; $msg = "Name: {$user['name']}\n" . "Age: {$user['age']}\n"; $headers = 'From: [email protected]'; // It's good practice to set a From header // The mail() function returns true on success, false on failure if (mail($to, $subject, $msg, $headers)) { $message = 'Thank you, your data has been sent!'; $form_submitted_successfully = true; // Set flag to true } else { $message = 'Sorry, there was an error sending your message. Please try again later.'; } } } ?> <?php // include 'includes/header.php'; // Assuming you have this file ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Validation Form</title> <style> .error { color: red; font-size: 0.8em; display: block; } body { font-family: sans-serif; } input { margin-bottom: 10px; } form { border: 1px solid #ccc; padding: 20px; max-width: 400px; } .message { padding: 10px; background-color: #e0e0e0; margin-bottom: 15px; } </style> </head> <body> <h1>Contact Us</h1> <?php if ($message): ?> <p class="message"><?= $message ?></p> <?php endif; ?> <?php // Only show the form if it hasn't been submitted successfully if (!$form_submitted_successfully): ?> <form name="form" action="" method="POST"> Name: <input type="text" name="name" value="<?= htmlspecialchars($user['name']) ?>"> <span class="error"><?= $errors['name'] ?></span><br> Age: <input type="text" name="age" value="<?= htmlspecialchars($user['age']) ?>"> <span class="error"><?= $errors['age'] ?></span><br> <input type="submit" value="Submit"> </form> <?php endif; ?> </body> </html> 1 Quote Link to comment https://forums.phpfreaks.com/topic/329921-validation-works-but-no-email-sent-validation-off-email-sent/#findComment-1657337 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.