Monday 3 September 2018

PHP My contact form sends blank e-mails when the page is viewed

My contact form is sending black emails every time I visit the page, and the sends another whenever someone fills out the form and clicks send. I am trying to learn how to validate data for my contact form and have had little luck all day. I know very little php or javascript code as of yet but have done my best from previously written code.

Any ideas?
<form action="" method="post" style="width:100%;">
    Name*<br> <input type="text" name="name" style="width:50%;" ><br/><br/>
    Email*<br> <input type="text" name="email" style="width:50%;"> <br/><br/>
Phone*<br> <input type="text" name="phone" style="width:50%"> <br/><br/>
    <input name="submitted" type="submit" value="Send" >
    <input name="" type="reset" value"Reset">
</form>

<?php
if (isset($_REQUEST['submitted'])) {
    // Initialize error array.
    $errors = array();
    // Check for a name
    if (!empty($_REQUEST['name'])) {
        $name = $_REQUEST['name'];
        $pattern = "/^[a-zA-Z0-9\_]{2,20}/";]
        if (preg_match($pattern,$name)) {
            $name = $_REQUEST['name'];
        } else {
            $errors[] = 'Your Name can only contain _, 1-9, A-Z or a-z 2-20 long.';
        }
    } else {
        $errors[] = 'You forgot to enter your name.';
    }

    //Check for a valid phone number
    if (!empty($_REQUEST['phone'])) {
        $phone = $_REQUEST['phone'];
        $pattern = "/^[0-9\_]{7,20}/";
        if (preg_match($pattern,$phone)) {
            $phone = $_REQUEST['phone'];
        } else {
            $errors[] = 'Your phone number can only be numbers.';
        }
    } else {
        $errors[] = 'You forgot to enter your phone number.';
    }

    //Check for a valid email
    if (!filter_var($_REQUEST['email'], FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'The email provided is not valid.';
    }
} else {
    $email = $_REQUEST['email'];
}

//End of validation
if (empty($errors)) {
    $from = "From: " . $_REQUEST['email'];
    $to = "myemail@myemail.com";
    $subject = "A comment from " . $name . "";

    $message = "Message from " . $name . "
        Phone: " . $phone . "
        Email: " . $_REQUEST['email'] . "";
    mail($to,$subject,$message, $from);
} 

//Print Errors
if (isset($_REQUEST['submitted'])) {
    // Print any error messages.
    if (!empty($errors)) {
        echo '<hr /><h3 >The following occurred:</h3><ul>';
        // Print each error.
        foreach ($errors as $msg) {
            echo '<li>'. $msg . '</li>';
        }
        echo '</ul><h3 >Your mail could not be sent due to input errors.</h3><hr />';
    } else {
        echo '<hr /><h3 align="center" >Your mail was sent. Thank you!</h3><hr /><p>Below is the message that you sent.</p>';
        echo "Message from " . $name . "<br />Phone: ".$phone."<br />Email:" . $email;
    }
}
//End of errors array
?>


You're sending mail outside the if (isset($_POST['submitted'])) block. I think the problem is that you have an extra close brace here:
    //Check for a valid email
    if (!filter_var($_REQUEST['email'], FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'The email provided is not valid.';
    } // <<===== HERE
} else {
    $email = $_REQUEST['email'];
}

As a result, the else clause isn't connected to the email validation, it's connected to if (isset($_POST['submitted'])). So when the form hasn't been submitted, you set $email and then you go into the code that sends email.

0 comments:

Post a Comment