2015-11-19 5 views
1

все. Я работаю над созданием контактной формы с PHP, и я просто не могу заставить ее работать по какой-то причине. Сообщение не приходит, и ответ «Спасибо за ваше сообщение» не отображается. Мои навыки PHP очень новички, поэтому любая помощь будет принята с благодарностью!Failing PHP контактная форма

<div id="form-div"> 
      <?php 
       if($_SERVER['REQUEST_METHOD'] != 'POST') { 
        $self = $_SERVER['PHP_SELF']; 
      ?> 
      <form class="form" id="form1" method="post" name="contactForm" action=" <?php echo $self; ?> "> 
       <p class="name"> 
        <input name="name" type="text" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Name" id="name" /> 
       </p> 
       <p class="email"> 
        <input name="email" type="text" class="validate[required,custom[email]] feedback-input" id="email" placeholder="Email" /> 
       </p> 
       <p class="text"> 
        <textarea name="comment" class="validate[required,length[6,300]] feedback-input" id="comment" placeholder="Message"></textarea> 
       </p> 
       <div class="submit"> 
        <input type="submit" value="SEND" id="button-blue"/> 
       </div> 
      </form> 
      <?php 
       } else { 
        $name = $_POST['name']; 
        $emailFrom = $_POST['email']; 
        $comment = $_POST['comment']; 
        $emailTo = "[email protected]"; 
        $subject = "Form for Website"; 

        $header = "From: $name <$emailFrom>\r\nReply-To: $emailFrom\r\n"; 
        $header .= "MIME-Version: 1.0\r\n"; 
        $header .= "Content-type:text/html;charset=iso-8859\r\n"; 

        $message = "<b>From:</b> $name<br><b>Email:</b> $emailFrom<br><b>Message:</b> <br>$comment"; 

        mail($emailTo, $subject, $message, $header); 

        echo"Thank you for your message."; 
       } 
      ?> 
     </div> 
+0

является код по крайней мере ввода другого блока кода? –

+0

Возможно, вы захотите удалить лишние пробелы из формы 'action' – RamRaider

+0

Он, похоже, не вводит блок else, no. Я удалил лишнее пространство, и это все равно. –

ответ

1

Вообще-то я хотел бы предложить, что код, который отправляет сообщение электронной почты является перед любым выходом HTML - хотя я не на 100% уверен, что он понесет страшную ошибку headers already sent, замеченную довольно часто в другом месте. Возможно, вы захотите также фильтровать POSTED-переменные и использовать также strip_tags. Затем основывают сообщение, отображаемое пользователю на основе значения, возвращаемого из вызова mail ....

<?php 
    session_start(); 
    $res=false; 

    /* The `PHP_SELF` server var is not considered secure */ 

    if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['email'],$_POST['name'])){ 
     @ob_clean(); 


     $name = strip_tags(filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING)); 
     $emailFrom = filter_var(filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL); 
     $comment = strip_tags(filter_input(INPUT_POST, 'comment', FILTER_SANITIZE_STRING)); 

     $emailTo = "[email protected]"; 
     $subject = "Form for Website"; 

     $header = "From: $name <$emailFrom>\r\nReply-To: $emailFrom\r\n"; 
     $header .= "MIME-Version: 1.0\r\n"; 
     $header .= "Content-type:text/html;charset=iso-8859\r\n"; 

     $message = "<b>From:</b> $name<br><b>Email:</b> $emailFrom<br><b>Message:</b> <br>$comment"; 

     /* You do not want any HTML output before trying to send mail */ 
     [email protected]($emailTo, $subject, $message, $header);  
    } 
?> 
<html> 
    <head> 
     <title>Contact form</title> 
    </head> 
    <body><!-- I don't understand the syntax used in the class attributes of these form elements... --> 
     <div id="form-div"> 
      <form class="form" id="form1" method="post" name="contactForm"><!-- omit the `action` tag to send, by default, to the same page --> 
       <p class="name"> 
        <input name="name" type="text" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Name" id="name" /> 
       </p> 
       <p class="email"> 
        <input name="email" type="text" class="validate[required,custom[email]] feedback-input" id="email" placeholder="Email" /> 
       </p> 
       <p class="text"> 
        <textarea name="comment" class="validate[required,length[6,300]] feedback-input" id="comment" placeholder="Message"></textarea> 
       </p> 
       <div class="submit"> 
        <input type="submit" value="SEND" id="button-blue"/> 
       </div> 
      </form> 
      <?php 
       if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['email'],$_POST['name'])){ 
        echo $res ? 'Thankyou for your mail' : 'Sorry, there was a problem'; 
       } 
      ?> 
     </div> 
    </body> 
</html> 
+0

Привет RamRaider, спасибо за ваш ответ. Когда я протестировал ваш код, я получил следующую ошибку: Warning: session_start() [function.session-start]: Не удается отправить сессионный cookie - заголовки, уже отправленные (вывод запущен в/home/content/12/8683312/html/test .php: 2) в /home/content/12/8683312/html/test.php в строке 3 Предупреждение: session_start() [function.session-start]: Не удается отправить ограничитель кеша сеанса - уже отправленные заголовки (вывод запущен в/home/content/12/8683312/html/test.php: 2) in /home/content/12/8683312/html/test.php в строке 3 –

+0

Ошибка указана только на странице, но форма сработала - ура! Как удалить ошибку? –

+0

Это сработало! Я случайно поставил ваш код после doctype, что вызвало ошибки. Спасибо за вашу помощь! –

0

Проверьте, отключена ли ошибка php на вашем сервере. При отправке почты localhost произойдет сбой при неправильной настройке. В этом случае процесс выходит из кода отправки почты i.e, mail($emailTo, $subject, $message, $header);, и ваше сообщение благодарности не будет выполнено. Просто проверьте это.

См: http://php.net/manual/en/function.error-reporting.php

0

как о замене

if($_SERVER['REQUEST_METHOD'] != 'POST') { 

в

if(count($_POST) < 1) { 
+0

К сожалению, это не сработало. –

Смежные вопросы