2014-07-29 4 views
0

В основном я пытаюсь переработать плагин, так что мне нужно сделать, это разместить данные формы в форме Cart.php на той же странице. Ниже настроенный у меня есть, но информация $_POST это ничего не возвращает, когда письмо будет отправлено:сообщение для создания на той же странице

Cart.php

<form id='SimpleEcommCartCartForm' action="" method="post"> 

     <div id="emailForm"> 
     <p>Please fill out the form below and one of our associates will contact you with more information.</p> 
     <div class="col-xs-4"> 
      Name: <input type="text" name="name" id="name"> 
     </div> 
     <div class="col-xs-4"> 
      E-mail: <input type="email" name="email" id="email"> 
     </div> 
     <div class="col-xs-4"> 
      Phone: <input type="tel" name="phone" id="phone"> 
     </div> 


     </div> 


    </form> 

<?php 
//Send the email 
$to = "[email protected]"; 
$name = $_POST['name'] ; 
$from = $_POST['email'] ; 
$phone = $_POST['phone'] ; 
$headers = "MIME-Version: 1.0\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
$headers .= "From: $from"; 
$subject = "Pump Part Inquiry"; 


$emailBody = " 
    <html> 
     <head> 
     <style> 
     </style> 
     </head> 
     <body> 
     <h1> Pump Inquiry</h1> 
     <h3>From:".$name."<h3> 
     <h3>Phone:".$phone."<h3> 
     <p>Minetuff Parts".$mine."</p> 
     <p>Flygt Parts".$flygt."</p> 
     </body> 
    </html>"; 



$send = mail($to, $subject, $emailBody, $headers); 

?> 
+0

Это отправляет электронное письмо, но по-прежнему ничего не отображается из переменных $ _POST [''] – Packy

+0

Он отправляет почту без ничего, если вы сразу ее загрузите, это нормально и по нескольким причинам. –

ответ

0

После отправки сообщения, вы не сказали PHP для вывода всего на свете страница.

Вы можете добавить что-то вроде echo 'Mail sent'; в конец PHP, поэтому, если скрипт выполняется правильно, вы узнаете об этом.

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

Среди них я бы рекомендовал вам использовать что-то вроде PHPMailer, полную электронную библиотеку для PHP. Затем вы можете настроить отправку своих писем из любого места, поддерживающего SMTP (не уверены, поддерживаются ли другие, но, скорее всего, есть). PHPMailer будет работать с общим хостингом.


Обновлено - код, который вы можете попробовать

Попробуйте в замене $emailBody:

$emailBody = <<<EOT 
<html> 
    <head> 
    <style type="text/css"> 
    </style> 
    </head> 
    <body> 
    <h1>Pump Inquiry</h1> 
    <h3>From: $name<h3> 
    <h3>Phone: $phone<h3> 
    <p>Minetuff Parts $mine</p> 
    <p>Flygt Parts $flygt</p> 
    </body> 
</html> 
EOT; 

NB: Некоторые клиенты электронной почты позволяют только использование встроенного CSS, поэтому, если вы решили добавить что-нибудь в свой тег <style> в <head>, не ожидайте, что он будет работать очень хорошо или вообще в некоторых случаях.

Как уже упоминалось ранее, вам также необходимо защитить от межсайтового скриптинга.

+0

Почта отправляется, но, например, $ name = $ _POST ['name'] пуста. Ничего не отображается в письме, где я использую $ name. – Packy

+0

@Packy Попробуйте сделать «echo $ name» и 'echo $ _POST ['name']', чтобы узнать, каковы их значения. Таким образом, мы можем определить, есть ли ваша проблема в вашей форме или в отправке электронной почты. Я предполагаю, что телефон работает правильно? –

+0

nope, ни одна из переменных $ _POST не работает – Packy

0

Проблема здесь в том, что почта отправляется до представить, так как вы не сделали тест на наличие $_POST переменных, попробовать что-то вроде этого:

<form id='SimpleEcommCartCartForm' action="" method="post"> 
     <input type="hidden" name="action" value="mailing"/> 
     <div id="emailForm"> 
     <p>Please fill out the form below and one of our associates will contact you with more information.</p> 
     <div class="col-xs-4"> 
      Name: <input type="text" name="name" id="name"> 
     </div> 
     <div class="col-xs-4"> 
      E-mail: <input type="email" name="email" id="email"> 
     </div> 
     <div class="col-xs-4"> 
      Phone: <input type="tel" name="phone" id="phone"> 
     </div> 
     <input name="submit" type="submit"/> 

     </div> 


    </form> 

<?php 
if(isset($_POST['mailing'])){ 
// Send the email 
$to = "[email protected]"; 
$name = $_POST['name'] ; 
$from = $_POST['email'] ; 
$phone = $_POST['phone'] ; 
$headers = "MIME-Version: 1.0\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
$headers .= "From: $from"; 
$subject = "Pump Part Inquiry"; 


$emailBody = " 
    <html> 
     <head> 
     <style> 
     </style> 
     </head> 
     <body> 
     <h1> Pump Inquiry</h1> 
     <h3>From:".$name."<h3> 
     <h3>Phone:".$phone."<h3> 
     <p>Minetuff Parts".$mine."</p> 
     <p>Flygt Parts".$flygt."</p> 
     </body> 
    </html>"; 



$send = mail($to, $subject, $emailBody, $headers); 

} 

?> 
2

Он отправляет почту ничего в нем (или отсутствующая информация), если вы загрузите его сразу, и это связано с конкретной причиной.

В порядке вещей, ваш код отправит вам электронное письмо, как только вы загрузите страницу, так что лучше всего обернуть ваш (PHP) код внутри isset(), чтобы работать вместе с кнопкой (named) submit, которая кажется чтобы отсутствовать в вашем первоначально размещенном вопросе/коде.

Кроме того, у вас есть две неопределенные переменные:

$mine и $flygt, так что вам необходимо определить те, в соответствии с вашими потребностями.

т.е .: if(isset($_POST['submit'])) и <input type="submit" name="submit" value="Send">

Sidenote: Это лучше проверить для пустых полей, но это другая тема; см. мои сноски.

испытано и работать, и получать всю информацию, и я заменил свою нынешнюю функцию почты с if(mail($to, $subject, $emailBody, $headers)){...}

<form id='SimpleEcommCartCartForm' action="" method="post"> 

     <div id="emailForm"> 
     <p>Please fill out the form below and one of our associates will contact you with more information.</p> 
     <div class="col-xs-4"> 
      Name: <input type="text" name="name" id="name"> 
     </div> 
     <div class="col-xs-4"> 
      E-mail: <input type="email" name="email" id="email"> 
     </div> 
     <div class="col-xs-4"> 
      Phone: <input type="tel" name="phone" id="phone"> 

<input type="submit" name="submit" value="Send"> 
     </div> 


     </div> 

    </form> 

<?php 
//Send the email 

if(isset($_POST['submit'])){ 
$to = "[email protected]"; 
$name = $_POST['name'] ; 
$from = $_POST['email'] ; 
$phone = $_POST['phone'] ; 
$headers = "MIME-Version: 1.0\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
$headers .= "From: $from"; 
$subject = "Pump Part Inquiry"; 

// $mine = " Mine variable"; // replace this 
// $flygt = " Flygt variable"; // replace this 


$emailBody = " 
    <html> 
     <head> 
     <style> 
     </style> 
     </head> 
     <body> 
     <h1> Pump Inquiry</h1> 
     <h3>From:".$name."<h3> 
     <h3>Phone:".$phone."<h3> 
     <p>Minetuff Parts".$mine."</p> 
     <p>Flygt Parts".$flygt."</p> 
     </body> 
    </html>"; 



// $send = mail($to, $subject, $emailBody, $headers); 

if(mail($to, $subject, $emailBody, $headers)){ 
    echo "Mail sent."; 
} 

else{ 
    echo "Sorry, something went wrong."; 
} 

} // brace for if(isset($_POST['submit'])) 

?> 

Если вы все еще возникают проблемы:

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

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

Сноски:

Вы открыты для XSS attacks (Межсайтовый скриптинг).

Используйте функцию следующим образом (PHP) фильтр: FILTER_SANITIZE_FULL_SPECIAL_CHARS

$name = filter_var($_POST['name'], FILTER_SANITIZE_FULL_SPECIAL_CHARS); 

эквивалентно вызову htmlspecialchars() с ENT_QUOTES набором. Кодировка котировок может быть отключена установкой.


Чтобы проверить наличие пустых полей, вы можете добавить это ниже if(isset($_POST['submit'])){

if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['phone'])){ 
    echo "Fill out all the fields"; 
exit; 
} 

|| означает «ИЛИ», которые вполне могли бы быть заменены OR если вы хотите, однако || имеет преимущество более OR.

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

+1

Чтение ваших ответов - отличный способ использовать мое рабочее время по утрам ;-) +1 – Darren

+1

Я рад слышать, что Даррен, спасибо @Darren –

+1

Я имею в виду «продуктивно работать " конечно! Это действительно впечатляет, усилия, которые вы вложили :-) – Darren

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