在同一页面上处理表单

时间:2014-05-23 19:57:28

标签: php html forms

所以,我现在已经搞乱了一天,我已经阅读了很多教程,甚至还有关于stackoverflow的帖子。我知道可以将所有的PHP表单处理步骤放在与表单相同的页面上,但出于某种原因,我的表单不会发送电子邮件。有什么帮助吗?

<div id="mc_embed_signup">

<form method="post"  action="index.php" enctype="text/plain" name="emailform">
<input type="text" name="name" placeholder="First Name or Alias"><br>
<input type="text" name="email" placeholder="Email Address"><br>
<textarea name="message" rows="10" size="50" placeholder="Placeholder Text."></textarea><br>
<input type="submit" value="Submit &rarr;" name="submit" class="button round">
</form>

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = $_POST['email'];
$to = 'email@address.com'; //set to the default email address
$subject = 'Hello';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";


$headers = "From: $email" . "\r\n" .
"Reply-To: $email" . "\r\n" .
"X-Mailer: PHP/" . phpversion();

if($_POST['submit']) {               
mail ($to, $subject, $body, $headers);  //mail sends it to the SMTP server side which sends the email
echo "<p>Your message has been sent!</p>";
} 

else { 
echo "<p>Something went wrong, go back and try again!</p>"; 
} 
?>
</div>

2 个答案:

答案 0 :(得分:0)

删除enctype="text/plain"这是一个主要因素。

另外,您还需要使用( if empty()检查字段是否为空。

如果不这样做,您可能会收到不包含用户电子邮件,姓名,消息或所有内容组合的电子邮件。

假设此文件名为index.php,请使用action=""

<div id="mc_embed_signup">

<form method="post" action="index.php"  name="emailform">
<input type="text" name="name" placeholder="First Name or Alias"><br>
<input type="text" name="email" placeholder="Email Address"><br>
<textarea name="message" rows="10" size="50" placeholder="Placeholder Text."></textarea><br>
<input type="submit" value="Submit &rarr;" name="submit" class="button round">
</form>

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = $_POST['email'];

$to = 'email@example.com'; //set to the default email address

$subject = 'Hello';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

$headers = "From: $email" . "\r\n" .
"Reply-To: $email" . "\r\n" .
"X-Mailer: PHP/" . phpversion();

if(isset($_POST['submit']) && !empty($_POST['name']) && !empty($_POST['email'])  && !empty($_POST['message']) ){

// check if mail was sent
if(mail ($to, $subject, $body, $headers)){  //mail sends it to the SMTP server side which sends the email
    echo "<p>Your message has been sent!</p>";
    } 

else { 
    echo "<p>Mail was not sent. Check your logs.</p>"; 
    }

}

else { 
    echo "<p>Something went wrong, go back and try again!</p>"; 
}

?>
</div>

答案 1 :(得分:0)

这可能会有所帮助,

if(isset($_POST['submit'])) {               
  if(empty($_POST[name]) && empty($_POST[email]) && empty($_POST[message])){
    echo 'Fields cannot be empty';
} else{
    $name = $_POST['name'];
    $to = $_POST['email'];
    $subject = "Hello";
    $message = $_POST['message'];
    $from = $_POST['email'];
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    mail ($to, $subject, $body);
}

}else{
  echo "<p>Something went wrong, go back and try again!</p>"; 
}