使用PHP的HTML表单 - 提交并保持在同一页面上

时间:2017-08-31 12:04:17

标签: javascript php html forms form-submit

我在网站上有一个表单(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>

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

5 个答案:

答案 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>