Почему я получаю сообщение об ошибке только для некоторых полей формы? - PullRequest
2 голосов
/ 24 августа 2011

Я недавно загрузил html-форму с ее php-скриптом на сервер Godaddy, и после заполнения полей формы я получил ошибку, в которой было «неожиданно»; «» в конце набора строк.После некоторого устранения неполадок, помощи члена семьи, который программирует и просматривая веб-сайт PHP.net, я изменил «||» на «&&», и ошибка больше не возникала.Однако я получил другую ошибку и не внес никаких других изменений, кроме описанных мною.Это ошибка:

Мы очень сожалеем, но в форме, которую вы отправили, были обнаружены ошибки.Эти ошибки отображаются ниже.

"Введенный вами адрес электронной почты не является действительным. Введенное вами имя не является действительным. Введенный вами адрес не является действительным. Почтовый индексВы ввели, кажется, не действительным. Введенный вами E-mail не является действительным. Введенный вами E-mail (в поле проверки) не является действительным. Введенный вами номер телефона не является действительным.Введенный вами номер ячейки не является действительным. Введенный вами номер факса не является действительным. Введенный вами временной интервал не выглядит действительным. Количество не является действительным. Введенные вами конкретные единицы делаютне представляется действительным. Введенная вами Запрошенная дата завершения не является действительной. Введенный вами адрес выставления счета не является действительным. Введенный вами почтовый индекс не действителен.

Пожалуйста вернитесь и исправьте эти ошибки.

Я проверил мой HTML на максимальный размерth в символах, и другие параметры для полей формы, которые кажутся недействительными, и ни один из параметров не нарушен или неправильно настроен, насколько я могу судить.Вот HTML и PHP для этих строк (вам нужна дополнительная информация?):

Ссылка на форму HTML:

Код PHP:

<?php
if(isset($_POST['email'])) {

// EDIT THE 2 LINES BELOW AS REQUIRED
$email_to = "presto423@yahoo.com";
$email_subject = "Request Form Data submitted by...";


function died($error) {
    // your error code can go here
    echo "We are very sorry, but there were error(s) found with the form you submitted. ";
    echo "These errors appear below.<br /><br />";
    echo $error."<br /><br />";
    echo "Please go back and fix these errors.<br /><br />";
    die();
}

// validation expected data exists
if(!isset($_POST['fname']) &&
    !isset($_POST['minit']) &&
    !isset($_POST['lname']) &&
    !isset($_POST['cname']) &&
    !isset($_POST['address']) &&
    !isset($_POST['city']) &&
    !isset($_POST['state']) &&
    !isset($_POST['zipcode']) &&
    !isset($_POST['email_from']) &&
    !isset($_POST['vemail']) &&
    !isset($_POST['phone']) &&
    !isset($_POST['cell']) &&
    !isset($_POST['fax']) &&
    !isset($_POST['workbefore']) &&
    !isset($_POST['referral']) &&
    !isset($_POST['services']) &&
    !isset($_POST['timeframe']) &&
    !isset($_POST['budget']) &&
    !isset($_POST['position']) &&
    !isset($_POST['quantity']) &&
    !isset($_POST['units']) &&
    !isset($_POST['specunits']) &&
    !isset($_POST['reqcompdate']) &&
    !isset($_POST['comments']) &&
    !isset($_POST['baddress']) &&
    !isset($_POST['bcity']) &&
    !isset($_POST['bstate']) &&
    !isset($_POST['bzipcode']))

$fname = $_POST["fname"];
$minit = $_POST["minit"];
$lname = $_POST["lname"];
$cname = $_POST["cname"];
$address = $_POST["address"];
$city = $_POST["city"];
$state = $_POST["state"];
$zipcode = $_POST["zipcode"];
$email_from = $_POST["email_from"];
$vemail = $_POST["vemail"];
$phone = $_POST["phone"];
$cell = $_POST["cell"];
$fax = $_POST["fax"];
$workbefore = $_POST["workbefore"];
$referral = $_POST["referral"];
$services = $_POST["services"];
$timeframe = $_POST["timeframe"];
$budget = $_POST["budget"];
$position = $_POST["position"];
$quantity = $_POST["quantity"];
$units = $_POST["units"];
$specunits = $_POST["specunits"];
$reqcompdate = $_POST["reqcompdate"];
$comments = $_POST["comments"];
$baddress = $_POST["baddress"];
$bcity = $_POST["bcity"];
$bstate = $_POST["bstate"];
$bzipcode = $_POST["bzipcode"];

$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
$error_message .= 'The Email Address you entered does not appear to be valid.<br />';
}
$string_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($string_exp,$fname)) {
$error_message .= 'The First Name you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$minit)) {
$error_message .= 'The Middle Initial you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$lname)) {
$error_message .= 'The Last Name you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$cname)) {
$error_message .= 'The Company Name you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$address)) {
$error_message .= 'The Address you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$city)) {
$error_message .= 'The City you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$state)) {
$error_message .= 'The State you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$zipcode)) {
$error_message .= 'The Zip Code you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$email_from)) {
$error_message .= 'The Email you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$vemail)) {
$error_message .= 'The Email (in the verify field) you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$phone)) {
$error_message .= 'The Phone Number you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$cell)) {
$error_message .= 'The Cell Number you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$fax)) {
$error_message .= 'The Fax Number you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$workbefore)) {
$error_message .= 'Your entry does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$referral)) {
$error_message .= 'The Referred By you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$timeframe)) {
$error_message .= 'The Time Frame you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$position)) {
$error_message .= 'The Position you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$quantity)) {
$error_message .= 'The Quantity does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$units)) {
$error_message .= 'The Units you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$specunits)) {
$error_message .= 'The Specific Units you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$reqcompdate)) {
$error_message .= 'The Requested Completion Date you entered does not appear to be valid.<br />';
}
if(strlen($comments) < 2) {
$error_message .= 'The Comments you entered do not appear to be valid.<br />';
}
if(!preg_match($string_exp,$baddress)) {
$error_message .= 'The Billing Address you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$bcity)) {
$error_message .= 'The Billing City you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$bstate)) {
$error_message .= 'The Billing State you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$bzipcode)) {
$error_message .= 'The Billing Zip Code you entered does not appear to be valid.<br />';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";

function clean_string($string) {
  $bad = array("content-type","bcc:","to:","cc:","href");
  return str_replace($bad,"",$string);
}

$email_message .= "First Name: ".clean_string($fname)."\n";
$email_message .= "Middle Initial: ".clean_string($minit)."\n";
$email_message .= "Last Name: ".clean_string($lname)."\n";
$email_message .= "Company Name: ".clean_string($cname)."\n";
$email_message .= "Address: ".clean_string($address)."\n";
$email_message .= "City: ".clean_string($city)."\n";
$email_message .= "State: ".clean_string($state)."\n";
$email_message .= "Zip Code: ".clean_string($zipcode)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Verify Email: ".clean_string($vemail)."\n";
$email_message .= "Phone: ".clean_string($phone)."\n";
$email_message .= "Cell: ".clean_string($cell)."\n";
$email_message .= "Fax: ".clean_string($fax)."\n";
$email_message .= "Have you ever worked with Home Turf before? ".clean_string($workbefore)."\n";
$email_message .= "How did you hear about Home Turf? ".clean_string($referral)."\n";
$email_message .= "Services Being Requested: ".clean_string($services)."\n";
$email_message .= "Time Frame: ".clean_string($timeframe)."\n";
$email_message .= "Budget Range: ".clean_string($budget)."\n";
$email_message .= "Your Position: ".clean_string($position)."\n";
$email_message .= "Quantity: ".clean_string($quantity)."\n";
$email_message .= "Units: ".clean_string($units)."\n";
$email_message .= "other units, please specify: ".clean_string($specunits)."\n";
$email_message .= "Requested Completion Date: ".clean_string($reqcompdate)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";
$email_message .= "Billing Address: ".clean_string($baddress)."\n";
$email_message .= "Billing City: ".clean_string($bcity)."\n";
$email_message .= "Billing State: ".clean_string($bstate)."\n";
$email_message .= "Billing Zip Code: ".clean_string($bzipcode)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";

// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers); 
?>

<!-- include your own success html here -->

Thank you for contacting us. We will be in touch with you very soon.

<?php
}
?>

Спасибо за ваше время и внимание.

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Это должна быть какая-то форма!: -)

Серьезно, это, вероятно, поможет вам уменьшить размер этого кода.Для начала, почему бы не сохранить эти ожидаемые имена переменных в массиве:

$vars = array('fname', 'minit', ...);

, которые затем можно использовать для а) проверки того, что они были отправлены:

foreach ($vars as $var)
{
    if (!isset($var))
    {
        // Do whatever happens if at least one value hasn't been sent
    }
}

б)установите эти локальные переменные:

foreach ($vars as $var)
{
    $$var = $_POST[$var];
}

(хотя это действительно не нужно; почему бы просто не обратиться к $_POST['fname'] и т. д .?)

c) в сочетании с другим массивомили более сложный начальный, обработайте проверку, например

define('RE_STRING', "/^[A-Za-z .'-]+$/");

$vars = array
(
    'fname' => array('type' => RE_STRING, 'full' => 'First Name'),
    ...
);

foreach ($vars as $var => $details)
{
    if(!preg_match($details['type'], $_POST[$var])) {
        $error_message .= 'The '.$details['full'].' you entered does not appear to be valid.<br />';
    }
}

d) создайте сообщение электронной почты:

foreach ($vars as $var => $details)
{
    $email_message .= $details['full'].": ".clean_string($_POST[$var])."\n";
}

Если вы объедините все это в один цикл foreachвы сэкономите много кода и уменьшите вероятность крошечной опечатки, вызывающей много головной боли.

1 голос
/ 24 августа 2011

Я заметил две вещи:

  1. Вы не должны были менять || на &&.Условие if проверяет, является ли какое-либо из этих полей пустым, и вы заставили его проверить, являются ли все из них пустыми.

  2. После этого,весь следующий блок должен быть заключен в {}, ИЛИ блок кода отсутствует.Похоже, что если какое-либо из полей пустое (!isset()), выполняется некоторое условие ошибки, и если все они заполнены, он должен перейти к последнему длинному блоку и проверить каждое.

.

// Possibly something like:
// validation expected data exists
if(!isset($_POST['fname']) ||
    !isset($_POST['minit']) ||
    !isset($_POST['lname']) ||
    ...
    ...
    !isset($_POST['bstate']) ||
    !isset($_POST['bzipcode']))
{
  // Echo an error that all fields must be filled in.
}
else 
{
  // All were filled in, execute the rest and validate
  $fname = $_POST["fname"];
  $minit = $_POST["minit"];
  $lname = $_POST["lname"];
  $cname = $_POST["cname"];
  $address = $_POST["address"];
  $city = $_POST["city"];
  $state = $_POST["state"];
  // etc...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...