【问题标题】:PHP Contact Form - form getting replaced by a message?PHP 联系表格 - 表格被消息取代?
【发布时间】:2013-09-14 13:45:45
【问题描述】:

我最近开始学习 PHP,但在联系表单方面遇到了问题。

表单的问题在于它不发送电子邮件,甚至在我发送它之前就在表单下方回显错误消息。 有时我让它工作,然后它又坏了。

另外,我想要消息“消息已发送!”发送时替换整个联系表。如何在不链接到其他页面的情况下实现这一点?

代码如下:

<form method="POST" action="index.php">
    <input name="name" type="text" placeholder="Name">
    <input name="email" type="email" required placeholder="Email">
    <input name="subject" type="text" placeholder="Subject">
    <textarea name="message" rows="15" required placeholder="Message"></textarea>
    <input name="submit" type="submit" value="Send">
</form>

<?php
    if(isset($_POST['submit'])) 
    {
    $name_field=$_POST['name'];
    $email_field=$_POST['email'];
    $subject_field=$_POST['subject'];
    $message_field=$_POST['message'];
    $to="example@outlook.com";
    $from="example@outlook.com";
    $subject="Contact Form Message";
    $body="Name: $name_field\n Email: $email_field\n Subject: $subject_field\n Message:\n $message_field";
    mail($to,$subject,$body,$from);
    echo "<p>Message sent!</p>"; 
    } 
    else
    {
    echo "<p>An error occured. Please try again.</p>";
    }
?>

非常感谢您提供的任何帮助。 另外,如果您有任何想法如何使代码更好、更简洁或更高效,请告诉!

【问题讨论】:

  • 你忘了告诉我们到底发生了什么。
  • 旁注:您可以使用表单 action="" 而不是硬编码页面名称。
  • 是的,很抱歉,我刚刚编辑了问题!
  • 这里的代码消息会在不存在时一直出现$_POST['submit']。当您尝试回显表单时,它会一直存在。你需要像这样if( count($_POST) &gt; 0 ) { if( isset() ) { echo 'send_message'; } else { echo 'error'; } } else { echo 'some_form_code'; }

标签: php forms post message contact


【解决方案1】:

您还没有说什么不起作用,但是如果表单已提交则不显示,您要将表单移动到 php 中,并且仅在表单尚未提交时才打印。

还有一些进一步的阅读可以帮助你,这里有非常好的视频教程,这个是专门关于制作联系表格的:-D http://thenewboston.org/watch.php?cat=11&number=100

如果表单尚未提交,您似乎也在回显错误消息,因此第一次加载您会收到错误消息。而且您的邮件命令看起来不正确。

<?php

//if the form hasn't been submitted yet, print the form.
if (!isset($_POST['submit'])){
print <<<END
<form method="POST" action="index.php">
  <input name="name" type="text" placeholder="Name">
  <input name="email" type="email" required placeholder="Email">
  <input name="subject" type="text" placeholder="Subject">
  <textarea name="message" rows="15" required placeholder="Message"></textarea>
  <input name="submit" type="submit" value="Send">
</form>
END;
}

//if the form has been submitted.
if(isset($_POST['submit'])) 
{
$name_field=$_POST['name'];
$email_field=$_POST['email'];
$subject_field=$_POST['subject'];
$message_field=$_POST['message'];
$to="example@outlook.com";
$subject="Contact Form Message";
$body="Name: $name_field\n Email: $email_field\n Subject: $subject_field\n Message:\n $message_field";
$headers = "From: example@outlook.com";

  if(!mail($to,$subject,$body,$headers)){
      echo 'failed !!';
  }
  else{
      echo "<p>Message sent!</p>"; 
  }
} 

【讨论】:

  • 谢谢,这听起来很聪明!表单的问题是它不发送电子邮件并回显错误消息。
  • 好吧,如果表单尚未提交,您似乎正在回显错误消息....所以您在第一次加载时收到表单下方的错误消息(在您单击提交之前)?
  • 您对邮件功能的使用也不正确,我已经编辑了我的代码以反映我认为您想要将整个代码更改为的内容。到处都有这方面的教程。如果您仍在苦苦挣扎,请回来提出更具体的问题或错误。
【解决方案2】:

试试这个,希望对你有用:

<? if (!isset($_POST['submit']))
{?>
<form method="POST" action="test.php">
<input name="name" type="text" placeholder="Name">
<input name="email" type="email" required placeholder="Email">
<input name="password" type="password" required placeholder="Password">
<textarea name="message" rows="15" required placeholder="Message"></textarea>
<input name="submit" type="submit" value="Send">
</form>
<?
}
if(isset($_POST['submit']))
$name_field=$_POST['name'];
$email_field=$_POST['email'];
$subject_field=$_POST['subject'];
$message_field=$_POST['message'];
$to="example@outlook.com";
$from="example@outlook.com";
$subject="Contact Form Message";
$body="Name: $name_field\n Email: $email_field\n Subject: $subject_field\n Message:\n $message_field";
mail($to,$subject,$body,$from);
if($body)
echo "<p>Message sent!</p>"; 
if(!$body) 
{
echo "<p>An error occured. Please try again.</p>";
}
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多