Ivan
Ivan

Reputation: 29

PHP form validation doesn't work when submited?

When I fill out the form and click submit button my validation doesn't show or work and it is supposed to show errors if it fails. It just redirects to the same page (index.php), and that's it. Also my custom css doesn't change when I put some changes to the classes. Here is my code:

code structure:

Project
|    
+-- includes
|   |  
|   +-- footer.php
|   +-- form_process.php
|   +-- header.php  
+-- public
|   |
|   +-- main.js
|   +-- style.css
+-- vendor
|
+-- composer.json
+-- index.php

style.css

.error
{
   color:red;
}

.success
{
   color:#ff9966;
   text-align:center;
   font-weight:bold;
   font-size:15px;
}

index.php:

<?php include 'includes/header.php'; ?>
<?php include 'includes/form_process.php'; ?>

<div class="container">  
   <form id="contact" action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
      <h2>Contact</h2>
      <div class="form-group">
         <input type="text" class="form-control" placeholder="Enter company name:" value="<?php $company_name; ?>" name="company_name">
         <span class="error"> <?php $company_name_error; ?> </span>
      </div>
      <div class="form-group">
         <input type="text" class="form-control" placeholder="Enter your name:" value="<?php $user_name; ?>" name="user_name">
         <span class="error"> <?php $user_name_error; ?> </span>
      </div>
      <div class="form-group">
         <input type="text" class="form-control" placeholder="Enter your surname:" value="<?php $user_surname; ?>" name="user_surname">
         <span class="error"> <?php $user_surname_error; ?> </span>
      </div>
      <div class="form-group">
         <input type="text" class="form-control" placeholder="Enter your email:" value="<?php $email; ?>" name="email">
         <span class="error"> <?php $email_error; ?> </span>
      </div>
      <div class="form-group">
         <input type="text" class="form-control" placeholder="Enter your number:" value="<?php $number; ?>" name="number">
         <span class="error"> <?php $number_error; ?> </span>
      </div>
      <div class="form-group">
         <textarea type="text" class="form-control" placeholder="Type your message here..." <?php $message; ?> rows="6" name="message"></textarea>
      </div>
      <div class="form-group">
         <button class="btn btn-success" type="submit" name="submit" id="contact-submit">Submit</button>
      </div>
      <div class="success"> <?php $success; ?> </div>
  </form>
</div>
<?php include 'includes/footer.php'; ?>

form_process.php:

<?php

require_once 'vendor/autoload.php';

$company_name_error = $user_name_error = $user_surname_error = $email_error = $number_error = "";
$company_name = $user_name = $user_surname = $email = $number = $message = $success = "";

function test_input($data)
{
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["company_name"])) {
       $company_name_error = "Company name is required!!!";
   } else {
       $company_name = test_input($_POST["company_name"]);
       if (!preg_match("/^[a-zA-Z ]*$/", $company_name)) {
        $company_name_error = "Only letters and white spaces are allowed!!!";
     }
   }

   if (empty($_POST["user_name"])) {
       $user_name_error = "User name is required!!!";
   } else {
       $user_name = test_input($_POST["user_name"]);
       if (!preg_match("/^[a-zA-Z ]*$/", $user_name)) {
        $user_name_error = "Only letters and white spaces are allowed!!!";
       }
   }

   if (empty($_POST["user_surname"])) {
       $user_surname_error = "User surname is required!!!";
    } else {
       $user_surname = test_input($_POST["user_surname"]);
       if (!preg_match("/^[a-zA-Z ]*$/", $user_surname)) {
        $user_surname_error = "Only letters and white spaces are allowed!!!";
      } 
    }

    if (empty($_POST["email"])) {
       $email_error = "Email is required!!!";
    } else {
       $email = test_input($_POST["email"]);
       if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $email_error = "Invalid email format!!!";
       }
    }

    if (empty($_POST["number"])) {
       $number_error = "Number is required!!!";
    } else {
       $number = test_input($_POST["number"]);
       if (!preg_match("/^[0-9+\-\.\/\(\) ]{6,30}$/", $number)) {
        $number_error = "Enter phone number from 6 to 30 characters!!!";
       }
    }

    if (empty($_POST["message"])) {
       $message = "";
    } else {
       $message = test_input($_POST['message']);
    }
}

Upvotes: 1

Views: 53

Answers (1)

twain
twain

Reputation: 1325

It seems like you never echo any of the variables in your index.php

Your <?php $number_error; ?> inside the <span class="error"> for example has either to be <?= $number_error; ?> or <?php echo $number_error; ?>

Upvotes: 3

Related Questions