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