Я работаю над динамическими флажками, и значения флажков извлекаются из базы данных mysql, а значения флажков также сохраняются в таблице db после того, как форма отправлена ​​​​здесь, все работает нормально

Проблема в том, что когда я нажимаю флажок, все значения флажка помечаются и проверяются, но я хочу, чтобы, когда я нажимаю одно значение флажка, функция должна помечать или проверять это значение, которое проверено, и не должно помечать все значения флажка?

запрос к базе данных mysql

 function select_user_permissions(){

 global $data;

 $result=db_rows(

 "SELECT * FROM `{$data['DbPrefix']}permissions` order by pid");

 return $result;

 }

function select_user_id_permissions(){

global $data;
$adminid=$_REQUEST['userid'];
$result=("SELECT * FROM `{$data['DbPrefix']}user_permission` 
where permuserid='$adminid' ");


return $result;
}



$post['select_user']=select_user_permissions();
$post['select_user_perm']=select_user_id_permissions();


<form name="my_form" method=post>

<? 
foreach($post['select_user'] as $key => $values){
?>
<input type=checkbox name=userperm[] value=<?=$values['pid']?> 
<?php if($post['userperm']) { echo " checked=checked'"; } ?>>

<label for="<?=$values['permname']?>"><?=$values['permname']?></label>
<? } ?>

<input class=submit type=submit name=send value="SAVE CHANGES">
</form>

здесь у меня есть решение

<script src='http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js'>

<SCRIPT LANGUAGE="JavaScript">

function Check(chk)
{
if(document.myform.Check_ctr.checked==true){
for (i = 0; i < chk.length; i++)
chk[i].checked = true ;
}else{

for (i = 0; i < chk.length; i++)
chk[i].checked = false ;
}
}

// End -->
</script>

<?php
echo "the following values have been checked: ";
$checked="";
$a = array();
if(isset($_POST["userperm"])) {
    foreach($_POST["userperm"] as $j=>$i) {
        $checked .= ($checked==""?"":",") . "checkbox" . $i;
        array_push($a, $i);
    }
}
echo $checked;

function was_checked($i,$a) {
if(in_array($i, $a)===true) {
return "checked='checked'";
return "";
}
}
?>

<? 
foreach($post['select_user'] as $key => $values){

?>
<input type=checkbox name=userperm[] value=<?=$values['pid']?>
<?=was_checked($values['pid'],$a)?>>
<label for="<?=$values['permname']?>"><?=$values['permname']?></label>
<? } ?>
0
user2164884 19 Ноя 2014 в 11:23

2 ответа

Вы должны создать массив $arrUserDtls["userid"] = {user_permission_name}.

Вместо того

<?php if($post['userperm']) { echo " checked=checked'"; } ?>>

Пожалуйста, используйте это:

<?php if($arrUserDtls[$values] == $values['permname']) { echo " checked=checked'"; } ?>>
0
Dipa 19 Ноя 2014 в 11:43
Но проблема в том, что после отправки формы все значения флажков отмечены и проверены? я хочу отметить только те значения, которые отмечены или проверены...
 – 
user2164884
19 Ноя 2014 в 11:46
Массив $arrUserDtls должен содержать только идентификатор пользователя и соответствующее имя разрешения, чтобы при выполнении условия «$arrUserDtls[$values] == $values['permname']» он отображался отмеченным
 – 
Dipa
19 Ноя 2014 в 11:49

Я не уверен в логике, но вам не хватает одинарной кавычки после checked=

<?php if($post['userperm']) { echo " checked='checked'"; } ?>>

Кроме того, я боюсь, что for="<?=$values['permname']?>" будет рассматриваться как строка, а не как код.

<label <?php echo "for='" . $values['permname'] . "'"; ?>><?=$values['permname']?></label>
0
MCTaylor17 19 Ноя 2014 в 12:09