【问题标题】:Save checked values on page refresh?在页面刷新时保存检查的值?
【发布时间】:2013-08-07 23:22:01
【问题描述】:

我用 ajax 和 php 保存了表单数据,重用了数据库中的数据。

但是我处理这个问题的方式不同,没有数据库,所以一些洞察力会很棒。

我正在通过电子邮件发送表单数据,所有数据都只是简单的复选框,值为01。当用户刷新页面 id 时,喜欢保留选中的值。

我想如果没有数据库,我需要使用 cookie,而避免 cookie 的唯一方法是 ajax 和数据库(严格来说,我的逻辑,不确定是否正确),这就是我问的原因,我只想要一个简单的解决方案。

表格 sn-p:

<input name="sharks" type="hidden" value="0">
<input name="sharks" type="checkbox" value="1" id="sharks" '.$VALUE ? ' checked="checked"' : ''.'>

该输入的 php 部分不稳定,我想质疑该值是 0 还是 1,如果是 1,则检查其是否为 0,然后为空。

从数据库中获取它会更容易,但由于没有数据库,所以不太确定,我猜 cookie 会到位。

很抱歉,如果最后一部分不稳定,但我有点不确定,不知道去哪里找。

使用会话:

session_start();
if(isset($_POST['submit'])) {
   if(isset($_POST['personalization_result'])) {   
    $_SESSION['value'] = $_POST['personalization_result']; } 
   else {
    $_SESSION['value'] = '';  
   }
} 

表格

<form action="<?php the_permalink(); ?>" method="post" id="question-form"> 

  <input type="hidden" name="submit" value="1">

       <?php 

             if ($_SESSION['value'] == 1) {
              $checked = 'checked="checked"'; } 

        ?>  

 <li>   
 <input name="personalization_result[memory_0]" type="hidden"   value="0">
 <input name="personalization_result[memory_0]" type="checkbox" value="1" id="personalization_result_memory_0" <?php $checked ?> >
 </li>

 <li>   
 <input name="personalization_result[memory_1]" type="hidden"   value="0">
 <input name="personalization_result[memory_1]" type="checkbox" value="1" id="personalization_result_memory_1" <?php $checked ?> >
 </li>

 <li>   
 <input name="personalization_result[memory_2]" type="hidden"   value="0">
 <input name="personalization_result[memory_2]" type="checkbox" value="1" id="personalization_result_memory_2" <?php $checked ?> >
 </li>

【问题讨论】:

  • 您始终可以将$_POST 保存在$_SESSION 中,例如页面顶部$_SESSION['vals'] = $_POST;

标签: php forms session


【解决方案1】:

此代码将数据存储在会话中:

<?php
session_start();
if(isset($_POST['submit']))
{
    if(isset($_POST['sharks']))
    {
        $_SESSION['value'] = $_POST['sharks'];
    }
    else
    {
        $_SESSION['value'] = '';
    }
}
?>
<form action="" method="POST">
<?php
print '<input name="sharks" type="checkbox" value="1" id="sharks" ';
if ($_SESSION['value'] == 1)
{
    print ' checked="checked"';
}

print ">";
?>
<br>
<input type="submit" name="submit" value="Save" />
</form>

为我工作,在我关闭并再次打开浏览器后保持复选框处于选中状态。经过一些测试,我添加了一个相当复杂的if 以避免未定义的变量通知。现在 set 部分看起来很健壮。

【讨论】:

  • 谢谢,我希望有人会发布一个 sn-p... 这就是我需要的(编写 if isset submit),它可以很好地处理所有数据,我知道你会这样做数据库,我现在知道你也可以在 isset 中编写会话,非常感谢
  • @MichaelJosephAubry 实际上,所有会话数据都存储在磁盘上的一个简单数据库中。
  • 我做了一些修改以适应我的代码,它不起作用,我在 OP 中发布了我所拥有的内容,希望你能看到我做错了什么,但基本上我正在尝试存储 if ($_SESSION)在一个变量中。
  • 我按照你的方式运行了代码,我让它工作了,但是适合我的代码 id 喜欢将 if value = 1 结果存储在一个变量中,我不想运行 if 语句每个输入字段
  • @MichaelJosephAubry 创建一个名称数组并循环遍历数组,在循环中检查if(isset($_POST[$var_name]))。因此,您可以检查每个变量并将其设置为会话。
【解决方案2】:

您可以使用会话或 cookie。基本上您将使用$_COOKIE$_SESSION 访问。我宁愿说这比使用数据库更容易。

对于 cookie,请查看 setcookie (http://www.php.net/setcookie)

会话:http://php.net/manual/en/book.session.php

【讨论】:

  • 是的,我完全打赌它比数据库更容易,但由于我从未使用 cookie 保存数据,并且显然基于我所知道的数据库方法会更容易拥有数据库经验,但我将阅读这些链接并将我的头包裹起来,谢谢。
  • @MichaelJosephAubry 我保证这很容易。对于 cookie,使用 setcookie 并使用 $_COOKIE 检索。对于会话,您将使用 session_start() 并使用 $_SESSION 设置/获取值。我更喜欢使用会话而不是 cookie。
【解决方案3】:

我会使用本地存储或会话存储,这是一个客户端内存存储位置,即使页面刷新也会持续存在,它集成到 html5 中。

这是一个很好的教程:

http://www.w3schools.com/html/html5_webstorage.asp

【讨论】:

  • 好吧,我看一下,我一直听说 localstorage 似乎很流行我发现一些使用本地存储的信息,只是看了一眼,似乎有点多,我又看了一眼,让我了解一下 w3schools
  • 这真的很简单,它基本上只是一个预定义的关联数组变量,并在刷新之间记住。它有点像 php 的 $_SESSION 变量,只是它只是客户端。
  • Dive Into HTML5 对 HTML5 存储有更好的解释。
  • 是的,那是我注意到的另一件事,并意识到为什么它非常受欢迎,它是网络的未来,并且与 HTML5 等新技术相关,所以它绝对是一项必须掌握的技能。
【解决方案4】:
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8">
        <title>Persist checkboxes 1</title>
        <script>
            window.jQuery || document.write("<script src='jquery-.1.1.js'><\/script>");
        </script>
        <script>
            $(document).ready(function()
            {
                $('#me').click(function()
                {

                    var seloption = $('input[type="checkbox"]:checked');
                    if (seloption.length > 0)
                    {
                        var abc = seloption.length + "checked \n";
                        //alert(abc);
                        i = 0;
                        seloption.each(function()
                        {
                            abc = abc + $(this).text(seloption[i]) + "<br>";
                        }

                        );
                        $('#msg').html(abc);
                    }
                }
                );
            }
            );
        </script>
    </head>
    <body>
        <div>
            <label for="option1">Option 1</label>
            <input type="checkbox" id="option1">
        </div>
        <div>
            <label for="option2">Option 2</label>
            <input type="checkbox" id="option2">
        </div>
        <div>
            <label for="option3">Option 3</label>
            <input type="checkbox" id="option3">
        </div>
        <div>
            <label for="option4">Option 4</label>
            <input type="checkbox" id="option4">
        </div>
        <div>
            <label for="option5">Option 5</label>
            <input type="checkbox" id="option5">
        </div>
        <div>
            <label for="option6">Option 6</label>
            <input type="checkbox" id="option6">
        </div>
        <div>
            <label for="option7">Option 7</label>
            <input type="checkbox" id="option7">
        </div>
        <div>
            <label for="option8">Option 8</label>
            <input type="checkbox" id="option8">
        </div>
        <div>
            <label for="option9">Option 9</label>
            <input type="checkbox" id="option9">
        </div>
        <button type="button" id="me">Submit</button>
        <div id="msg">



        </div>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script src="http://cdn.jsdelivr.net/jquery.cookie/1.4.0/jquery.cookie.min.js"></script>

        <script>
            $(":checkbox").on("change", function() {
                var checkboxValues = {};
                $(":checkbox").each(function() {

                    checkboxValues[this.id] = this.checked;

                });
                $.cookie('checkboxValues', checkboxValues, {expires: 1, path: '/'});


            });

            function repopulateCheckboxes() {
                var checkboxValues = $.cookie('checkboxValues');

                if (checkboxValues) {
                    Object.keys(checkboxValues).forEach(function(element) {
                        var checked = checkboxValues[element];
                        $("#" + element).prop('checked', checked);

                    });
                }
            }

            $.cookie.json = true;

            repopulateCheckboxes();
        </script>  
    </body>
</html>

【讨论】:

  • 提示:“仅代码”的答案几乎毫无价值;特别是在谈论相当多的代码时。您真的想解释一下您的解决方案到底在做什么!
  • 是的,你需要知道什么
  • @Miheretab Alemu - 我认为在添加 “您可以尝试以下代码:” 时不需要 that edit you made - 我回滚了。我希望这与获得问题/答案的曝光无关。此外,“试试这个”并不被广泛接受,它需要一个有效的解释。
猜你喜欢
  • 2015-05-19
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多