我在网站上有一个表单(www.mywebsite.com
)。我有一个PHP脚本,当有人在我的网站上提交表单时,会向我发送一封包含信息的电子邮件。但是,如果表单中包含action="submitform.php"
,则会将网站更新为网址www.mywebsite.com/submitform.php
。我希望它留在主站点(索引)。
解决方案:我在我的PHP代码中添加了header("Location: http://mywebsite.com"); die();
。这样,用户在提交代码后将被重定向到主站点。
但是,这会带来一个新问题。
每当有人提交表单时,我都会显示一条消息,例如"已发送邮件"。为了使这项工作,我试图有一个小的JavaScript代码,基本上
document.getElementById("message").innerHTML = "Mail has been sent."
...和<div id="message"></div>
我的HTML代码。哪个有效......但是,由于我的PHP脚本将我重定向到我的网站(header
),当有人提交表单时,该消息将仅显示半秒钟或其他内容。< / p>
任何人都知道这方面的解决方法吗?提前致谢。如果需要,我可以提供更多细节,但我的问题应该从中清楚。希望任何人都能发现我的错误......
答案 0 :(得分:4)
我在大多数表格帖子中使用javascript和ajax。作品精彩。 Ajax可以在表单对象中获取表单信息或将其作为数组传递。 URL是你的php proc页面,它会返回到你在传递给success函数的数据对象中“print / echo”的任何内容。 在HTML中使用它,
<input type="button" onclick="submitForm();" value="Submit">
的Javascript,
function submitForm(){
//Validate INPUT first. Then grab the form.
form = new FormData($('#frmIdHere')[0]);
$.ajax ({
type: 'POST',
dataType: 'text',
url: url,
data: form,
success:data => {
//Success message here.
//clear form here.
},
error: () => {
// error message here.
}
});
}
php进程文件使用,
$inputFromForm = (isset($_REQUEST["NameOfInputFromForm"])) ? strip_tags($_REQUEST["NameOfInputFromForm"]) : "-";
答案 1 :(得分:3)
不使用Ajax(这意味着您可以在不刷新页面的情况下发送表单),您有两种选择。将表单发送到不同的文件,处理它,然后重定向回来 - 但是使用GET
参数来指示成功或失败。或者,只需发布到同一页面(因此表格的处理发生在同一页面 - 我推荐第一个替代方案)。
如果您想使用 post-redirect-get 模式,您可以使用
header("Location: /?status=success");
exit;
在submitform.php
文件中成功处理表单时。
然后,您只需查看$_GET['status']
中的消息,并在index.php
文件中相应地显示消息。
if (isset($_GET['status']) && $_GET['status'] == 'success') {
echo "Your message was successfully sent!";
}
如果应用程序需要,可以进一步开发此逻辑以具有不同的参数,以发布成功和失败的消息。
答案 2 :(得分:2)
假设:您希望用户使用表单停留在页面上。
在这种情况下,您可能不会在调用代码中返回false / stop事件传播。
让我们说,你这样称呼你的ajax:
<form onsubmit="submitform(this);" ...>[form]</form>
onsubmit执行以下操作,它执行其属性值(submitform(this)
)中的任何内容,如果它返回一些非假值,它实际上将执行表单的操作,就像onsubmit wouldn'已存在。我认为这正是你案件中发生的事情。
为避免这种情况:
<form onsubmit="submitform(this); return false">[form]</form>
return false
将在ajax提交之后停止提交表单。如果用户禁用了javascript,这也有效的功能。
如果我的假设是假的,那么......
如果你想刷新页面,甚至不要使用ajax,只需在触发要显示的消息的url中添加一个参数。或者在php中将消息添加到会话中,并在显示后将其清除。
答案 3 :(得分:1)
要执行此操作,您可以使用SESSION var存储消息发送类型(成功或失败)并在主页上每次测试它,如果存在,则显示消息并取消设置$ _SESSION var!
像这样: MAIN
if(isset($_SESSION['message'])){
if($_SESSION['message'] == 'success'){
echo "Yeah !";
}else{
echo "Problem";
}
unset($_SESSION['message']);
}
MESSAGE
if(mail()){
$_SESSION['message']='success';
}else{
$_SESSION['message']='error';
}
答案 4 :(得分:1)
您可以设置间隔,然后将它们重定向到所需的页面。
<script>
setInterval(function(){ window.location.href="http://mywebsite.com" }, 5000);
</script>