简体   繁体   中英

E-mail to PHP server side validation in script

Use this site a lot as a reference point, but really struggling with some code.

I'm building a callback form, I originally built client side validation (javascript) but quickly realised I needed server side php validation, so tried to add it to my script. It works in its functionality, apart from when I receive the e-mail no information is displayed. I really can't understand why the $name isn't pulling the info through like it was before when I didn't use the validation. Code is below:

PHP:

<?php

if (isset($_POST['Form'])) {
    import_request_variables("p", "z");
    $missingfields = array();
    $required = array("Name"=>"Name", "Company"=>"Company");

    while (list($var, $val) = each($required)) {
        if (isset($zForm[$var]) && $zForm[$var] != '') {
            // check this value further here
        } else {
            $missingfields[$var] = $val;
        }
    }

    if (count($missingfields)) {
        print "You missed out one or more fields:<br />";

        while(list($var, $val) = each($missingfields)) {
            print $val . "<br />";
        print "Please click back on your browser and enter the required fields.<br />";
        }
    } else {
        /* Subject and E-mail Variables */

$emailSubject = 'Call-back Request';
$webMaster = 'hello@microsoft.com';

/* Gathering Data Variables */

$name = $_POST['Form[Name]'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];
$company = $_POST['company'];
$message = $_POST['message'];

$body = <<<EOD
<br><hr><br>
Name: $name <br>
Email: $email <br>
Telephone: $telephone <br>
Company: $company <br>
Message: $message <br>
EOD;

$headers = "From: $email\r\n";
$headers .= "Content-type: text/html\r\n";
$success = mail($webMaster, $emailSubject, $body, $headers);

/* Results rendered as HTML */

$theResults = <<<EOD
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head>
    <title>Thankyou</title>
    <link href="style.css" rel="stylesheet" type="text/css" media="screen" />  
</head>
<body>
    <div id="content">
        <div id="contactthankyouheader">
            <h2>Thankyou for Contacting Us</h2></br>
        </div>
        <div id="contactthankyou">
            <p>Someone will be in contact with you shortly.</p>
        </div>
        <div id="contactthankyou2">
            <p>Please click the link below to return to the homepage.     
 </p>
        </div>
        <div id="contactthankyoulink">
            <a href="index.htm"><h4>Homepage</h4></a>
        </div>
    </div>
</body>
</html>
EOD;
echo "$theResults";
    }
}

?>

HTML:

<html>
<form method="post" action="callback-function.php">
Name: <input type="text" name="Form[Name]" /> (required)<br />
Company: <input type="text" name="Form[Company]" /> (required) <br />
Age: <input type="text" name="Form[Age]" /><br /><br />
Languages known:<br />
<input type="checkbox" name="Form[Languages][]" value="PHP" checked="checked">    
PHP</input>
para><input type="checkbox" name="Form[Languages][]" value="CPP"> C++</input>
<input type="checkbox" name="Form[Languages][]" value="Delphi"> Delphi</input>
<input type="checkbox" name="Form[Languages][]" value="Java"> Java</input>
<input type="submit" />
</form>
</html>

Form from your form is sent as an array. So you should treat it as an array:

$name = $_POST['Form']['Name'];
$company = $_POST['Form']['Company'];

and you are lacking Email , Message .. etc on your form.

Languages is also an array and you can use implode for list:

$Languages = implode(',', $_POST['Languages']);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM