2015-04-04 1 views
2

У меня есть простая php-страница с формой html. Его настройка позволит вам заполнить форму и автоматически отправить электронное письмо на мой адрес электронной почты. Вместо этого я не получаю никаких сообщений по электронной почте, а страница перенаправляется на «Файл не найден (ошибка 404)».Функция php mail(), приводящая к 404-файлу не найдена страница

Вот PHP

<?php 

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

    //Name 
    $Name = $_POST['Name']; 
    $Name = mysqli_real_escape_string($Name); 

    //Email 
    $Email = $_POST['Email']; 
    $Email = mysqli_real_escape_string($Email); 

    //Subject 
    $Subject = $_POST['Subject']; 
    $Subject = mysqli_real_escape_string($Subject); 

    //Message 
    $Message = $_POST['Message']; 
    $Message = mysqli_real_escape_string($Message); 

    $email_subject = $Subject . ' from: ' . $Email; 
    $email_from = $Email; 
    $email_body = $Message; 

    $webEmail = "[email protected]"; 
    $headers = "From: $email_from \r\n"; 
    $headers .= "Reply-To: $Email \r\n"; 
    $headers .= 'X-Mailer: PHP/' . phpversion(); 
    $headers .= 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 



    mail($webEmail,$email_subject,$email_body,$headers); 
} 
?> 

Вот HTML форма

<form action="action_page.php" name="myform"> 
      <input onfocus="this.value='';" type="text" name="Name" value="Name" id="name"> 
      <input onfocus="this.value='';" type="text" name="Email" value="Email" id="email"> 
      <input onfocus="this.value='';" type="text" name="Subject" value="Subject" id="subject"> 
      <textarea onfocus="this.value='';" cols="50" rows="4" placeholder="Message" name="Message" id="message"></textarea> 
      <input type="submit" value="submit" id="submit"> 

     </form> 

Любые идеи?

+0

Вы работаете над localhost.? –

+0

Нет, это в прямом эфире на моем сайте (используя godaddy для размещения веб-сайта, если это важно). Если вы хотите увидеть контактную форму в действии, ссылка: www.lizbethmcgee.com/pages/Contact.php –

+0

попробуйте error_reporting_all, чтобы получить ошибки, а также после отправки, если вы не направляете какую-либо страницу с каким-либо сообщением, тогда покажет пустую страницу. –

ответ

5

Здесь несколько вещей.

Начнем с верхней и с условным заявлением (и проделаем наш путь).

if (isset($_POST['submit'])){...} 

Ваша кнопка <input type="submit" value="submit" id="submit"> не имеет атрибут имени для этого представить.

  • Возможно, вы полагаетесь только на «id», который не будет работать, ему нужен атрибут «name».

Измените его так, что он читает, как:

<input type="submit" name="submit" value="submit" id="submit"> 
  • Поскольку он не назвал, ничего внутри этого условного оператора не будет выполняться.

Затем вы используете mysqli_real_escape_string(), который теоретически требует, чтобы соединение было передано этой функции.

т.е .:

$Name = mysqli_real_escape_string($connection,$Name); 

и сделать то же самое для остальных; предполагая, что вы взаимодействуете с базой данных.

Однако неясно, действительно ли вы взаимодействуете с вашей базой данных или нет, поэтому, если вы не взаимодействуете с ним, удалите все из этих mysqli_real_escape_string из своих массивов POST.

т.е .:

$Name = $_POST['Name']; 

и сделать то же самое для других.

Вы также отсутствует POST как метод в форме:

<form action="action_page.php" name="myform"> 

, который по умолчанию GET, когда опускается.Таким образом, изменить его на:

<form action="action_page.php" name="myform" method="post"> 

Чтобы затем проверить, если письмо было отправлено, изменить

mail($webEmail,$email_subject,$email_body,$headers); 

в

if(mail($webEmail,$email_subject,$email_body,$headers)){ 
echo "Sent"; 
} 

Если вы видите "Отправленные", то почта сделала бы его работу. Если почта не получена, проверьте свой спам. Или ваш сервер может быть внесен в черный список.

Убедитесь, что вы имеете доступ к использованию mail().

Вы также должны убедиться, что все входы были заполнены с использованием условного empty().

т.е .:

if(!empty($_POST['Name'])){ 
// $Name = mysqli_real_escape_string($Name); 
    $Name = $_POST['Name']; 
    } 

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

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

Sidenote: Сообщения об ошибках не должно быть сделано только в постановке, и никогда производства.


Сноски:

Я не знаю, что они используются для onfocus="this.value='';" так, если у вас есть некоторые JS/Ajax происходит где-то, вы должны проверить их.

  • Если они не используются ни для чего, вы можете их удалить.

Вы также должны попробовать удалить value="Name", а также для других, на всякий случай.

Sidenote:

Если вы все еще получаете ошибку 404, а затем попытайтесь поместить ваш PHP на вершине и вашей формы HTML ниже, что и в тот же файл с расширением .php, и делать :

<form action="" name="myform" method="post"> 

используя action="" как действие, которое состоится на той же странице.


Дополнительная сноска:

Я заметил в комментарии вы поместили в другой ответ:

«Я добавил заголовок («Место: lizbethmcgee.com/pages/Contact. php ';);

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

Кроме того, вы должны также включать в себя полный http:// вызов и exit;:

header("Location: http://www.lizbethmcgee.com/pages/Contact.php"); 
exit; 

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


Как указано AdamT в комментарии:

Отправка почты с помощью команды PHP mail, нет никакой гарантии, что почта придет в почтовый ящик вы отправить его. Как уже упоминалось, есть много спамеров, и, к сожалению, тяжелая степень фильтрации спама. Если вы действительно хотите получить больше шансов получить почту, вам следует связаться с GoDaddy и спросить, как вы можете настроить SMTP-рассылку для своей учетной записи.

+1

Отправка почты с помощью команды php 'mail', нет гарантии, что почта поступит в папку входящих сообщений, в которую вы ее отправите. Как уже упоминалось, есть много спамеров, и, к сожалению, тяжелая степень фильтрации спама. Если вы действительно хотите получить больше шансов получить почту, вам следует связаться с GoDaddy и спросить, как вы можете настроить SMTP-рассылку для своей учетной записи. –

+0

@AdamT Спасибо за комментарии Адам, это очень хорошая идея. Я добавил его в ответ, цитируя вас. –

+0

Фред - ii -Спасибо. Мне нравится эта дискуссия здесь, большое участие - должно быть очень полезно для O.P. –

0

Как указано выше, ваша кнопка отправки ДОЛЖНА иметь атрибут name="submit", иначе ваш if (isset($_POST['submit'])){... не будет работать. Тем не менее, у меня был этот точный вопрос в последнее время и почему-то наткнулся на упоминание, что виноват <input name="name">. В вашем случае <input name="Name">. Как только я обновил атрибут name до «username», форма функционировала отлично. Хотя я не смог найти точных аргументов в пользу этой причуды, он определенно поднял понимание того, что я назвал моими атрибутами, селекторами, переменными и т. Д.

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