2014-10-14 6 views
1

Я не очень хорошо знаком с php, и мой друг помог мне с этим скриптом формы php. Но это, похоже, не отправляет электронные письма на требуемый адрес. Не могли бы вы предложить, какова может быть проблема с этим скриптом?PHP скрипт контактной формы, не отправляющий электронные письма

Я очень ценю это. Благодаря

<?php 
$error = array(); 

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit')) { 
    if(!empty($_POST['name'])) { 
     $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); 
    } else { 
     $error[] = 'Please enter your name.'; 
    } 

    if(!empty($_POST['email'])) { 
     if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
      $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 
     } else { 
      $error[] = 'Please enter a correct email address.'; 
     } 
    } else { 
     $error[] = 'Please enter your email address.'; 
    } 

    if(!empty($_POST['phone'])) { 
     if(filter_var($_POST['phone'], FILTER_VALIDATE_INT)) { 
      $phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT); 
     } else { 
      $error[] = '<i>Phone number</i> only expects number'; 
     } 
    } else { 
     $error[] = 'Please enter your email address.'; 
    } 

    if(!empty($_POST['time'])) { 
     $time = filter_var($_POST['time'], FILTER_SANITIZE_STRING); 
    } else { 
     $error[] = 'Please enter your best time to contact.'; 
    } 

    if(!empty($_POST['msg'])) { 
     $msg = filter_var($_POST['msg'], FILTER_SANITIZE_STRING); 
    } else { 
     $error[] = 'Please enter your message.'; 
    } 

    if(empty($error)) { 
     $to  = '[email protected]'; 
     $subject = 'from contact form'; 

     $message = $phone . "\r\n"; 
     $message .= $time . "\r\n"; 
     $message .= $msg; 

     $headers = 'MIME-Version: 1.0' . "\r\n"; 
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
     $headers .= 'From: '.$name.' <'. $email.'>' . "\r\n" . 
      'Reply-To: '.$name.' <'. $email . '>' ."\r\n"; 

     //echo '<pre>'; var_dump($to, $subject, $message, $headers); echo '</pre>'; die(); 

     mail($to, $subject, $message, $headers); 
    } 
} 

?> 


<?php 
if(!empty($error)) { 
    echo '<ul class="error">'; 
    echo '<li>' . implode('</li><li>', $error) . '</li>'; 
    echo '</ul>'; 
} 
?> 

<form method="post" action=""> 
    <input type="text" name="name" value="" placeholder="Enter your name" class="email_form"/> 
    <input type="text" name="email" value="" placeholder="Enter your email address" class="email_form"/> 
    <input type="text" name="phone" value="" placeholder="Phone number" class="email_form"/> 
    <input type="text" name="time" value="" placeholder="Best time to contact. e.g. 3 am" class="email_form"/> 
    <textarea name="msg" placeholder="Your message" class="email_form"></textarea> 

    <input type="image" value="submit" name="contact_submit" src="images/submit.png" width="96" height="43" class="email_button"> 
</form> 
+0

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

+0

Проконсультируйтесь с моим ответом ниже, в нем объясняются причины. –

ответ

2

Изменить эту строку:

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit')) { 

в

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

и

<input type="image" value="submit" name="contact_submit" src="images/submit.png" width="96" height="43" class="email_button"> 

в

<input type = "submit" value="submit" name="contact_submit"> 

PHP ищет тип отправки, и вы используете тип изображения.

  • Если вы все еще хотите использовать изображение в качестве кнопки отправки:

Вам нужно будет изменить:

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit')) 

на другой условный оператор.

Например:

if(!empty($_POST['email'])){ 

Вы всегда можете добавить к этому условному оператору с другими полями, которые вы хотите проверить, если они установлены/пустой.

Например:

if(!empty($_POST['email']) || !empty($_POST['name'])){ 
  • После проверки кода, код не работает, пока были сделаны эти изменения.

N.B.: Если почта по-прежнему не отправляется/не принимается, вам необходимо убедиться, что mail() действительно доступно для вас и/или проверяет журналы и спам.

Добавить error reporting в начало вашего файла (ов), который поможет во время производственных испытаний.

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
  • Какие будут вызывать какие-либо ошибки, обнаруженные.

Сноски:

Телефон поле должно быть все числа, в противном случае она не будет выполнена.

I.e.: 555-234-5678 не работает, но 5552345678 сделал, поэтому вам нужно будет сообщить своим пользователям, как его следует вводить.


Edit: (полный код) - скопировать в точности, как показано при изменении [email protected] на свой Email.

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$error = array(); 

if(isset($_POST['contact_submit'])) { 
    if(!empty($_POST['name'])) { 
     $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); 
    } else { 
     $error[] = 'Please enter your name.'; 
    } 

    if(!empty($_POST['email'])) { 
     if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
      $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 
     } else { 
      $error[] = 'Please enter a correct email address.'; 
     } 
    } else { 
     $error[] = 'Please enter your email address.'; 
    } 

    if(!empty($_POST['phone'])) { 
     if(filter_var($_POST['phone'], FILTER_VALIDATE_INT)) { 
      $phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT); 
     } else { 
      $error[] = '<i>Phone number</i> only expects number'; 
     } 
    } else { 
     $error[] = 'Please enter your email address.'; 
    } 

    if(!empty($_POST['time'])) { 
     $time = filter_var($_POST['time'], FILTER_SANITIZE_STRING); 
    } else { 
     $error[] = 'Please enter your best time to contact.'; 
    } 

    if(!empty($_POST['msg'])) { 
     $msg = filter_var($_POST['msg'], FILTER_SANITIZE_STRING); 
    } else { 
     $error[] = 'Please enter your message.'; 
    } 

    if(empty($error)) { 
     $to  = '[email protected]'; 
     $subject = 'from contact form'; 

     $message = $phone . "\r\n"; 
     $message .= $time . "\r\n"; 
     $message .= $msg; 

     $headers = 'MIME-Version: 1.0' . "\r\n"; 
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
     $headers .= 'From: '.$name.' <'. $email.'>' . "\r\n" . 
      'Reply-To: '.$name.' <'. $email . '>' ."\r\n"; 

     //echo '<pre>'; var_dump($to, $subject, $message, $headers); echo '</pre>'; die(); 

     mail($to, $subject, $message, $headers); 
    } 
} 

?> 


<?php 
if(!empty($error)) { 
    echo '<ul class="error">'; 
    echo '<li>' . implode('</li><li>', $error) . '</li>'; 
    echo '</ul>'; 
} 
?> 

<form method="post" action=""> 
    <input type="text" name="name" value="" placeholder="Enter your name" class="email_form"/> 
    <input type="text" name="email" value="" placeholder="Enter your email address" class="email_form"/> 
    <input type="text" name="phone" value="" placeholder="Phone number" class="email_form"/> 
    <input type="text" name="time" value="" placeholder="Best time to contact. e.g. 3 am" class="email_form"/> 
    <textarea name="msg" placeholder="Your message" class="email_form"></textarea> 

    <input type = "submit" value="submit" name="contact_submit"> 

</form> 

Вы также можете показать сообщение, если он был успешно отправлен заменой:

mail($to, $subject, $message, $headers); 

с:

if(mail($to, $subject, $message, $headers)){ 

    echo "Mail sent, thank you."; 

} 

else{ 
    echo "There was an error."; 
} 

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

 
0 message is sent to PHP's system logger, using the Operating System's system logging mechanism or a file, depending on what the error_log configuration directive is set to. This is the default option. 
1 message is sent by email to the address in the destination parameter. This is the only message type where the fourth parameter, extra_headers is used. 
2 No longer an option. 
3 message is appended to the file destination. A newline is not automatically added to the end of the message string. 
4 message is sent directly to the SAPI logging handler. 

т.е .:

if(mail($to, $subject, $message, $headers)){ 

    echo "Mail sent, thank you."; 

} 

else{ 
    error_log("Error!", 3, "/var/tmp/mail-errors.log"); 
} 
+0

Благодарим за помощь. Я заменил кнопку изображения, но он по-прежнему не отправляет электронное письмо: http://smalltownkid.net/clients/fiverr/contact/ –

+0

@AsifIrtizaHussain. Добро пожаловать. Я отправлю полный код, чтобы показать вам, что сработало для меня. Один момент, пожалуйста. –

+0

@AsifIrtizaHussain Загрузите ответ и посмотрите под ** Редактировать: (полный код) **. Убедитесь, что вы заменили 'email @ example.com' своим. –

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