1

各 POST を特定のビット単位の値にバインドし、ビット単位の数値の合計量を偶発的にカウントする動的なチェックボックス フォームを作成する予定です。いい方法が思いつきません。誰かが私を導くことができますか?

<html>
<head></head>
<body>
<form method="post" action="test.php"/>
<?php

    $fields = array('writePost','readPost','deletePost','addUser',
                      'deleteUser'); 

    $perms = array(
        'writePost' => 1,
        'readPost' => 2,
        'deletePost' => 4,
        'addUser' => 8,
        'deleteUser' => 16
  );

    $results = array();



     foreach($fields as $field)
     {
          echo "<input type='checkbox' name='".$field."' value='".$field."' />";
          echo "<label for='".$field."'>".$field."</label>";
          echo "<br/>";

     }

 if(isset($_POST['submit']))
 {
     foreach($_POST as $posts)
     {
       $posts = $results;

          //
          $total_key = 0;
          $array_key = 1;

          foreach ($perms as $key)
          {

            if (!$key=='read')
              {
              $array_key = $array_key*2;
              }else{
              $array_key  = $array_key+$total_key;
            }

            foreach ($posts as $perms)
            {

              $array_key = $post;
            }

        }
    }

    var_dump($results);

}

var_dump($fields);

?>
<input type="text" name="name" value="name"/>
<input type="submit" name="submit" value="submit"/>
</form>
</body>
</html>
4

1 に答える 1

0

入力の値をフィールド名ではなく数値にしたいと思います:

echo "<input type='checkbox' name='nums[]' value='".$perms[$field]."' />";

その後、可能な限り最大の数から始めて、逆に戻ります。

$n = sizeof($perms)-1;
$total = array_sum($_POST['nums']);
for($i=$n;$i>0;$i--)
{
    $pow = pow(2, $i);
    if ($pow > $total)
    {
        //$fields[$i] is checked
        $total-=$pow;
    }
}

しかし、実際には、チェックされた値を配列に入れ、PHP で設定されているかどうかを確認するだけで、混乱を避けることができます。

于 2012-12-18T19:22:50.890 に答える