Javascript 带有PHP的HTML表单-提交并停留在同一页面上

Javascript 带有PHP的HTML表单-提交并停留在同一页面上,javascript,php,html,forms,form-submit,Javascript,Php,Html,Forms,Form Submit,我在网站上有一张表格(www.mywebsite.com)。我有一个PHP脚本,当有人在我的网站上提交表单时,它会向我发送一封包含信息的电子邮件。但是通过表单中的action=“submitform.php”,它将站点更新为URLwww.mywebsite.com/submitform.php。我想它留在主网站(索引) 解决方案是:我添加了标题(“位置:http://mywebsite.com"); 模具()到我的PHP代码。这样,当用户提交代码时,他们将被重定向到主站点 然而,这带来了一个新问

我在网站上有一张表格(
www.mywebsite.com
)。我有一个PHP脚本,当有人在我的网站上提交表单时,它会向我发送一封包含信息的电子邮件。但是通过表单中的
action=“submitform.php”
,它将站点更新为URL
www.mywebsite.com/submitform.php
。我想它留在主网站(索引)

解决方案是:我添加了
标题(“位置:http://mywebsite.com"); 模具()到我的PHP代码。这样,当用户提交代码时,他们将被重定向到主站点

然而,这带来了一个新问题。

每当有人提交表单时,我都会显示一条消息,如“邮件已发送”。为了实现这一点,我尝试了一个小的JavaScript代码,基本上

document.getElementById(“消息”).innerHTML=“邮件已发送。”

。。。和
到我的HTML代码。哪个有效。。。。。。但是,当有人提交表单时,由于我的PHP脚本将我重定向到我的网站(带有
标题
),消息只会显示半秒钟左右


有人知道这方面的解决办法吗?提前谢谢。如果需要的话,我可以提供更多的细节,但我的问题应该从这里清楚。希望任何人都能发现我的错误…

我的大部分表单帖子都使用javascript和ajax。工作很好。 Ajax可以在表单对象中获取表单信息,或者将其作为数组传递。URL是您的php进程页面,在那里,它将返回您在传递到success函数的数据对象中“打印/回显”的内容。 在HTML中使用此选项

<input type="button" onclick="submitForm();" value="Submit">
php进程文件的使用

 $inputFromForm = (isset($_REQUEST["NameOfInputFromForm"])) ? strip_tags($_REQUEST["NameOfInputFromForm"]) : "-";
如果不使用Ajax(这意味着您可以在不刷新页面的情况下发送表单),您有两个选项。将表单发送到另一个文件,对其进行处理,然后重定向回-但使用
GET
参数指示成功或失败。或者,只需发布到同一页面(因此表单的处理在同一页面中进行-我推荐第一种选择)

如果要使用post重定向get模式,可以使用

header("Location: /?status=success");
exit;
submitform.php
文件中成功处理表单时

然后您只需检查
$\u GET['status']
中的消息是什么,并在
index.php
文件中相应地显示消息

if (isset($_GET['status']) && $_GET['status'] == 'success') {
    echo "Your message was successfully sent!";
}

如果应用程序需要,可以进一步开发此逻辑,使其具有不同的参数,以发布成功和失败的消息。

为此,您可以使用会话变量存储消息发送类型(成功或失败),并在主页上每次测试它,如果存在,则显示消息并取消设置$\u会话变量

像这样: 主要

信息

    if(mail()){
    $_SESSION['message']='success';
}else{
    $_SESSION['message']='error';
}

您可以设置间隔,然后将它们重定向到所需页面

<script>
setInterval(function(){ window.location.href="http://mywebsite.com" }, 5000);
</script>

setInterval(函数(){window.location.href=”http://mywebsite.com" }, 5000);

假设:您希望用户留在表单所在的页面上

在这种情况下,您可能不会在调用代码中返回false/stop事件传播

比方说,您可以这样称呼ajax:

<form onsubmit="submitform(this);" ...>[form]</form>
在ajax已经提交表单之后,
返回false
将停止表单的提交。如果用户禁用了javascript,这也有仍然工作的好处


如果我的假设是错误的


如果您想刷新页面,甚至不要使用ajax,只需在url中添加一个触发消息显示的参数即可。或者用php将消息添加到会话中,并在显示后将其清除。

您可能可以使用ajax进行此操作,并在提交时清除输入,同时使用会话/令牌作为服务器端方法。np@thesystem,我的荣幸!我喜欢这样,但我尝试将会话用于状态,而不是将其传递到URL中,这样人们在不相关的情况下看到状态消息的机会就少了。
<script>
setInterval(function(){ window.location.href="http://mywebsite.com" }, 5000);
</script>
<form onsubmit="submitform(this);" ...>[form]</form>
<form onsubmit="submitform(this); return false">[form]</form>