使用PHP在页面上提交表单后如何返回消息?

使用PHP在页面上提交表单后如何返回消息?,php,html,forms,input,contact,Php,Html,Forms,Input,Contact,我刚刚介绍了如何使用PHP创建联系人表单。现在一切正常,但当我提交表单时,它会在新的空白页上返回消息。我希望这发生在当前页面下的联系方式 这是我第一次用PHP做任何事情,所以我不知道该怎么做。在本教程中,有人简要地提到,您可以将脚本放在希望消息出现的任何位置,但它似乎对我不起作用 这是我的HTML代码: <form method="post" action="contact.php"> <label>Name</label>

我刚刚介绍了如何使用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>

名称
电子邮件
消息
什么是2+2?(反垃圾邮件)
这是我的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代码放在同一页上,如下所示:

<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>';
        }
    }
}
?>

名称
电子邮件
消息
什么是2+2?(反垃圾邮件)

根据您的要求,您需要了解AJAX。您需要使用一个JavaScript库,如jQuery,以使其更简单。它会完全满足你的需求。将表单数据发布到“contact.php”,并将返回的消息(成功/错误)直接返回到当前页面。没有重定向,就没有刷新。

有不同的方法。AJAX就是其中之一,但由于您刚刚起步,我的观点是避免这种情况——首先学习基础知识。下面的代码就是基本的

此方法要求表单和处理在同一页上。这通常不是最好的方法,但它可能是最简单的方法——再说一次,我的观点是,当你开始时,简单是你的朋友

contact.php


名称
电子邮件
消息
什么是2+2?(反垃圾邮件)

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

可能上面的代码不是包含实际表单的.php文件?如果是这样的话,您需要将两者结合起来,以便在发送电子邮件后重新显示表单,或者使用此代码重定向回原始页面。我有一个单独的php文件,其中包含我的代码和一个HTML文件。教程文件在开头提到,我应该创建一个PHP文件,并将所有内容都放在其中。但那根本不起作用,所以我尝试了这种方法,确实起了作用。顺便说一下,我在我的大学服务器上进行了测试,所以我真的无法控制它们的设置。你可以使用wamp或xampp在本地机器上运行php脚本。实际上就像您自己的web服务器:)我想知道为什么它会收到-1,因为在大多数情况下它都是这样工作的。其他任何东西都需要更复杂的技术,如AJAX、Cookie或会话(基于Cookie)。唯一的缺点是,提交后重新加载页面将再次提交表单(大多数浏览器将显示相关对话框)。没错,但其他解决方案有点复杂,正如你所说,他只是在学习php,所以现在我认为这是足够的当用户第一次加载此页面时,没有设置$u POST数组。所以PHP会抛出错误。那些$\u POST变量必须位于
if($\u POST['submit'])下{…
code block。我想这可能是否决的原因,但我没有否决这一点,我也没有声誉:)好吧,所以我不知道的是,我必须将所有内容都放在PHP文件中,我的HTML也一样。这终于奏效了!我想利用人们建议的AJAX解决方案,但现在这样就行了。
<?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>