【问题标题】:How to store checkboxes states in session?如何在会话中存储复选框状态?
【发布时间】:2012-12-09 02:09:37
【问题描述】:

这是我的代码

<table class='block'>
  <tr>
    <td>
      <input class='c1' type='checkbox' lid='checkbox1'>
        <label>checkbox1</label>
      </td>
    <td>
      <input class='c2' type='checkbox' lid='checkbox2'>
        <label>checkbox2</label>
      </td>
    <td>
      <input class='c2' type='checkbox' lid='checkbox3'>
        <label>checkbox3</label>
      </td>
    <td>
      <input class='c2' type='checkbox' lid='checkbox4'>
        <label>checkbox4</label>
      </td>
    <td>
      <input class='c3' type='checkbox' lid='checkbox5'>
        <label>checkbox5</label>
      </td>
    <td>
      <input class='c3' type='checkbox' lid='checkbox6'>
        <label>checkbox6</label>
      </td>
  </tr>
</table>
<script type='text/javascript'>
  $('input[type=checkbox]').each(function (){
  if (this.checked) {
  var x = $(this).attr('lid');
  }
  });
</script>
<?php
    if(!isset($_SESSION))
        {
            session_start();
        }
    if(!isset($_GET['x'])) $_GET['x'] = '';
    $_SESSION['x'] = $_GET['x'];
 ?>

我想在会话中保存选中的复选框。因此,当我返回该页面时,应该保持选中相同的复选框。

【问题讨论】:

  • 为什么你的输入没有名字属性?
  • 除非我遗漏了什么……你是如何设置 $_GET['x'] 的?如果没有 ajax 调用,该 javascript 不会发出 GET 请求。
  • @user1885099 那么你是如何通过查询字符串将数据提交回页面的呢?
  • 我通过 jquery .post 传递数据
  • @user1885099 您能否在帖子中包含回发代码以及您检查会话内容的方式。

标签: php session checkbox


【解决方案1】:

在我看来,与其将它们保存到会话中,不如将它们保存在数据库中。当您返回同一页面时,从数据库中检索值。而且我相信,这将是更容易和最好的方法。

您的问题的解决方案

首先,您需要确定您的数据/复选框值是否保存到会话变量中。因为,在通过您的代码-sn-p 之后,我真的怀疑您的复选框值是否会保存在会话变量中。

问题 1:您没有使用 GET 方法将值存储到 Session 变量中

<?php
    if(!isset($_SESSION))
        {
            session_start();
        }
    if(!isset($_GET['x'])) $_GET['x'] = '';
    $_SESSION['x'] = $_GET['x'];  //  storing data using GET method
 ?>

这是您的代码,您尝试使用 GET 方法将数据存储在会话变量中。但是,我没有找到您传递所选值的任何form

问题 2:您没有检索 Session 变量

<script type='text/javascript'>
  $('input[type=checkbox]').each(function (){
  if (this.checked) {
  var x = $(this).attr('lid');
  }
  });
</script>

在您的javascript 代码中,您没有提及任何会话变量,通过它,您可以匹配之前检查的变量。

【讨论】:

  • 我用这个:location.href = 'target.php?x='+x;我忘记在我发布的条纹代码中添加它。
  • 通过任何链接/按钮??
  • 然后在单击该按钮后,检查您的 URL,它在那里显示的值。
【解决方案2】:

好的,这是您尝试使用会话完成的工作示例。

<?php 
session_start();
if(isset($_GET['checkbox']))
{
    $_SESSION[$_GET['checkbox'][0]] = isset($_SESSION[$_GET['checkbox'][0]]) ? +!($_SESSION[$_GET['checkbox'][0]]) : TRUE;
    print_r($_SESSION[$_GET['checkbox'][0]]);
    die;
}
?>
<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    </head>
    <body>
        <table class='block'>
             <tr>
                 <td>
                     <input class='c1' type='checkbox' lid='checkbox1' <?php echo (isset($_SESSION['checkbox1'])) ? 'CHECKED="CHECKED"' : ''; ?>><label>checkbox1</label>
                 </td>
                 <td>
                     <input class='c2' type='checkbox' lid='checkbox2' <?php echo (isset($_SESSION['checkbox2'])) ? 'CHECKED="CHECKED"' : ''; ?>><label>checkbox2</label>
                 </td>
                 <td>
                     <input class='c2' type='checkbox' lid='checkbox3' <?php echo (isset($_SESSION['checkbox3'])) ? 'CHECKED="CHECKED"' : ''; ?>><label>checkbox3</label>
                 </td>
                 <td>
                     <input class='c2' type='checkbox' lid='checkbox4' <?php echo (isset($_SESSION['checkbox4'])) ? 'CHECKED="CHECKED"' : ''; ?>><label>checkbox4</label>
                 </td>
                 <td>
                     <input class='c3' type='checkbox' lid='checkbox5' <?php echo (isset($_SESSION['checkbox5'])) ? 'CHECKED="CHECKED"' : ''; ?>><label>checkbox5</label>
                 </td>
                 <td>
                     <input class='c3' type='checkbox' lid='checkbox6' <?php echo (isset($_SESSION['checkbox6'])) ? 'CHECKED="CHECKED"' : ''; ?>><label>checkbox6</label>
                 </td>
             </tr>
         </table> 
    </body>
</html>

<script>
    $(document).ready(function() {
       $('input[type=checkbox]').on('change', function() {
           $.get("sefesf.php", { 'checkbox[]':$(this).attr('lid') });
       }) 
    });
</script>

瘦子

基本上,每次您选中一个框时,都会向自身发出一个 GET 请求并执行 +!在会议上。这意味着相反。所以它会自动检查和取消选中会话变量。该请求使用 AJAX 异步完成并存储数据。 CHECK 功能通过 PHP 在页面加载时在服务器端完成,并在 DOM 中使用简单的三元运算符。

待办事项

确保在 _GET 上添加一些验证,您不想存储错误数据。

此外,这是一种非常肮脏的方式来做这种事情,但方式却一点也不差。

祝你好运,如果您有任何问题,请告诉我!

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    相关资源
    最近更新 更多