2017-02-21 4 views
0

У меня есть форма с флажками, которые используются для выбора данных из mysql. Я также хотел бы, чтобы флажки сохранялись, если пользователь сделал это. Кроме того, эти флажки генерируются из выбора mysql. Каждый пользователь имеет различные флажки в зависимости от их уровней разрешений и т.д.change checkbox checked via session variable

Так что я получил этот код работать:

<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 thatin_array("somestring", $_SESSION['subunit']), я бы как использовать in_array($row['subunit'], $_SESSION['subunit']), который просто не работает. Я хочу, чтобы понять, почему или придумать лучшее решение. Суть этого заключалась бы в создании списка флажков и уже проверке ящиков, которые ранее были сохранены в переменной сеанса.

На данный момент этот рабочий код. Если у меня есть список флажков, и я устанавливаю флажок с specificvalue «somestring», все флажки будут проверяться при создании формы флажка.

Я думаю, что смогу использовать jquery для этого, но google дает мне различные решения, которые нельзя использовать в моих. Я также не могу вручную записывать флажки, потому что их около 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 с if, но это более аккуратно. – Gusmar

1

Если вы хотите использовать его с $row['subunit'], вы не сможете сделать это с помощью функции scope, поскольку $ row недоступен внутри функции checked().

Для этого вам необходимо определить значение $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>"; 
}; 

Надеюсь, это поможет.