【问题标题】:Proper way to submit a form with php / javascript使用 php / javascript 提交表单的正确方法
【发布时间】:2023-03-29 04:00:02
【问题描述】:

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

在某种程度上,我有两个问题:1 特别是关于我正在开发的网站,另一个是关于表单提交的一般性问题。

问题 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>

当我提交表单时,它会刷新并将我的回显消息放入我的 index.php?page=home 页面而不是我的 index.php?page=contact 页面。我如何让回声留在表单的同一页面上? (我已尝试更改表单的 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){}

有人熟悉上面的代码吗?如果是这样,是否有正确提交表单的通用脚本?

谢谢!

【问题讨论】:

  • 您不能只使用 AJAX 提交表单吗?
  • 问题 2:您确定您不只是将 lastpass 作为扩展名并且自动注入到表单字段中吗?我想这就是为什么你到处都能看到它的原因。
  • 我确实有 lastpass 作为扩展,我没有意识到它会将代码扔到每个页面中。谢谢!
  • 你好user2603058,请不要把2个问题合二为一。

标签: php javascript forms


【解决方案1】:

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

【讨论】:

  • 这是正确答案。您无需将表单从使用 POST 更改为 GET;您可以使用 POST 提交到带有查询参数的 URL(即page)。
【解决方案2】:

看看您的代码是如何以$page = $_GET['page']; 开头的?

这意味着您将发送一个“页面”变量作为 url 的一部分。所以

把你的表单标签改成这个

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

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

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

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

所以试试这个: 转到 index.php?page=contact,它将解决您的第一个问题。

【讨论】:

    【解决方案3】:

    您的表单需要“记住”当前页面并将其发送出去:

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

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

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

    【讨论】:

    • 我试过了,当你尝试提交时它仍然会加载索引页面
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2020-04-10
      • 2023-04-04
      • 1970-01-01
      • 2016-10-19
      相关资源
      最近更新 更多