2017-02-21 48 views
0

我有一個表單,用於從mysql中選擇數據的複選框。如果用戶已經這樣做,我也想讓複選框保持檢查狀態。除此之外,這些複選框是從mysql選擇生成的。根據他們的權限等通過會話變量檢查更改複選框

每個用戶都有不同的複選框,所以我得到這個代碼的工作:

<form method="post" id="someselect"> 
    <?php 

    function checked() { 
     if (in_array("somestring", $_SESSION['specificvalue'])) { 
      return "checked"; 
     }; 
    } 

    $i = 0; 
    while ($row = $result->fetch_assoc()) { 
     echo "<input id='specificvalue' type='checkbox' " . checked() . " name='specificvalue[]' value='" . $row['specificvalue'] . "'>" . $row['longvalue'] . "<br>"; 
    }; 

    mysqli_close($con); 

    //$_SESSION['specificvalue']=implode("','",$specificvalue); 
    $_SESSION['specificvalue'] = $specificvalue; 
    ?> 
    <input type="submit" value="Submit"> 
    </p> 
</form> 

它的工作原理,產生特定於用戶的複選框和function checked()還與exeption that代替in_array("somestring", $_SESSION['subunit']),我會喜歡使用in_array($row['subunit'], $_SESSION['subunit']),這根本不起作用。我不願意理解爲什麼或想出更好的解決方案。這點應該是生成複選框列表,並且已經檢查過之前存儲在會話變量中的框。

目前,這個工作代碼。如果我有複選框列表,並選中specificvalue「somestring」框,則在生成複選框表單時將檢查所有複選框。

我想我可以使用jquery,但谷歌給了我不同的解決方案,不能在我的使用。我也不能手動編寫複選框,因爲它們有大約70個在一起,並且它們在時間上有所不同。我想在mysql數據庫更新時讓它們自動填充。

+0

沒有。這個問題上沒有包括這個id上的一串包含。會話和所有的變量工作得很好。唯一的問題是如何通過使用while循環生成的每個複選框行正確地保留選中的值 – Gusmar

+0

會話幾乎已經開始 – Gusmar

+0

,而不是checked ='checked'我剛剛檢查。它似乎工作,但並不完全保持所有選中的複選框 – Gusmar

回答

1

您在函數中不能使用in_array($row['subunit'], $_SESSION['subunit'])的原因是$row['subunit']不存在於函數的作用域中,因此它被定義出來。你可以做什麼,當你爲特定行調用checked()函數時,傳遞複選框的值。因此,這將是:

function checked($value) { 
    if (in_array($value, $_SESSION['specificvalue'])) { 
     return "checked"; 
    } 
} 

和呼叫:

while($row = $result->fetch_assoc()) 
{ 
    echo "<input id='specificvalue' type='checkbox' ".checked($row['subunit']). 
    " name='specificvalue[]' value='". $row['specificvalue'] . "'>" . 
    $row['longvalue']."<br>"; 
} 
+0

謝謝。如果我已經有兩個while循環,但是這更加整潔。 – Gusmar

1

如果你想與$row['subunit']一起使用它,你將無法在功能範圍內做到這一點,因爲功能checked()內部無法訪問$ row。

要做到這一點,您需要在函數中定義$row['subunit']的值作爲參數。像這樣:

function checked($valueToSearch) 
{ 
    if (in_array($valueToSearch, $_SESSION['specificvalue'])) 
     return "checked"; 
} 

而且,您每次打電話支票時都必須將其從循環中傳遞出去。

while($row = $result->fetch_assoc()) 
{ 
    echo "<input id='specificvalue' type='checkbox' ".checked($row['subunit'])." name='specificvalue[]' value='". $row['specificvalue'] . "'>" .$row['longvalue']."<br>"; 
}; 

希望這會有所幫助。