0

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

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

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

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

表单片段:

<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>
4

4 回答 4

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的以避免未定义的变量通知。现在设置部分看起来很健壮。

于 2013-08-07T23:34:11.773 回答
1

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

这是一个很好的教程:

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

于 2013-08-07T23:27:31.097 回答
1

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

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

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

于 2013-08-07T23:26:49.537 回答
-1
<!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>
于 2017-02-07T19:09:22.097 回答