使用php/javascript提交表单的正确方式


Proper way to submit a form with php / javascript

我正试图找出通过php:提交表单的正确方法

在部分中,我有两个问题:一个是关于我正在工作的网站,另一个是有关一般的表格提交。

问题1.我正在使用php作为我的网站模板。所以我有一个带页眉和页脚的index.php页面,我的所有内容都是从php函数中提取的,比如:

     <article id="main">
        <?php
            $page = $_GET['page'];
                if(empty($page)){
                    $page = 'home';
                }
                $page.='.php';
                if(file_exists("pages/$page")) {
                    include("pages/$page");
                } else {
                    echo "$page no exist";
                }
        ?>
     </article>

这是我在表单中使用的代码,并在index.php页面的head标签中使用:

        <head>
<?php
if ($_POST['submit'] && $human == '4') {
    if (mail ($to, $subject, $body, $from)) { 
        echo '<p>Your message has been sent!</p>';
    } else { 
        echo '<p>Something went wrong, go back and try again!</p>'; 
    }
} else if ($_POST['submit'] && $human != '4') {
    echo '<p>You answered the anti-spam question incorrectly!</p>';
}
?>
</head>

和html表单代码:

<form method="post" action="index.php">
    <legend>Contact Us</legend>
    <fieldset>
        <label>Name</label>
        <input name="name" placeholder="Type Here">
        <label>Email</label>
        <input name="email" type="email" placeholder="Type Here">
        <label>Message</label>
        <textarea name="message" placeholder="Type Here"></textarea>
        <label>*What is 2+2? (Anti-spam)</label>
        <input name="human" placeholder="Type Here">
    </fieldset>
     <input id="submit" name="submit" type="submit" value="Submit">
</form>

当我提交表单时,它会刷新并将我的echo消息放入我的index.php?page=主页而不是我的index.php?page=联系人页面。如何使回声保持在表单的同一页上?(我试过更改表单的action="部分,但似乎无法使其发挥作用)。

问题2 一般来说,当我检查其他网页以查看它们的表单代码时,我到处都能看到:

try
{
    for(var lastpass_iter=0; lastpass_iter < document.forms.length; lastpass_iter++)
    {
        var lastpass_f = document.forms[lastpass_iter];
        if(typeof(lastpass_f.lpsubmitorig2)=="undefined")
        { 
            lastpass_f.lpsubmitorig2 = lastpass_f.submit;
            lastpass_f.submit = function(){ 
                var form=this;
                var customEvent = document.createEvent("Event");
                customEvent.initEvent("lpCustomEvent", true, true);
                var d = document.getElementById("hiddenlpsubmitdiv"); 
                for(var i = 0; i < document.forms.length; i++)
                { 
                    if(document.forms[i]==form)
                    { 
                        d.innerText=i; 
                    }
                } 
                d.dispatchEvent(customEvent);
                form.lpsubmitorig2(); 
            } 
        }
    }
}
catch(e){}

有人熟悉上面的代码吗?如果是的话,是否有一个正确提交表格的通用脚本?

谢谢!

我不确定您的第二个问题,但对于提交联系人表单,您是否尝试将表单的操作设置为"index.php?page=contact"?

查看您的代码如何从$page = $_GET['page'];开始?

这意味着您将发送一个"page"变量作为url的一部分。所以

将您的表单标签更改为此

<form method="GET" action="index.php?page=contact">  

你应该开始看到你的期望。

GET方法告诉浏览器将表单数据作为一个长URL发送(因此,对用户可见),而不是POST,在POST中,数据将被无形地发送到服务器(更安全)。

但是,您使用$_POST来检索GET数据,因此您的其余代码将无法工作。

因此,请尝试以下操作:转到index.php?page=联系,它将解决您的第一个问题。

您的表单需要"记住"当前页面并将其发送,因此:

<input type='hidden' name='page' value='<?php echo $page; ?>'>

脚本还应该检查当前请求是否是表单提交:

$page = (isset($_GET['page'])) ? $_GET['page'] : $_POST['page'] ;

我假设您的表单在联系人页面上?该页面是基于来自其他地方的$_GET['page']来检索的。刷新页面时,它会再次运行页面选择脚本。但是,由于您不是从带有method=post的表单来到那里的,因此$_GET['page']不存在,因此页面根据您的代码设置为主页。您需要存储页面的名称;作为$_SESSION变量或通过联系人表单上的隐藏输入(如果要这样做,请记住将$_GET更改为$_REQUEST)。