2015-01-19 3 views
0

Хорошо, я попробовал еще раз, на этот раз я удалил несколько открывающих/закрывающих тегов php. Итак, ниже приведен один большой фрагмент кода php. Если я заполню форму и отправлю, перенаправление работает, и я получаю электронную почту - все это отлично работает. Последней проблемой является проверка - я могу отправлять пустые поля и перенаправлять на страницу благодарности - она ​​не предупреждает пользователей о заполнении полей ...PHP порядок порядка функций

Так почему же теперь валидация не работает ??? Спасибо за помощь ребята.

<?php 
// define variables and set to empty values 
$fname = $lname = $email = $phone = $location = $size = $pvtype = $message = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $company = test_input($_POST["company"]); 
    $fname = test_input($_POST["first-name"]); 
    $lname = test_input($_POST["last-name"]); 
    $email = test_input($_POST["email"]); 
    $phone = test_input($_POST["phone"]); 
    $address = test_input($_POST["address"]); 
    $city = test_input($_POST["city"]); 
    $provincestate = test_input($_POST["provincestate"]); 
    $country = test_input($_POST["country"]); 
    $location = test_input($_POST["location"]); 
    $size = test_input($_POST["size"]); 
    if(isset($_POST["type"])){ $type = $_POST['type'];} 
    $message = test_input ($_POST["message"]); 
} 

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

// define variables and set to empty values 
$companyErr = $fnameErr = $lnameErr = $emailErr = $phoneErr = $addressErr = $cityErr = $provincestateErr = $countryErr = $locationErr = $sizeErr = $typeErr = $messageErr =""; 
$company = $fname = $lname = $email = $phone = $address = $city = $provincestate = $country = $location = $size = $type =""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

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

    if (empty($_POST["first-name"])) { 
    $fnameErr = "First name is required"; 
    } else { 
    $fname = test_input($_POST["first-name"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$fname)) { 
     $fnameErr = "Only letters and white space allowed"; 
    } 
    }  

    if (empty($_POST["last-name"])) { 
    $lnameErr = "Last name is required"; 
    } else { 
    $lname = test_input($_POST["last-name"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$lname)) { 
     $lnameErr = "Only letters allowed"; 
    } 
    } 

    if (empty($_POST["email"])) { 
    $emailErr = "Email is required"; 
    } else { 
    $email = test_input($_POST["email"]); 
    // check if e-mail address is well-formed 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $emailErr = "Invalid email format"; 
    } 
    } 

    if (empty($_POST["phone"])) { 
    $phoneErr = "Phone number is required"; 
    } else { 
    $phone = test_input($_POST["phone"]); 
    // check if phone number only contains 10 digits with no formatting 
    if (!preg_match("/^[0-9]{10}+$/",$phone)) { 
     $phoneErr = "Only enter a 10 digit number"; 
    } 
    } 

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

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

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

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


    if (empty($_POST["location"])) { 
    $locationErr = "Location is required"; 
    } else { 
    $location = test_input($_POST["location"]); 
    // check if location only contains letters 
    if (!preg_match("/^[a-zA-Z ]*$/",$location)) { 
     $locationErr = "Please enter a city"; 
    } 
    } 

if (empty($_POST["size"])) { 
    $sizeErr = "Please enter a number"; 
    } else { 
    $size = test_input($_POST["size"]); 
    } 

    if (empty($_POST["type"])) { 
    $typeErr = "Please select 1"; 
    } else { 
    $type = test_input($_POST["type"]); 
    } 

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

$myemail = '[email protected]';//<-----Put Your email address here. 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    $to = $myemail; 
    $email_subject = "Inquiry from: $fname $lname"; 
    $email_body = "You have received a new inquiry from:". 
    "\n 
    \n Name: $fname $lname \n Email: $email \n Phone Number: $phone 
    \n Address: $address \n City: $city \n Province/State: $provincestate \n Country: $country 
    \n I have a project in: $location \n The project type is: $type \n The estimated project size is: $size 
    \n Message: $message"; 

    $headers = "From: $myemail\n"; 
    $headers .= "Reply-To: $email"; 

    mail($to,$email_subject,$email_body,$headers); 

    //redirect to the 'thank you' page 
    header('Location: thankyou.html'); 
    exit(); 
} 
?> 
+1

_ "очевидная проблема с выпуском" _ Я знаю, что это _общественный, но можете ли вы указать на это? – Halcyon

+0

Я заплачу кому-нибудь, чтобы помочь мне разобраться в этом раз и навсегда. Я потратил слишком много времени на это, и я ничего не знаю о PHP - все учебники в мире, которые я нашел, не помогают мне. –

+0

Я думал, что это было очевидно из-за его местоположения в коде ??? Я новичок в dev. –

ответ

1

header() должен прийти перед любым выходом, так что наличие его в нижней части не будет работать. Прямо сейчас у вас действительно нет функции электронной почты. Вы можете обернуть этот нижний кусок кода в функцию sendEmail. Затем поместите вызов функции в конец if ($_SERVER["REQUEST_METHOD"] == "POST") {. Вам нужно будет передать все переменные в функцию. Или вы можете передать $ _POST, и вы будете чистить переменную в одной функции.

+0

Хорошо, я сделал то, что предложил хартнет. Переместил код обратно в начало и выполнил проверку запроса. Таким образом, загрузка страницы contact.php теперь показывает форму и т. Д., Но после отправки страница загружается на пустую страницу «contact.php». Так близко ... что еще, по-твоему, мне не хватает? –

+0

Вы фигурные скобки '{}' вокруг бит кода электронной почты. Они не нужны и могут вызвать некоторые проблемы. – dan08

+0

Я заметил в вашем обновленном коде выше, у вас есть:?> Затем пустая строка, чем khartnett

0

Переместите часть электронной почты над html, где она была перенаправлена ​​автоматически раньше. Вам нужно добавить чек, чтобы узнать, был ли запрос на отправку до отправки электронной почты и перенаправления. Сразу после установки $ myemail есть открытая скобка. Измените это на:

if ($_SERVER["REQUEST_METHOD"] == "POST") {