Контактная форма PHP не отправляется

#php #html #contact-form

#php #HTML #контактная форма

Вопрос:

Привет, я ранее успешно использовал этот очень простой php скрипт для контактов, хотя, когда я попытался реализовать его на новой HTML-странице с формой, она не отправлялась. Кто-нибудь видит какие-либо очевидные ошибки? Любая помощь была бы высоко оценена

Вот html формы:

 <div id="formContainer">

    <form action="form.php" method="post" id="contactForm"> 
    <fieldset>

    <legend>Your details</legend>    

    <label for="name">Name *</label>
    <input type="text" id="name">

    <label for="email">Email *</label>
    <input type="email" id="email">

    <label for="tel">Telephone</label>
    <input type="tel" id="tel">

    </fieldset>

    <fieldset> 
    <legend>Tutoring</legend>

    <label for="type">Type of lesson</label>
    <select name="type" id="type">
    <option>Individual</option>
    <option>Group</option>
    </select>

    <label for="subject">Subject</label>
    <input name="subject" list="subjects" id="subject">
    <datalist id="subjects">
    <option>English</option>
    <option>Biology</option>
    <option>Geography</option>
    </datalist>

    <label for="level">Your level</label>
    <select name="level" id="level">
    <option>Beginner</option>
    <option>GCSE</option>
    <option>A-Level</option>
    <option>University</option>
    </select>

    <label for="hours">Hours/week</label>
    <input type="number" id="hours">

    <label for="info">Additional Information</label>
    <textarea name="info" id="info" rows="10"               cols="6"></textarea>


    </fieldset>

    <input type="submit" name="submit" value="Send" id="sendButton">

    <input type="hidden" name="submit_check" value="1" />   
    </form>

    </div>
  

И вот простой php-скрипт:

 <?php 

if ($_POST["email"]<>'') { 
    $ToEmail = 'onjegolders@gmail.com'; 
    $EmailSubject = 'Site contact form '; 
    $mailheader = "From: ".$_POST["email"]."rn"; 
    $mailheader .= "Reply-To: ".$_POST["email"]."rn"; 
    $mailheader .= "Content-type: text/html; charset=iso-8859-1rn"; 
    $MESSAGE_BODY = "Name: ".$_POST["name"]."<br>"; 
    $MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>"; 
    $MESSAGE_BODY = "Telephone: ".$_POST["tel"]."<br>";
    $MESSAGE_BODY = "Type: ".$_POST["type"]."<br>";
    $MESSAGE_BODY = "Subject: ".$_POST["subject"]."<br>";
    $MESSAGE_BODY = "Level: ".$_POST["level"]."<br>";
    $MESSAGE_BODY = "Hours required: ".$_POST["hours"]."<br>";
    $MESSAGE_BODY .= "Additional information: ".nl2br($_POST["info"])."<br>"; 
    mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 

?> 

<html>

    <h3>Thanks for your email</h3>
    <h4>I'll get back to you as soon as possible</h4>
    <a href="index.html"><p>Click here to go back to previous page</p></a>

</html>


<?php 
} else { 
?> 

<html>Sorry, this form didn't work</html>

<?php 
}; 
?>
  

Комментарии:

1. Пожалуйста, обратите внимание, что, если вы не используете suhosin , у вас здесь есть уязвимость, которую можно использовать; злоумышленник просто отправляет $_POST[ email"] с rnCc: blahrnrnI Love Spam! помощью, и вы превращаете свой хост в спам-бота.

2. Да, я обеспокоен этим, проблема заключалась в том, что любой скрипт, который имел какие-либо функции безопасности, казался невероятно сложным, и я, похоже, не мог их реализовать. Как бы мне включить suhosin? Спасибо

Ответ №1:

Попробуйте с

 if ( !empty($_POST["email"]) )
  

Однако вы можете проверить, что опубликовано на этой странице, используя:

 echo '<pre>';
var_dump( $_POST );
  

Комментарии:

1. Спасибо за все ответы, но, к сожалению, изменение первого оператора if, похоже, не помогает. Возможно ли, что проблемы возникают из-за новой разметки html5? Этот же скрипт отлично работал на другом сайте, который я использовал, на котором просто была табличная форма html4

2. Нет, дело не в этом. Кто у вас не работает? Что-нибудь возвращается из var_dump ?

3. Ну, когда я отправляю форму, она переходит прямо к сообщению else, так что где-то по ходу строки это не работает. Извините, не могли бы вы уточнить, куда я должен поместить ваш код для var_dump? Еще раз спасибо

4. Спасибо. при отправке формы я получаю следующее: array(6) { [«type»] => string(10) «Individual» [«subject»] => string(0) «» [«level»] => string(8) «Beginner» [«info»] => string(0) «» [«submit»] => string(4) «Send» [«submit_check»] => string (1) «1» } Извините, эта форма не сработала

5. Потому что у вас здесь нет email поля. Очевидно, что else выполняется инструкция. Посмотрите на свой HTML-код.. у вас нет name свойств в ваших первых 3 входных данных. Назовите их и протестируйте еще раз.

Ответ №2:

Измените свой form.php поскольку следующее

     <?php 

if ($_POST["email"]<>'') { 
    $ToEmail = 'onjegolders@gmail.com'; 
    $EmailSubject = 'Site contact form '; 
    $mailheader = "From: ".$_POST["email"]."rn"; 
    $mailheader .= "Reply-To: ".$_POST["email"]."rn"; 
    $mailheader .= "Content-type: text/html; charset=iso-8859-1rn"; 
    $MESSAGE_BODY = "Name: ".$_POST["name"]."<br>"; 
    $MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>"; 
    $MESSAGE_BODY = "Telephone: ".$_POST["tel"]."<br>";
    $MESSAGE_BODY = "Type: ".$_POST["type"]."<br>";
    $MESSAGE_BODY = "Subject: ".$_POST["subject"]."<br>";
    $MESSAGE_BODY = "Level: ".$_POST["level"]."<br>";
    $MESSAGE_BODY = "Hours required: ".$_POST["hours"]."<br>";
    $MESSAGE_BODY .= "Additional information: ".nl2br($_POST["info"])."<br>"; 
    mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 

echo amp;<amp;<amp;<EXCERPT

<html>

    <h3>Thanks for your email</h3>
    <h4>I'll get back to you as soon as possible</h4>
    <a href="index.html"><p>Click here to go back to previous page</p></a>

</html>

EXCERPT;

} else { 


echo "<html>Sorry, this form didn't work</html>";

} 
?>
  

Ответ №3:

в вашем

 if ($_POST["email"] <> '') { 
  

измените это на

  if ($_POST["email"] != '') { 
  

Ответ №4:

Вы должны попробовать это:

 if(!empty($_POST["email"])){
  //your email preparation code
}
  

Вместо использования этого:

 if($_POST["email" <> ''){
  //your email preparation code
}
  

! В основном означает нет, поэтому !empty означает, что она не пустая

Комментарии:

1. Спасибо за все ответы, но, к сожалению, изменение первого оператора if, похоже, не помогает. Возможно ли, что проблемы возникают из-за новой разметки html5? Этот же скрипт отлично работал на другом сайте, который я использовал, на котором просто была табличная форма html4

2. Возможно, но действительно ли это меняет страницы? Или просто остается на той же странице, когда вы нажимаете отправить? Это может показаться глупым, но вы можете захотеть закрыть некоторые из ваших входных тегов, например <тип ввода=»отправить» имя =»отправить» значение =»Отправить» идентификатор =»sendButton» />. У вас есть несколько тегов, которые нужно закрыть.

3. Я думал, что входные теги, закрытые с помощью just >, изменились, хотя, спасибо. Тем не менее, форма по-прежнему не доставляет радости! Я должен сказать, что новая страница действительно появлялась до и после добавления значения «name» в мою HTML-разметку, форма работает и отправляет электронное письмо, однако не все поля отображаются в почте

4. Хорошо, значит, форма работает сейчас? Вы выбрали ответ, что тогда в нем было не так?

Ответ №5:

Вы также могли бы просто использовать:

 if ($_POST["email"]) { 
  

Это работает так же, как проверка != "" или empty() . PHP был разработан для правильной обработки форм. И вы можете просто позволить ему проверять входящие поля формы. Он использует некоторые волшебные логические правила преобразования для строк, которые в большинстве случаев будут выполнять то, что вы хотите.

Другим преимуществом этого более простого стиля является то, что он облегчает отладку, если вы включаете режим E_ALL и E_NOTICE (=debug) error_reporting_.