【问题标题】:How do I return a message after submitting a form on my page with PHP?使用 PHP 在我的页面上提交表单后如何返回消息?
【发布时间】:2014-05-26 20:50:26
【问题描述】:

我刚刚关注了this tutorial,了解如何使用 PHP 创建联系表单。现在一切正常,但是当我提交表单时,它会在新的空白页面上返回一条消息。我希望这发生在联系表单下方的当前页面上。

这是我第一次用 PHP 做任何事情,所以我不知道该怎么做。在教程中简要提到了您可以将脚本放在任何您希望显示消息的位置,但它似乎对我不起作用。

这是我的 HTML 代码:

<form method="post" action="contact.php">
          <label>Name</label>
          <input name="name" placeholder="John Doe">

          <label>Email</label>
          <input name="email" type="email" placeholder="john@doe.com">

          <label>Message</label>
          <textarea name="message" placeholder="Hello..."></textarea>

          <label id="antispam">What is 2+2? (Anti-spam)</label>
          <input id="antispambox" name="human" placeholder="4">

          <input id="submit" name="submit" type="submit" value="Submit">
        </form>

这是我的 PHP 代码:

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: TangledDemo';
    $to = 'contact@tangledindesign.com';
    $subject = 'Hello';
    $human = $_POST['human'];

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

    if ($_POST['submit']) {
        if ($name != '' && $email != '') {
            if ($human == '4') {
                if (mail ($to, $subject, $body, $from)) {
                    echo '<p>Your message has been sent!</p>';
                } else {
                    echo '<p>Something went wrong, go back and try again!</p>';
                }
            } else if ($_POST['submit'] && $human != '4') {
                echo '<p>You answered the anti-spam question incorrectly!</p>';
            }
        } else {
            echo '<p>You need to fill in all fields!!</p>';
        }
    }
?>

我已经找到了一些答案,但对我来说没有任何意义。我还尝试检查教程网站上的示例,但是我当然无法访问 PHP。

谁能给我解释一下?

【问题讨论】:

  • 可能上面的这段代码是一些其他的.php文件而不是包含实际表单的文件?如果是这种情况,您需要将两者结合起来,以便在您发送电子邮件后重新显示表单,或者使用此代码重定向回原始页面。
  • 好吧,我有 1 个单独的 php 文件,其中包含我的代码和一个 HTML 文件。教程文件在开头提到我应该创建一个 PHP 文件并将所有内容都放在那里。但这根本不起作用,所以我尝试了这种方式,并且确实有效。
  • 顺便说一下,我在我的大学服务器上进行了测试,所以我真的无法控制它们的设置。
  • 您可以使用 wamp 或 xampp 在本地机器上运行 php 脚本。实际上就像你自己的网络服务器:)

标签: php html forms input contact


【解决方案1】:

如果您希望消息在同一页面上,那么您必须将 php 代码放在同一页面上,如下所示:

<form method="post" action="">
          <label>Name</label>
          <input name="name" placeholder="John Doe">

          <label>Email</label>
          <input name="email" type="email" placeholder="john@doe.com">

          <label>Message</label>
          <textarea name="message" placeholder="Hello..."></textarea>

          <label id="antispam">What is 2+2? (Anti-spam)</label>
          <input id="antispambox" name="human" placeholder="4">

          <input id="submit" name="submit" type="submit" value="Submit">
        </form>
<?php
if(!empty($_POST['name'])&&!empty($_POST['email'])&&!empty($_POST['message'])&&!empty($_POST['human']))// check if everything has been filled out before doing anything else
{
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: TangledDemo';
    $to = 'contact@tangledindesign.com';
    $subject = 'Hello';
    $human = $_POST['human'];

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

    if ($_POST['submit']) {
        if ($name != '' && $email != '') {
            if ($human == '4') {
                if (mail ($to, $subject, $body, $from)) {
                    echo '<p>Your message has been sent!</p>';
                } else {
                    echo '<p>Something went wrong, go back and try again!</p>';
                }
            } else if ($_POST['submit'] && $human != '4') {
                echo '<p>You answered the anti-spam question incorrectly!</p>';
            }
        } else {
            echo '<p>You need to fill in all fields!!</p>';
        }
    }
}
?>

【讨论】:

  • 我想知道为什么它会收到 -1,因为它在大多数情况下都是这样工作的。其他任何事情都需要更复杂的技术,例如 AJAX、cookie 或会话(基于 cookie)。唯一的缺点是提交后重新加载页面会再次提交表单(大多数浏览器会显示相关对话框)。
  • 是的,但其他解决方案有点复杂,因为你很难过,他只是在学习 php,所以现在我认为这就足够了
  • 当用户第一次加载这个页面时,没有设置$_POST数组。所以 PHP 会抛出错误。那些 $_POST 变量必须在 if($_POST['submit']){... 代码块下。我认为这可能是投反对票的理由,但我没有投反对票,而且我没有声誉:)
  • 好吧,我不知道我必须把所有东西都放在一个 PHP 文件中,我的 HTML 也是如此。终于成功了!我想利用人们建议的 AJAX 解决方案,但现在就可以了。
【解决方案2】:

根据您的要求,您需要研究 AJAX。您需要使用 jQuery 等 JavaScript 库来简化操作。它将完全满足您的需求。将表单数据发布到您的“contact.php”,并将返回的消息(成功/错误)直接返回到您当前所在的页面。无重定向,无刷新。

【讨论】:

    【解决方案3】:

    有不同的方法可以解决这个问题。 AJAX 就是其中之一,但由于您刚刚开始,我的意见是避免这种情况 - 首先学习基础知识。下面的代码就是这样 - 基础知识。

    此方法需要将表单和处理放在同一页面上。这通常不是最好的方法,但它可能是最简单的 - 我的观点是,当你刚开始时,简单是你的朋友。

    contact.php

    <?php
        // First, check if the submit button has been pressed - no processing occurs unless the form has been submitted. 
        // This is necessary because your $_POST variables do not exist until the form is submitted.
        if (isset($_POST['submit'])) {
            // The button has been pressed, so now gather data and set variables
            $name = $_POST['name'];
            $email = $_POST['email'];
            $message = $_POST['message'];
            $from = 'From: TangledDemo';
            $to = 'contact@tangledindesign.com';
            $subject = 'Hello';
            $human = $_POST['human'];
            $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    
            // Now, validate and process
            if ($name != '' && $email != '') {
                if ($human == '4') {
                    if (mail ($to, $subject, $body, $from)) {
                        echo '<p>Your message has been sent!</p>';
                    } else {
                        echo '<p>Something went wrong, go back and try again!</p>';
                    }
                } else {
                    echo '<p>You answered the anti-spam question incorrectly!</p>';
                }
            } else {
                echo '<p>You need to fill in all fields!!</p>';
            }
    
        }
    ?>
     <form method="post" action="contact.php">
       <label>Name</label>
       <input name="name" placeholder="John Doe">
    
       <label>Email</label>
       <input name="email" type="email" placeholder="john@doe.com">
    
       <label>Message</label>
       <textarea name="message" placeholder="Hello..."></textarea>
    
       <label id="antispam">What is 2+2? (Anti-spam)</label>
       <input id="antispambox" name="human" placeholder="4">
    
       <input id="submit" name="submit" type="submit" value="Submit">
     </form>
    

    请记住,虽然这种方法有效,但从长远来看,它并不是最好的方法。最好将逻辑和标记分开。这意味着至少有两个页面——一个显示表单,另一个页面处理表单。更好的方法将涉及面向对象的编程。但是,我坚信ready、fire、immediate 方法...当您尝试学习时,先让它发挥作用,然后再考虑最佳实践和优化。当您遇到更大的问题并且需要更多复杂性时,您可以进行调整并找出更好的方法来做事。进步只来自实践、尝试和错误。祝你好运。

    【讨论】:

      猜你喜欢
      • 2014-05-26
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2018-07-11
      相关资源
      最近更新 更多