2012-12-21 35 views
-1

這裏是我的代碼如何在會話中存儲複選框狀態?

<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']; 
?> 

我要救選擇複選框中的會話。所以,當我回到頁面時,應該保持選中相同的複選框。

+0

爲什麼你的輸入沒有名稱屬性? – James

+0

我不使用表格。 – user1885099

+0

除非我錯過了一些東西......你如何設置$ _GET ['x']?沒有ajax調用,該javascript不會發出GET請求。 – phpisuber01

回答

0

在我看來,不是將它們保存到會話中,而是將它們保存在數據庫中。當你回到同一頁面時,從數據庫中檢索值。我相信,這將是更容易和最好的方法。您的問題

首先

解決方案,您需要確保您的數據/複選框值是否被保存到會話變量或沒有。因爲在經過你的代碼片段之後,我真的懷疑,你的複選框值會保存在會話變量中。

問題1:您沒有使用GET方法來存儲值到會話變量

<?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的代碼,你沒有提到任何會話變量,由此,可以匹配以前的檢查變量。

+0

我使用這個:location.href ='target.php?x ='+ x;我忘了將它添加到我發佈的條形碼中。 – user1885099

+0

通過任何鏈接/按鈕? – Ravi

+0

仔細閱讀我的解決方案並在您的代碼上實施它。 – Ravi

0

好的,下面是您嘗試使用會話完成的一個工作示例。

<?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中的一個簡單的三元運算符在服務器端完成的。

待辦事項

請確保您添加的_GET一些驗證,你不想成爲存儲erraneous數據。

此外,這是一種非常骯髒的方式來做這種事情,但一種方式無所不能。

祝你好運,讓我知道如果你有問題!