【问题标题】:PHP - Form: save entries/selections on form submitPHP - 表单:在表单提交时保存条目/选择
【发布时间】:2011-11-03 18:44:17
【问题描述】:

我有一个 PHP 表单,其中包含一些下拉选项和文本字段条目。如果用户从下拉列表中选择了错误的项目,当他们提交表单时,我有它,以便它将向用户显示错误消息并强制浏览器返回上一页。问题是用户必须重新输入所有信息。

如何让表单保存数据直到表单提交成功?

编辑:

表单提交方法为$_POST,表单正在提交到另一个页面。

这必须使用严格的 PHP 来完成,因为 Javascript/Jquery 解决方案可能会被更安全的用户阻止脚本。

【问题讨论】:

    标签: php forms form-submit


    【解决方案1】:

    给你。这将起作用,并且不依赖于 Javascript:

    form.php //表单页面

    <?php session_start(); ?>
    <form method="post" action="action.php">
        <input type="text" id="input1" value="<?php echo (isset($_SESSION['fields']) ? $_SESSION['fields']['input1'] : '') ?>" />
        <input type="text" id="input2" value="<?php echo (isset($_SESSION['fields']) ? $_SESSION['fields']['input2'] : '') ?>" />   
    </form>
    

    action.php //动作页面

    <?php
        session_start();
    
        //do your validation here. If validation fails:
    
        $_SESSION['fields']['input1'] = $_POST['input1'];
        $_SESSION['fields']['input2'] = $_POST['input2'];
    
        //redirect back to form.php
    ?>
    

    【讨论】:

      【解决方案2】:

      表单是 POST 还是 GET?无论哪种方式,您都可以访问 PHP 变量 $_POST 或 $_GET 中的所有提交字段。在您的 HTML 中,您可以将这些值(如果已设置)传递给每个 HTML 输入元素的默认值。这样,如果是第一次,它们将是空白的,如果有错误,值将重新填充。

      【讨论】:

      • 如果表单提交到不同的页面,这将不起作用,对吧?如果表单在form.php 并且它正在提交到action.php,在action.php 验证失败并重定向回form.php 后,$_POST 将被清除。
      • 是的。我假设它被提交到同一个页面,这可能是一个错误的假设。在这种情况下,当您重定向回表单时,您可以将 $_POST 或 $_GET 填充到会话中。
      • 是的,我就是这么想的。要么将数据添加到$_SESSION,要么在重定向回form.php时,将数据添加到$_GET
      • @BenM:从action.php 提交表单需要Javascript。如果浏览器没有 JS(不支持或关闭),会不会失败得相当壮观?
      • 好的,还是将变量附加为链接?因此它们是可用的(即$_GET
      【解决方案3】:

      如果它们是选择值,您可以执行以下操作:

      <select name="my_select" id="my_select">
          <option value="123"<?php if($_REQUEST['my_select'] == 123) echo ' selected="selected"; ?>>123</option>
      </select>
      

      如果您有常规文本输入,您可以简单地将$_REQUEST 变量应用于value 属性:

      <input type="text" name="my_text" value="<?php echo $_REQUEST['my_text'] ?>" />
      

      【讨论】:

        【解决方案4】:

        我建议阻止页面导航离开提交,直到数据得到验证。输入 jQuery :)

        <script type="text/javascript" src="jquery-library.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                // Wait for the user to click on your button
                $('#submit_button').click(function(){
                    // Check each form field for an appropriate value
                    if ($('#form_field1').val() != 'something I expect')
                    {
                        alert('Wrong submission!');
                        return false;
                    }
                    // Forward the user to some url location
                    window.location = 'url';
                    return false;
                });
            });
        </script>
        

        【讨论】:

        • 有很多方法可以完成我的建议......每个人都有自己的细微差别,可能需要一些时间才能让这一切正常工作,但最后,我敢打赌它会你更快乐...
        • 很高兴让 Jquery 进行表单验证,但是如果关闭了 Javascript 并且验证落在 PHP 脚本上,那么在这种情况下您也需要一些方法来重新填充字段跨度>
        • 不错的评论,但正如我上面所说,所有这些想法都只是想法,直到我们可以确定 js 是否甚至是项目的一部分。目前,我们根本不知道。
        • @xbonez 你是对的。有些人(比如我自己)使用脚本拦截器。所以我宁愿让它只执行表单提交的操作而不是主动。
        • 在当今的互联网上使用脚本拦截器会破坏整个网络......在大多数情况下
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-29
        • 1970-01-01
        • 2017-01-30
        • 1970-01-01
        相关资源
        最近更新 更多