获取表单复选框值并通过分页传递它们?

时间:2009-05-19 16:24:29

标签: php javascript mysql ajax

我需要从一些选中的复选框中获取值,并通过php / mysql中的分页传递这些值。如果在另一个页面上用户选择其他复选框,我需要将它们的值添加到之前选择的数组中。

我需要这个产品比较页面。总之,我需要:

  • 获取复选框值
  • 存储它们
  • 包含分页中其他页面的复选框值
  • 当用户选择“比较”时,将该数组发送到比较页面。

有人知道怎么做吗?相关的例子将不胜感激?

4 个答案:

答案 0 :(得分:0)

有不同的方法来维护页面的状态,包括cookie,会话变量,隐藏的输入,在查询字符串中传递它们,持久化到数据库等。在这种情况下,我可能会使用会话变量。

有关PHP会话的更多信息,请参阅PHP Sessions

答案 1 :(得分:0)

一种解决方案是在表单内部的div内加载所有页面。当您单击新页面链接时,隐藏除了您需要显示的所有div之外的所有{{1}}。这样,所有复选框都以相同的形式提交,从而更容易处理服务器端。当然,这取决于每个页面的重量以及有多少页面。

另一种解决方案是保留会话变量,跟踪点击的内容。每次有人点击进入另一个页面。向服务器POST一个复选框列表。

答案 2 :(得分:0)

您可以使用javascript将复选框选项存储在Cookie中。这里有一些示例代码可以帮助您朝着正确的方向前进。

var aa_checkbox;

function init_checkbox(){
  //setup blank cb cookie
  if(!Cookie.read('cb')){
    Cookie.write('cb', JSON.encode({}));
  }

  //setup "associative array" to match what is currently in the cookie
  aa_checkbox = JSON.decode(Cookie.read('cb'));


  //set up each checkbox with class="remember_cb"
  $$('input.remember_cb').each(function(el){

    //mark checked if it is in the cookie
    if(aa_checkbox[el.name]){
      el.checked = 'checked'
    }

    //setup onclick event to put checkbox status in the 
    el.addEvent('click', function(){
      if(el.checked){
        aa_checkbox[el.name] = 1;
      }else{
        delete(aa_checkbox[el.name]);
      }   
    })
  })

  //save aa_checkbox back into cookie upon leaving a page
  window.onbeforeunload = function(){Cookie.write('cb', JSON.encode(aa_checkbox));};

  setup_form();

  return true;
}

function setup_form(){
  //set up form so that it adds the inputs upon submit.
  $$('form.remember_cb_form').each(function(form){
    form.addEvent('submit', function(ev){
      //clean up previously inserted inputs
      var aa_hidden_insert = $$('input.hidden_insert');
      $each(aa_hidden_insert, function(el){ 
        el.parentNode.removeChild(el);
      })

      var el_form = this;

      //insert hidden elements representing the values stored in aa_checkbox
      $each(aa_checkbox, function(i_value, s_name){
        if(i_value){ 
          var el_input = document.createElement('input');
          el_input.type = 'hidden';
          el_input.value = i_value;
          el_input.name = s_name;
          el_input.setAttribute('class', 'hidden_insert');
          el_form.appendChild(el_input);
        }
      });
    });
  });
}

window.addEvent('domready', init_checkbox);

working demo here和更详尽的解释here

答案 3 :(得分:-1)

您的分页链接实际上可以执行表单POST,然后在您的PHP脚本中读取复选框[],并更新隐藏的表单元素或将值添加到会话,任何有状态的。所以你的锚看起来像


<a href="#" onclick="document.myform.submit()">next</a>