Php 提交返回到主页

Php 提交返回到主页,php,jquery,html,forms,twitter-bootstrap,Php,Jquery,Html,Forms,Twitter Bootstrap,我在我的网站上使用了一个简单的PHP联系人表单,问题是当我发送一条消息时,单击提交按钮会返回主页。我想避免这一点,并留在页面上 这是我的密码: 标题PHP: <?php //If the form is submitted if(isset($_POST['submit'])) { //Check to make sure that the name field is not empty if(trim($_POST['contactname']) == '') { $hasEr

我在我的网站上使用了一个简单的PHP联系人表单,问题是当我发送一条消息时,单击提交按钮会返回主页。我想避免这一点,并留在页面上

这是我的密码:

标题PHP:

<?php
//If the form is submitted
if(isset($_POST['submit'])) {

//Check to make sure that the name field is not empty
if(trim($_POST['contactname']) == '') {
    $hasError = true;
} else {
    $name = trim($_POST['contactname']);
}

//Check to make sure that the phone field is not empty
if(trim($_POST['phone']) == '') {
    $hasError = true;
} else {
    $phone = trim($_POST['phone']);
}

//Check to make sure that the name field is not empty
if(trim($_POST['weburl']) == '') {
    $hasError = true;
} else {
    $weburl = trim($_POST['weburl']);
}

//Check to make sure that the subject field is not empty
if(trim($_POST['subject']) == '') {
    $hasError = true;
} else {
    $subject = trim($_POST['subject']);
}

//Check to make sure sure that a valid email address is submitted
if(trim($_POST['email']) == '')  {
    $hasError = true;
} else if (!filter_var( trim($_POST['email'], FILTER_VALIDATE_EMAIL ))) {
    $hasError = true;
} else {
    $email = trim($_POST['email']);
}

//Check to make sure comments were entered
if(trim($_POST['message']) == '') {
    $hasError = true;
} else {
    if(function_exists('stripslashes')) {
        $comments = stripslashes(trim($_POST['message']));
    } else {
        $comments = trim($_POST['message']);
    }
}

//If there is no error, send the email
if(!isset($hasError)) {
    $emailTo = 'myemail@email.com'; // Put your own email address here
    $body = "Name: $name \n\nEmail: $email \n\nPhone Number: $phone \n\nSubject: $subject \n\nComments:\n $comments";
    $headers = 'From: My Site <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

    mail($emailTo, $subject, $body, $headers);
    $emailSent = true;
}
}
  ?>

表格:



您必须在此属性中定义页面:

action="your_page.php"
它是指向根目录的路径/

表单有自己的能力在提交时重新加载页面,这就是为什么它会将您重定向到主页


提交表单时,您应该使用AJAX停留在该页面上。好的,因为您使用的是单页导航,而不跟踪用户在单击联系人表单时的位置,所以最简单的方法是使用
target
属性在隐藏的iframe中发送表单提交。然后使用javascript来隐藏联系人表单

这样做的好处是在发送表单时不重新加载页面。此外,您还可以在表单提交页面中使用
top
编写JavaScript,将信息发送到主页面,并在表单正确提交时显示类似“感谢您的反馈”的小消息。

您提到的“整个网站只有一个主URL,联系人表单放在一个没有URL的滑出面板中”。我不确定您是如何生成滑出面板的,但我猜它只是在显示/动画该页面上已经存在的一些隐藏内容-可能是引导模式

因此,您有一个单独的页面,可能是index.php,上面有一个联系人表单。您的表单操作(数据发布到的位置)是
,它将是“index.php”(检查、查看源代码或在开发工具中查找)

因此,假设JS验证通过,点击submit将把表单数据发布到index.php。发布是一个新的请求,因此在前端,页面将显示为重新加载,不过这一次,您的页眉php将处理一个发布负载。您的联系人表单将消失,因为在触发之前,它通常不会显示在页面上通过点击一个链接或按钮或任何东西

听起来你真的希望页面不刷新,并且联系人表单显示会被成功或错误的MSG(“Message Successfully Sent!”等)更新。要做到这一点,你需要通过AJAX发布,这将在后台发生,而不会刷新页面

为此,您需要首先更新PHP以返回Javascript可以使用的响应,而不是像GET请求那样生成整个页面

if (isset($_POST['submit'])) {
    // ... all your existing code ...

    if ($hasError) {
        echo "FAIL";
    } else {
        echo "OK";
    }

    die();  // POSTs to this page only generate success/error msgs, and bail out
}
接下来,您需要向验证中添加提交处理程序:

var validator = $("#contactform").validate({
    ...
    messages: {
    ...
    },
    submitHandler: function(form) {
        $.ajax({
            type: 'post',
            url: 'index.php',
            data: $(form).serialize(),
            success: function(data) {
                if (data === 'OK') {
                    // JS code to reveal your success alert, eg:
                    // $('div.alert-success').fadeIn();
                } else {
                    // JS code to reveal your danger alert
                }
            }
        });
        return false; // Block the normal submit, we just did it via AJAX
    }
最后,删除显示成功/危险警报的PHP条件,因为您现在将通过Javascript显示它们。只需向它们添加一个“隐藏”类,以便在第一次加载时都不会显示


只需一个警报区域,由PHP生成内容和类,就可以使事情变得更加整洁,例如,它可以返回JSON(在这种情况下,请确保在$.ajax()调用中添加数据类型:“JSON”).

是否有任何URL重写?包含表单的页面的URL是什么?@Salketer整个web只有一个主URL,联系人表单放在一个没有URL的滑出面板中。必须进行一些URL重写,似乎没有您向我们显示的任何代码。表单已被修改过BootStrap,实际上根本没有
操作=
。看看页面源代码。看看你的BootStrap/javascriptcode@RiggsFolly我的错,我把它的不同版本更新到了我的域中,准备用动作来尝试,但是当我在本地主机上尝试所有东西时,什么都不起作用,我肯定会尝试这个。谢谢你的解释更详细一点,我建议你研究一下位置散列。它可以用来记住用户在哪里,在页面加载时使用一些脚本,你可以很容易地找到散列并将用户发送到正确的视图…这将使它成为一个两步集成,首先你需要跟踪每个视图更改并将相应的散列放在文档位置,然后在页面加载时采取相应的行动。使用此功能还可以让用户使用后退/前进浏览器按钮进行导航
action="<?php echo $_SERVER['PHP_SELF']
action="your_page.php"
php echo $_SERVER['PHP_SELF']
if (isset($_POST['submit'])) {
    // ... all your existing code ...

    if ($hasError) {
        echo "FAIL";
    } else {
        echo "OK";
    }

    die();  // POSTs to this page only generate success/error msgs, and bail out
}
var validator = $("#contactform").validate({
    ...
    messages: {
    ...
    },
    submitHandler: function(form) {
        $.ajax({
            type: 'post',
            url: 'index.php',
            data: $(form).serialize(),
            success: function(data) {
                if (data === 'OK') {
                    // JS code to reveal your success alert, eg:
                    // $('div.alert-success').fadeIn();
                } else {
                    // JS code to reveal your danger alert
                }
            }
        });
        return false; // Block the normal submit, we just did it via AJAX
    }