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”
,它将站点更新为URLwww.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>