Ошибка PHP в коде этой контактной формы

0

Я новичок в PHP и недавно начал изучать формы. Я могу их запустить и запустить, внимательно следуя инструкциям на сайтах. Но эта форма, которую я попытался построить самостоятельно, набрав код, я помню, что я узнал на веб-сайте w3c. У меня проблемы с запуском. Пожалуйста, помогите мне.

Это HTML-код формы:

<form name="contactform" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" id="contactform">

<label for="first_name">First Name<span class="error">*<?php echo $first_nameErr;?></span></label><br>

<input type="text" name="first_name" maxlength="50" size="20" value="<?php echo $first_name;?>"><br>

<label for="last_name">Last Name<span class="error">*<?php echo $last_nameErr;?></span></label><br>

<input type="text" name="last_name" maxlength="50" size="20" value="<?php echo $last_name;?>"><br>

<label for="email">Email Address<span class="error"><?php echo $emailErr;?>*</span></label><br>

<input type="text" name="email" maxlength="80" size="35" value="<?php echo $email;?>"><br>

<label for="overview">Overview of project <span class="error">*&nbsp;<?php echo $overviewErr;?></span></label><br>

<textarea name="overview" maxlength="1000" cols="25" rows="5"><?php echo $overview;?></textarea><br>

<br>&nbsp;<input type="submit" value="Submit" name="submit" class="art-button" style="zoom: 1;">&nbsp;
</form>

Это PHP-код формы, который находится внутри того же файла, что и код HTML:

<?php

function test_input($data){

    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);

    return $data;
}

function clean_string($string) {

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

}


// define variables and set to empty values
$first_nameErr = $last_nameErr = $emailErr = $overviewErr = "";
$first_name = $last_name = $email = $overview = "";

if(isset($_POST['email'])) {

$email_to = "[email protected]";
$email_subject = "Contact us - My company name";
{

if (empty($_POST["first_name"]))
{$first_nameErr = "(First Name is required)";}

else
{$first_name = test_input($_POST["first_name"]);

// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$first_name))
      {
      $first_name = "(Only letters and white space allowed)"; 
      }
    }

if (empty($_POST["last_name"]))
{$last_nameErr = "(Last Name is required)";}

else
    {$last_name = test_input($_POST["last_name"]);

// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$last_name))
      {
      $last_name = "(Only letters and white space allowed)"; 
      }
    }

if (empty($_POST["email"]))
    {$emailErr = "(Email ID is required)";}

else
    {$email = test_input($_POST["email"]);

// check if e-mail address syntax is valid
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
      {
      $emailErr = "(Invalid email format)"; 
      }
    }

if (empty($_POST["overview"]))
    {$overviewErr = "(Overview is required)";}

else
    {$overview = test_input($_POST["overview"]);

// check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$overview))
      {
      $overview = "(Only letters and white space allowed)"; 
      }
    }

}

//Email & SEND INFO
$email_message = "Form details below.\n\n";

    $email_message .= "First Name: ".clean_string($first_name)."\n";

    $email_message .= "Last Name: ".clean_string($last_name)."\n";

    $email_message .= "Email: ".clean_string($email)."\n";

    $email_message .= "Services: ".clean_string(implode(', ', $service))."\n";

    $email_message .= "Overview: ".clean_string($overview)."\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);  

?>



<!-- Success HTML -->

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

<?php

}

?>

Теперь, когда я выполняю код, я получаю эту ошибку: вызовите неопределенную функцию test_input() в строке 48, которая является test_input() в поле "Имя" всего процесса проверки.

Как устранить эту ошибку?

Заранее спасибо.

Я разрешил вышеуказанную ошибку, используя предложение larsAnders! Спасибо за это!

Я обновил основной код, в соответствии с новым кодом, который я использую.

Но у меня есть две новые ошибки, для новых ошибок я не получаю ничего в своем письме, который я проверил в флажках, а также когда я получаю E-mail, я не получаю, от кого я его получил. Это html-код, который я использую:

<label for="service">Services required<br></label>
<input type="checkbox" name="service[]" value="web_design_services">Web Design Services</label><br>
<input type="checkbox" name="service[]" value="web_development_services">Web Development Services</label><br>
<input type="checkbox" name="service[]" value="web_identity_management_services">Web Identity Management Services</label><br>
<input type="checkbox" name="service[]" value="digital_design_services">Digital Design Services</label><br>
<input type="checkbox" name="service[]" value="web_video_services">Web Video Services</label><br>
<input type="checkbox" name="service[]" value="web_audio_services">Web Audio Services</label><br>
<input type="checkbox" name="service[]" value="content_management_services">Content Management Services</label><br>

и это единственная строка кода PHP, которую я использую в отношении новой ошибки во всем скрипте:

$email_message .= "Services: ".clean_string(implode(', ', $service))."\n";

Пожалуйста, также скажите мне, где я ошибаюсь, если не получаю отправителя, в своем E-mail. Во всех моих предыдущих сценариях он показывал отправителю как "Я".

  • 0
    почему ваша функция связана внутри оператора if?
  • 0
    Я не понимаю, что ты говоришь. Извините за мои новые навыки PHP. Можете ли вы быть более конкретным о том, о какой функции вы говорите? Если возможно, не могли бы вы сказать мне, что нужно исправить?
Показать ещё 14 комментариев
Теги:
forms

1 ответ

1
Лучший ответ

В PHP, как и во многих языках, порядок вещей имеет значение. Итак, когда ваш скрипт выполняется, и он достигает вызова функции, эта функция уже должна быть определена где-то. Сначала определите функцию. Затем вызовите функцию. Вы не можете просто разместить функцию где угодно (например, внутри блока if) и ожидать, что код будет искать ее и использовать. Убедитесь, что ваши функции определены вне любых блоков if, потому что если условие принимает значение false, функции никогда не будут определены. Пока вы учитесь, просто держите все свои функции в верхней части скрипта, вне любых логических блоков. Начните свой скрипт следующим образом:

function test_input($data){

    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);

    return $data;
}

function clean_string($string) {

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

}

// define variables and set to empty values
$first_nameErr = $last_nameErr = $emailErr = $overviewErr = "";
$first_name = $last_name = $email = $overview = "";

if(isset($_POST['email'])) {

// EDIT THE 2 LINES BELOW AS REQUIRED

$email_to = "[email protected]";
$email_from = $_POST['email'];

$email_subject = "Contact us - Origin web designers";
//{ why are there stray brackets everywhere? if(condition){code} else{code}

if (empty($_POST["first_name"]))
    {$first_nameErr = "(First Name is required)";}
else 
    {$first_name = test_input($_POST["first_name"]);}

    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$first_name))
{
    $first_name = "(Only letters and white space allowed)"; 
}

 if (empty($_POST["last_name"]))

и т.д... как раньше...

Для обработки флажков вам понадобится нечто подобное. Это определит массив с именем $ service:

if (isset($_POST['service'])) {
    $service = $_POST['service'];
}

И он может быть помещен прямо перед этой строкой:

//Email & SEND INFO

Затем, когда ваш код попадает в строку $ email_message. = "Services: line", он будет иметь массив, называемый $ service, чтобы взорваться.

  • 1
    На самом деле это не так .
  • 0
    @Daedalus Я знаю, и это прекрасная маленькая демонстрация, но просто притворяйся ради новичка. Будь проще. Вы не можете узнать все в первый день. Я отредактирую свой пост, чтобы устранить реальную проблему - блок if.
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню