2015-11-23 50 views
1

我有表單頁面調用一個函數,它從mysql數據庫中拉出2個隨機名(由php函數pairsim()調用)。我想創建一組複選框,這些複選框將創建我可以用來限制到mysql拉的條件。這些條件需要繼續直到用戶更改配置(下面的更新按鈕)。php複選框保留頁面到頁面的值

我希望能夠創建一個選中值的數組作爲條件,直到用戶再次更新他的配置。不幸的是,我不能讓頁面一頁一頁地保持數組。我也有麻煩創建一個數組傳回到pairsim()。原諒我的無知,無論如何要完成我想要做的事情嗎?

select_checkbox.php:

<?php 
session_start(); 

$_SESSION['G'] = isset($_POST['pG']) ? 1 : 0 ; 
$_SESSION['D'] = isset($_POST['pD']) ? 1 : 0 ; 
$_SESSION['W'] = isset($_POST['pW']) ? 1 : 0 ; 
$_SESSION['C'] = isset($_POST['pC']) ? 1 : 0 ; 

?> 

<button class="btn btn-success" type="button" data-toggle="collapse" data- target="#collapselimit" aria-expanded="false" aria-controls="collapselimit"> 
     Limit Names 
    </button> 
<div class="collapse container-fluid" id="collapselimit"> 

<form role="form" method="post" action=<?php pairsim() ; ?>> 
<div class="panel panel-default"> 
    <div class="panel-body"> 


     <p><b>Position Limited:</b><br></p> 
     <!--create array with checked values to include to mysql function--> 
      <label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pG' checked>Goalies</label> 
      <label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pD' checked>Defensemen</label> 
      <label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pW' checked>Wingers</label> 
      <label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pC' checked>Centers</label> 

     <div> 
     <!--locks in checkbox configuratons--> 
     <input type="submit" class="btn btn-success btn-lg" value="Update"/> 
     <!--script below to check/uncheck all--> 
     <input type="button" class="btn btn-default btn-lg" id="CheckAll" value="Check All" /> 
     <input type="button" class="btn btn-default btn-lg" id="UncheckAll" value="Clear All" /> 
     </div> 
    </form> 
     </div> 
</div> 

+2

如果有'post'或表單被提交,只保存在'session'中。不要使用空格。每次用戶轉到該頁面時,您的「會話」始終保存。 – roullie

+0

不確定是否要創建一個包含會話創建的php文件並將其包含在所有其他頁面上 – davejal

回答

0

我在這裏看到了一些錯誤,我會嘗試在程序令中去。

您的複選框全部使用相同的名稱,因此生成的post var將爲$_POST['positionsel'];。所以你現有的會話檢查總是會失敗的。

BTW輸出var_dump($_POST['positionsel']);一切檢查會是什麼樣子:

array(4) { 
    [0]=> 
    string(2) "pG" 
    [1]=> 
    string(2) "pD" 
    [2]=> 
    string(2) "pW" 
    [3]=> 
    string(2) "pC" 
} 

修復:

session_start(); 
$checkBoxValues = array('pG', 'pD', 'pW', 'pC'); 

foreach($checkBoxValues as $check) 
{ 
    if(in_array($check, $_POST['positionsel'])) 
    { 
     $_SESSION[$check] = true; 
    } else { 
     $_SESSION[$check] = false; 
    } 
} 

這將檢查$ _POST變量的複選框值,如果存在的話,這意味着它是檢查。

這將導致一種情況,如果您不提交表單,則不會處理任何後處理值,導致$ _SESSION變量被擦除。爲了防止這種情況發生,我們需要檢查表單是否已經提交。一個廉價的方式做到這一點是命名提交場:如果形式實際上是

if(isset($_POST['submitted'])) 
{ 
    $checkBoxValues = array('pG', 'pD', 'pW', 'pC'); 


    foreach($checkBoxValues as $check) 
    { 
     if(in_array($check, $_POST['positionsel'])) 
     { 
      $_SESSION[$check] = true; 
     } else { 
      $_SESSION[$check] = false; 
     } 
    } 
} 

現在會增值經銷商將只覆蓋:

<input name="submitted" type="submit" class="btn btn-success btn-lg" value="Update"/> 

而且在foreach之前,你檢查它提交。

接下來,你需要改變你的複選框,只能是「檢查」,如果他們在實際檢測:

<label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pG' <?PHP if($_SESSION['pG']) { echo "checked"; }?> >Goalies</label> 
<label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pD' <?PHP if($_SESSION['pD']) { echo "checked"; }?> >Defensemen</label> 
<label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pW' <?PHP if($_SESSION['pW']) { echo "checked"; }?> >Wingers</label> 
<label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pC' <?PHP if($_SESSION['pC']) { echo "checked"; }?> >Centers</label> 

那麼就應該允許的形式與已配置複選框重裝,維護你的喜好只要會話保持活躍狀態​​,就可以重新提交&新頁面。

在此示例中,我將會話變量名稱更改爲複選框值,因此請記住,如果將其粘貼完畢,則需要在使用會話的任何其他位置進行調整(或調整要使用的代碼你的原始varnames)。