The validation section of my contact.php page is sending the user back to my index.php instead of staying on the contacts.php page so the user can correct the reported error. How can I fix this?

My contact.php code follows:

<?php
if(isset($_POST['submit']))
{

$name = $_POST['name'];
$visitor_email = $_POST['email'];
$message = $_POST['message'];
$type = $_POST['type'];

//Validate first
if(empty($name)||empty($visitor_email)||empty($type)||empty($message)) 
{
    echo "All fields are mandatory!";
  /*  exit; */
}

if(IsInjected($visitor_email))
{
    echo "Bad email value!";
 /*   exit; */
}

    $subject = $_POST['type'];
    $subject2 = "Copy of email sent to foxclone.com";
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $formcontent="From: $name\r\nEmail: $email\r\nMessage: $message";
    if ($subject =="Website Problem") {
            $to="webmaster@foxclone.com" ;
          }
    else {
            $to="help@foxclone.com";
          }

$email_from = $email;
$email_subject = $type;
$email_body = $formcontent.

$headers = "From: $email \r\n";

//Send the email!
mail($to, $subject, $formcontent, $headers) or die("Error1!");
mail($email, $subject2, $formcontent, $headers) or die("Error2!");

//done. redirect to thank-you page.
header('Location: thank-you.html');

// Function to validate against any email injection attempts
function IsInjected($str)
{
  $injections = array('(\n+)',
              '(\r+)',
              '(\t+)',
              '(%0A+)',
              '(%0D+)',
              '(%08+)',
              '(%09+)'
              );
  $inject = join('|', $injections);
  $inject = "/$inject/i";
  if(preg_match($inject,$str))
    {
    return true;
  }
  else
    {
    return false;
    }
}
}   
?> 
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Foxclone</title>

<!--    <meta content-type="text/html" charset="utf-8"> -->
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Links -->
    <link href="https://fonts.googleapis.com/css?family=Montserrat:500,700&display=swap&subset=latin-ext" rel="stylesheet" />
    <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,600&display=swap&subset=latin-ext" rel="stylesheet" />
    <link href="css/bootstrap.css" rel="stylesheet" />
    <link href="css/fontawesome-all.css" rel="stylesheet" />
    <link href="css/swiper.css" rel="stylesheet" />
    <link href="css/magnific-popup.css" rel="stylesheet" />
    <link href="css/styles.css" rel="stylesheet" /> 

    <!-- Favicon  -->
    <link rel="icon" href="images/favicon.png" />
    <!-- a helper script for validating the contact form-->
    <script language="JavaScript" src="js/gen_validatorv31.js" type="text/javascript"></script>
</head>
    <!-- Navbar -->
    <nav class="navbar navbar-expand-md navbar-dark navbar-custom fixed-top">
    <!-- Mobile Menu Toggle Button -->
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-awesome fas fa-bars"></span>
            <span class="navbar-toggler-awesome fas fa-times"></span>
        </button>
    <!-- end of mobile menu toggle button -->
       <div class="collapse navbar-collapse" id="navbarsExampleDefault">
            <ul class="navbar-nav ml-auto">
                <li class="nav-item">
                    <a class="nav-link page-scroll" href="index.php#header">HOME <span class="sr-only">(current)</span></a>
                </li>

            </ul> 
        </div>
    </nav> <!-- end of navbar -->
    <!-- end of navbar -->
   <!-- Header -->
    <header id="header" class="header">
        <div class="header-content">

        </div> <!-- end of header-content -->
    </header> <!-- end of header -->
    <!-- end of header -->

<div id="contact"  class="stylized">
<br />
    <div "myform"> 

  <br />

         <form id="form1" method="POST" action="/">
  <h1>Need help? Have a suggestion? Why not send us an email.</h1>
         <h3>You'll receive a copy for your records</h3>           
            <label>Name</label>
                <input type="text" name="name" >

            <label>Email</label>
                <input type="text" name="email" >

            <select name="type" id="category" size="1">
                <option value=''>Select A Category</option>
                <option value='Questions'>Questions</option>
                <option value="Report Problem">Report Problem</option>
                <option value='Suggestion'>Suggestion</option>
                <option value='Other'>Other</option>
                <option value="Website Problem"> Website Problem</option>
            </select>

<br /><br /> <br />  

            <label>Message</label>
                <textarea  name="message" rows="7"></textarea><br />

            <button type="submit" value="Send" style="margin-top:15px; margin-left: 500px; text-align: center;">Send Email</button>

        <div class="spacer"></div>
<br /><br /><br /><br /><br /><br />  
        </form>
    </div>   <!-- end of form class -->
</div>
<br /><br /><br /><br />

<!--  End of Contact  -->

 <br /><br /> 
<!-- footer  ================================================== -->
<div id="footer">
    <div class="copyright">
        <div class="container">
            <div class="row">
                <div class="col-lg-12"> 
                    <div class="p-small">Copyright © 2019-2020 Andy Hardwick <br />
          Design by Larry Hale</div>

          <p>
           <a href="https://jigsaw.w3.org/css-validator/check/referer">
              <img style="border:0;width:88px;height:31px"
                   src="https://jigsaw.w3.org/css-validator/images/vcss"
                   alt="Valid CSS!" />    </a>
          </p>
                </div>
            </div>
        </div>
    </div>
</div>
          <!-- end footer__top -->

    <script src="js/jquery.min.js"></script> <!-- jQuery for Bootstrap's JavaScript plugins -->
    <script src="js/popper.min.js"></script> <!-- Popper tooltip library for Bootstrap -->
    <script src="js/bootstrap.min.js"></script> <!-- Bootstrap framework -->
    <script src="js/jquery.easing.min.js"></script> <!-- jQuery Easing for smooth scrolling between anchors -->
    <script src="js/swiper.min.js"></script> <!-- Swiper for image and text sliders -->
    <script src="js/jquery.magnific-popup.js"></script> <!-- Magnific Popup for lightboxes -->
    <script src="js/morphext.min.js"></script> <!-- Morphtext rotating text in the header -->
    <script src="js/isotope.pkgd.min.js"></script> <!-- Isotope for filter -->
    <script src="js/validator.min.js"></script> <!-- Validator.js - Bootstrap plugin that validates forms -->
    <script src="js/scripts.js"></script> <!-- Custom scripts -->
</body>
</html>

Dani AI

Generated

Quick summary: as pointed out, the form was submitting to the site root so the POST landed on the homepage instead of the contact handler; confirmed the fix. For anyone who finds this thread later, here are additional checks and small improvements that commonly cause the same symptoms even after correcting the form action.

Common pitfalls and fixes

  • Detect form submission reliably. Don’t rely only on a named submit field (it may be missing). Prefer checking the request method or explicitly name the button so your server-side check always runs.
  • Validate and stop on error. Collect validation errors server-side, show them and repopulate the form instead of echoing messages and continuing to run the mail code. If you do redirect after a successful send, call exit immediately after header('Location: ...').
  • Avoid "headers already sent". Any prior output (echo, stray whitespace, BOM) will prevent header() from working. Remove leading/trailing whitespace and any prints before redirects, or use output buffering.
  • Watch for syntax mistakes. A stray character or dangling punctuation on an assignment line will cause a parse error and fail silently on many hosts — check the server error log.
  • Email and security hardening: validate emails with filter_var(), guard against header injection when building mail headers, check mail() return value, and consider a robust library (PHPMailer/SMTP) for reliability and better error messages.
  • Select and defaults: validate that the category/select is not left at the empty default before accepting the form.

Example skeleton (server side) — replace with your own logic:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // trim+validate $_POST values, build $errors array
  // if $errors: re-render form with errors and old values
  // else: send mail, then header('Location: thank-you.html'); exit;
}

If the problem reappears after fixing the action, check the submit control name, inspect server error logs for parse/headers errors, and confirm there are no stray characters at the top of the PHP file.

Recommended Answers

All 3 Replies

Line 127 says <form id="form1" method="POST" action="/"> which means to post the form data to the homepage of your site, which means the form isn't even working at all. The action should be action="contact.php" instead.

Thanks for that. All fixed.

I'm marking this question as solved. In the future, click the Question Solved toggle :)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.