2016-09-15 20 views
0

我是PHP新手,我一直在爲複選框工作幾天,但仍然無法解決它。我試圖通過在會話中使用0和1作爲狀態來檢查複選框。問題是它不會在提交後顯示檢查,但實際上會在會話中檢查。 在POST中,我使用window.location.href來刷新頁面,使複選框顯示爲選中狀態。如果我沒有使用window.location.href,就像我上面提到的那樣,複選框被選中,但是在第一次點擊按鈕後沒有顯示。當我再次點擊該按鈕時,複選框將顯示爲選中狀態,會話狀態也會被檢查,同樣也會進入其他複選框。如何使用會話數組檢查複選框

<form name="filter" method="POST" action=""> 
    <div class="panel-body">              
     <div class="form-group"> 
      <?php 
       $check_array = array(); 

       $search = $_GET['search']; 
       $category = mysqli_query($conn, "SELECT * FROM categories"); 
       $numrow = mysqli_num_rows($category); 
       $i = 0; 
       while($crow = mysqli_fetch_assoc($category)) 
       { 
        array_push($check_array, [$crow['categories_id'], $crow['categories_name'],$_SESSION['cat'][$i][2]]); 
        if(empty($_SESSION['cat'][$i][2])){ 
        ?> 
         <script> 
          $(document).ready(function(){ 
           $('#categories_id<?php echo $crow['categories_id']; ?>').attr('checked', false);}); 
         </script> 
       <?php 
       } 
        elseif($_SESSION['cat'][$i][2] == 0){ 
       ?> 
        <script> 
         $(document).ready(function(){ 
          $('#categories_id<?php echo $crow['categories_id']; ?>').attr('checked', false);}); 
        </script> 
       <?php 
       } elseif($_SESSION['cat'][$i][2] == 1){ 
       ?> 
        <script> 
         $(document).ready(function(){ 
          $('#categories_id<?php echo $crow['categories_id']; ?>').attr('checked', true);}); 
        </script> 
       <?php 
       } 
       ?> 
        <div class="checkbox"> 
         <label><input type="checkbox" name="categories_id<?php echo $crow['categories_id']; ?>" id="categories_id<?php echo $crow['categories_id']; ?>"><?php echo $crow['categories_name']; ?> 
           <input type="hidden" name="catname<?php echo $crow['categories_id']; ?>" id="<?php echo $crow['categories_id']; ?>" value="<?php echo $crow['categories_id']; ?>"> 
         </label> 
        </div> 
       <?php 
        $i++; 
       } 
       ?> 
      </div> 
     </div><button type="submit" class="btn btn-default" name="Btn">Filter</button></form> 

這是帖子的功能

if(isset($_POST['Btn'])){ 
for($j=0; $j<count($check_array); $j++){ 
    $_SESSION['cat'][$j][0] = $check_array[$j][0]; 
    $_SESSION['cat'][$j][1] = $check_array[$j][1]; 
} 

for($k=0;$k<count($check_array);$k++){ 
    $val = $_POST['catname'.$check_array[$k][0]]; 
    if(isset($_POST['categories_id'.$check_array[$k][0]])){ 
     $selected = 1; 
    } 
    else{ 
     $selected = 0; 
    } 

    if($_SESSION['cat'][$k][0] == $val){ 
     $_SESSION['cat'][$k][2] = $selected; 
    } 
} 
?> 
<script> 
window.location = window.location.href;</script> 
<?php  
} 

下面是陣列

Array ([0] => 21 [1] => Accessories [2] => 1) 
Array ([0] => 13 [1] => Outdoor sports [2] => 0) 
Array ([0] => 2 [1] => Women [2] => 0) 
Array ([0] => 10 [1] => Yard, garden & outdoor [2] => 0) 

的輸出的第一個數字類別ID,然後按類別名稱,最後一個是當複選框被檢查,那麼它將成爲1其他0

請告訴我。

+0

我認爲最後一行是錯誤的「<?php}」。在這裏你打開php標籤,但從不關閉。我不知道爲什麼最後一個「}」? (對不起,如果我的英語不好):) –

+0

嗯,我相信你提到的錯誤只是我的不良編輯技巧。我相信沒有語法錯誤就像缺少一個關閉括號,因爲我已經計算了括號的數量是平衡的:) – GeographerOnCompSc

回答

0
Please try : 

    if(isset($_POST['Btn'])){ 
    for($j=0; $j<count($check_array); $j++){ 
     $_SESSION['cat'][$j][0] = $check_array[$j][0]; 
     $_SESSION['cat'][$j][1] = $check_array[$j][1]; 
    } 

    for($k=0;$k<count($check_array);$k++){ 
     $val = $_POST['catname'.$check_array[$k][0]]; 
     if(isset($_POST['categories_id'.$check_array[$k][0]])){ 
      $selected = 1; 
      $_SESSION['checkedIn'] = true; 
     } 
     else{ 
      $selected = 0; 

      $_SESSION['checkedIn'] = false; 
     } 

     if($_SESSION['cat'][$k][0] == $val){ 
      $_SESSION['cat'][$k][2] = $selected; 
     } 
    } 
    ?> 

and in html 

    <input type="checkbox" 
    <?php if($_SESSION['checkedIn']) { echo 'checked'; } ?> 
    name="categories_id<?php echo $crow['categories_id']; ?>" id="categories_id<?php echo $crow['categories_id']; ?>"><?php echo $crow['categories_name']; ?> 
相關問題