Form Validation not working correctly.

Ztak07

Regular Member
Joined
Jun 23, 2012
Messages
389
Reaction score
117
Hi,

Been trying to get my website's contact form to send;
I don't know why but the code seems to be broken.

HTML:

HTML:
    <div id="contact">
        
        <div class="bg2"></div>
    
        <div class="dotted-bar3">
            <a href="#intro"><span class="top2"></span></a>
        </div>        
    
        <div class="container">
        
            <div class="sixteen columns">
                <h2><span class="line"></span><img src="http://www.blackhatworld.com/blackhat-seo/images/star-white.png" alt="" /> Contact <img src="http://www.blackhatworld.com/blackhat-seo/images/star-white.png" alt="" /><span class="line2"></span></h2>
                <p class="headline">Fill out the form and we will be in contact shortly. Thank you</p>
            </div> <!-- end sixteen columns -->    
    
            <div class="clear"></div>
            
            <div class="eight columns">
                <div class="contact-form">
                    
                    <div class="done">
                        <b>Thank you!</b> I have received your message. 
                    </div>
                
                    <form method="post" action="process.php">
                        <p>name</p>
                        <input type="text" name="name" class="text" />
                        
                        <p>email</p>
                        <input type="text" name="email" class="text" id="email" />

                        <p>message</p>
                        <textarea name="comment" class="text"></textarea>

                        <input type="submit" id="submit" value="send" class="submit-button" />
                    </form>
                        
                </div> <!-- end contact-form -->
            </div> <!-- end eight columns -->
            
            <div class="eight columns">
            
                
                
            <div class="contact-info">
                    <div class="four columns alpha">
                        <p><img src="http://www.blackhatworld.com/blackhat-seo/images/icn-email.png" alt="" /> [email protected]</p>
                        <p><img src="http://www.blackhatworld.com/blackhat-seo/images/icn-phone.png" alt="" /> + (218) 203-3418 </p>
                    </div>
                    
                    
                    </div>
                </div> <!-- end contact-info -->
                
            </div> <!-- end eight columns -->
            
        </div> <!-- end container -->
            
        <div class="copyright">
            <p>© 2012 All rights reserved</p>
        </div> <!-- end copyright -->
            
    </div> <!-- end contact -->

PHP:

PHP:
<?php

//Retrieve form data. 
//GET - user submitted data using AJAX
//POST - in case user does not support javascript, we'll use POST instead
$name = ($_GET['name']) ? $_GET['name'] : $_POST['name'];
$email = ($_GET['email']) ?$_GET['email'] : $_POST['email'];
$website = ($_GET['website']) ?$_GET['website'] : $_POST['website'];
$comment = ($_GET['comment']) ?$_GET['comment'] : $_POST['comment'];

//flag to indicate which method it uses. If POST set it to 1
if ($_POST) $post=1;

//Simple server side validation for POST data, of course, you should validate the email
if (!$name) $errors[count($errors)] = 'Please enter your name.';
if (!$email) $errors[count($errors)] = 'Please enter your email.'; 
if (!$comment) $errors[count($errors)] = 'Please enter your comment.'; 

//if the errors array is empty, send the mail
if (!$errors) {

    //recipient
    $to = 'Your Name <email>';     // <--------- change your email here
    //sender
    $from = $name . ' <' . $email . '>';
    
    //subject and the html message
    $subject = 'Message from ' . $name;    
    $message = '
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head></head>
    <body>
    <table>
        <tr><td>Name</td><td>' . $name . '</td></tr>
        <tr><td>Email</td><td>' . $email . '</td></tr>
        <tr><td>Message</td><td>' . nl2br($comment) . '</td></tr>
    </table>
    </body>
    </html>';

    //send the mail
    $result = sendmail($to, $subject, $message, $from);
    
    //if POST was used, display the message straight away
    if ($_POST) {
        if ($result) echo 'Thank you! We have received your message.';
        else echo 'Sorry, unexpected error. Please try again later';
        
    //else if GET was used, return the boolean value so that 
    //ajax script can react accordingly
    //1 means success, 0 means failed
    } else {
        echo $result;    
    }

//if the errors array has values
} else {
    //display the errors message
    for ($i=0; $i<count($errors); $i++) echo $errors[$i] . '<br/>';
    echo '<a href="form.php">Back</a>';
    exit;
}


//Simple mail function with HTML header
function sendmail($to, $subject, $message, $from) {
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= 'From: ' . $from . "\r\n";
    
    $result = mail($to,$subject,$message,$headers);
    
    if ($result) return 1;
    else return 0;
}

?>

Jquery:

Code:
$(document).ready(function() {
    
    //if submit button is clicked
    $('#submit').click(function () {        
        
        //Get the data from all the fields
        var name = $('input[name=name]');
        var email = $('input[name=email]');
        var website = $('input[name=website]');
        var comment = $('textarea[name=comment]');

        //Simple validation to make sure user entered something
        //If error found, add hightlight class to the text field
        if (name.val()=='') {
            name.addClass('hightlight');
            return false;
        } else name.removeClass('hightlight');
        
        if (email.val()=='') {
            email.addClass('hightlight');
            return false;
        } else email.removeClass('hightlight');
        
        if (comment.val()=='') {
            comment.addClass('hightlight');
            return false;
        } else comment.removeClass('hightlight');
        
        //organize the data properly
        var data = 'name=' + name.val() + '&email=' + email.val() + '&website=' + 
        website.val() + '&comment='  + encodeURIComponent(comment.val());
        
        //disabled all the text fields
        $('.text').attr('disabled','true');
        
        //show the loading sign
        $('.loading').show();
        
        //start the ajax
        $.ajax({
            //this is the php file that processes the data and send mail
            url: "process.php",    
            
            //GET method is used
            type: "GET",

            //pass the data            
            data: data,        
            
            //Do not cache the page
            cache: false,
            
            //success
            success: function (html) {                
                //if process.php returned 1/true (send mail success)
                if (html==1) {                    
                    //hide the form
                    $('.form').fadeOut('slow');                    
                    
                    //show the success message
                    $('.done').fadeIn('slow');
                    
                //if process.php returned 0/false (send mail failed)
                } else alert('Sorry, unexpected error. Please try again later.');                
            }        
        });
        
        //cancel the submit button default behaviours
        return false;
    });    
});
 
From the look of the code, it seems like to get them somewhere but you don't understand it.

Can you be more specific as what kind of error you get when running the code?
 
If you submit the form and check the traffic, you 'll see that process.php dies with a 500 Internal Error.

My guess is it dies in the mail() function but you 'll have to debug to see.
 
Log in to your ftp, see if you can find the error log, download it and open it in text editor. I usually
do that when I get script error.
 
If the problem is indeed on the mail() function, it means that either

a) you are passing wrong parameters to it (e.g. empty "to")
b) your host has either disabled it or it 's not configured appropriately to support it.

Some small debugging will show if it 's (a) or (b). Create a test file where the only thing you have is a mail() function with hardcoded arguments. If it fails, it 's (b).
 
I have 0 knowledge of PHP so I can't tell what is wrong and if it is the mailto functon. How would I check if that is indeed the error? Please someone help me
 
As jazzc said, try a simple script to see if the mail() function is working on your host. Something like this:
Code:
<?php
$message = "This is your test message.";
mail('YOUR@EMAIL', 'TEST EMAIL', $message);
?>

Read up more here:

Code:
http://php.net/manual/en/function.mail.php

HTH
ND
 
Back
Top