2014-01-19 2 views
0

Я пытаюсь сделать чрезвычайно простую форму, но она не работает для меня. Дело в том, что люди пишут только их имена и фамилии, нажимают «отправить» и делают. Я прописан код ниже:Форма PHP не работает

<form method="post" action="index_rost.php"> 

     <p> 
      <label>name</label><br> 
      <input name="name" placeholder="name here"><br><br> 

      <label>surname</label><br> 
      <input name="name2" placeholder="surname here"><br><br> 

     </p> 
     <p> 
      <input id="submit" name="submit" type="submit" value="send it!"><br> 
     </p> 

      <?php 
       $name = $_POST['name']; 
       $name2 = $_POST['name2']; 
       $from = 'website.se'; 
       $to = '[email protected], [email protected]'; 
       $subject = 'new person is coming'; 


       $headers = "MIME-Version: 1.0" . PHP_EOL; 
       $headers .= "From: $from". PHP_EOL; 
       $headers .= "Content-type: text/html;charset=UTF-8 ". PHP_EOL; 

       $body = "<strong>From:</strong><br><br> $name $name2<br><br> <strong>Count on me, I want to come!</strong>"; 


       if ($_POST['submit'] && $name != '' && $name2 != '') { 
         if (mail ($to, $subject, $body, $headers)) { 
         echo '<p>Your name has been sent</p>'; 
        } else { 
         echo '<p>You need to fill up all fields</p>'; 
        } 
       } 

      ?> 

     </form> 

Что происходит, что, кроме не по электронной почте не отправляются, я получаю сообщение об ошибке (один указанные здесь: else { echo '<p>You need to fill up all fields</p>'; }) вместо сообщения об успешном завершении, что я указать на код. Может кто-нибудь дать мне намек на то, что это не так?

большое спасибо заранее!

+2

Что сообщение об ошибке вы получаете – Alen

+0

Что не работает? Можете ли вы дать нам сообщение об ошибке? Нам понадобится дополнительная информация! –

+0

[Включить отчет об ошибках в PHP] (http://blog.flowl.info/2013/enable-display-php-errors/) – DanFromGermany

ответ

3

от http://php.net/manual/en/function.mail.php

почты() возвращает TRUE, если МСИ l был успешно принят для доставки, в противном случае FALSE.

Это важно отметить, что только потому, что почта была принята к доставке, это НЕ означает, что почта действительно достигнет предполагаемого адресата.

Вы получаете ложную назад от mail(), что означает, что сообщение является отвергнуто любого PHP настроена для использования.

Вы можете временно использовать следующие, чтобы включить все ошибки и распечатать эти ошибки на экране, чтобы дать вам представление о том, что происходит.

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

PHP выдаст уведомление, такие как следующие, которые вы можете использовать для отладки:

NOTICE (5): Unexpected Error: mail() [<a href='function.mail'>function.mail</a>]: Failed to connect to mailserver at "ip " port portip, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() (# 2). 

Пожалуйста, помните, что только потому, что почта принимается за доставку делает не означает, что он приедет.

+0

Я только что сделал это, и я получаю ошибки «неопределенного индекса» в строках '$ name = $ _POST ['name'];', '$ name2 = $ _POST ['name2 ']; 'и' if ($ _POST [' submit '] && $ name! =' '&& $ name2! =' ') {' – viriato

+0

Не могли бы вы выслать полные сообщения об ошибках? –

+1

@viriato Посмотрите первую часть моего ответа. – jeroen

1

В настоящее время, когда вы просто загружаете форму (и перед отправкой чего-либо), весь ваш блок кода запускается.

Вы должны обернуть весь раздел почты в блоке, который exectuted только тогда, когда запрос POST сделан:

if ($_SERVER['REQUEST_METHOD'] === 'POST') 
{ 
    $name = $_POST['name']; 
    // ... 

} 

Таким образом, вы не получите никаких предупреждений о неустановленных индексах и т.д.

О проблеме почты, функция mail() возвращает false, поэтому ваше сообщение не принимается к доставке. Это может быть любое количество вещей в настройке сервера, но также может быть что-то простое, например, вы не указываете действительный адрес электронной почты.

Вы должны попытаться изменить:

$from = 'website.se'; 

к:

$from = '[email protected]'; 
+1

Хорошая точка, проверяющая почту сначала! –

+0

Но как мне сделать, если я хочу иметь имя только на $ из? – viriato

+0

@viriato Вам нужно будет настроить адрес, который автоматически удаляет письма, например 'noreply @ website. se'. – jeroen

0

Ну это довольно легко, что происходит. Я просто сформировал его правильно и ...посмотрите, что вы делаете:

if ($_POST['submit'] && $name != '' && $name2 != '') { 
    if (mail ($to, $subject, $body, $headers)) { 
     echo '<p>Your name has been sent</p>'; 
    } else { 
     echo '<p>You need to fill up all fields</p>'; 
    } 
} 

Все поля установлены правильно, но mail() возвращает false.

Правильный код будет:

if ($_POST['submit'] && $name != '' && $name2 != '') { 
    if (mail ($to, $subject, $body, $headers)) { 
     echo '<p>Your name has been sent</p>'; 
    } else { 
     echo '<p>Mail could not be sent</p>'; 
    } 
} else { 
    echo '<p>You need to fill up all fields</p>'; 
} 
+0

Извините, не могли бы вы разработать немного больше? не понимаю где моя ошибка ... – viriato

+0

Ваше сообщение не отражается, если форма пуста, но если ваша почта не может быть отправлена. – Tobias

+0

вопрос, ПОЧЕМУ не может быть отправлена ​​почта – DanFromGermany

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