1

これは意味がありません。私は何時間もこれを理解しようとし、このサイト全体を検索しました。DB では、user_level は、内破した値として 1,2,3 です。チェックボックスを表示していますが、値がDBにあるものと一致するときにチェックを入れたいです。これは、DB に user_level の 1 または 2 のような単一の値しかない場合に完全に機能しました。1,2,3 を使用して、単純に値を展開し、in_array() を使用して結果を出し、その場合はチェックボックスを追加しました。何らかの理由でこれは機能しません。ランダムなボックスがチェックされているようです。コードは次のとおりです。

$sql = "SELECT user_level FROM table";
$result = query_db($sql);
$row = mysql_fetch_array($result);


$field_names =  array(MEMBER    => 'Member', 
              VISITOR => 'Visitor');


foreach ( $field_names as $key => $value )
{

    $thePostIdArray = explode(',', $key);

    //print_r($thePostIdArray); // testing output


    $selected = ( in_array($row['user_level'], $thePostIdArray) ) ? 'checked="checked"' : '';


    $options .= '<input type="checkbox" name="'.$perm_type.'[]" '.$selected.' value="'.$key.'"> '.$value. ' ';

}

$selected 値は、正しいチェックボックスで「チェック済み」の値を出力する必要がありますが、そうではありません。

4

2 に答える 2

0
<?php

$db = mysql_connect('localhost', 'root', 'password')
         or die('Could not connect: ' . mysql_error());

$query  = "select user_level from test.my_table";
$result = mysql_query($query,$db); 

/*
mysql> select user_level from my_table;
+------------+
| user_level |
+------------+
| 1,2,3      |
| 4          |
| 5,6        |
+------------+
3 rows in set (0.00 sec)

*/

/*

$rows = array();  
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{
   $rows[] = $row;
}

print "<pre>".print_r($rows,true)."</pre>"; 


Array
(
    [0] => Array
        (
            [user_level] => 1,2,3
        )

    [1] => Array
        (
            [user_level] => 4
        )

    [2] => Array
        (
            [user_level] => 5,6
        )

)
*/

$my_checkboxes = array('one','two','three','four','five','six','seven'); 
$group = 0; 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
   $row_values = explode(',',$row['user_level']); 

   /*
   print "<pre>".print_r($row_values,true)."</pre>"; 

   Array
   (
       [0] => 1
       [1] => 2
       [2] => 3
   )
   Array
   (
       [0] => 4
   )
   Array
   (
       [0] => 5
       [1] => 6
   ) 
   */

   print "<div style='border:1px solid black;display:inline-block'>";

   foreach ($my_checkboxes as $value => $label)
   {
      $selected = (in_array(($value+1), $row_values)) ? "checked='checked'" : ''; 

      print "<input type='checkbox' name='group$group' value='$value' $selected/>$label<br/>";  
   } 

   print "</div><br/><br/>";
   $group++; 
}


?> 

ここに画像の説明を入力

および PHP が出力する HTML (ソースを表示):

<div style='border:1px solid black;display:inline-block'><input type='checkbox' name='group0' value='0' checked='checked'/>one<br/>
<input type='checkbox' name='group0' value='1' checked='checked'/>two<br/>
<input type='checkbox' name='group0' value='2' checked='checked'/>three<br/>
<input type='checkbox' name='group0' value='3' />four<br/>
<input type='checkbox' name='group0' value='4' />five<br/>
<input type='checkbox' name='group0' value='5' />six<br/>
<input type='checkbox' name='group0' value='6' />seven<br/>
</div><br/><br/>

<div style='border:1px solid black;display:inline-block'><input type='checkbox' name='group1' value='0' />one<br/>
<input type='checkbox' name='group1' value='1' />two<br/>
<input type='checkbox' name='group1' value='2' />three<br/>
<input type='checkbox' name='group1' value='3' checked='checked'/>four<br/>
<input type='checkbox' name='group1' value='4' />five<br/>
<input type='checkbox' name='group1' value='5' />six<br/>
<input type='checkbox' name='group1' value='6' />seven<br/>
</div><br/><br/>

<div style='border:1px solid black;display:inline-block'><input type='checkbox' name='group2' value='0' />one<br/>
<input type='checkbox' name='group2' value='1' />two<br/>
<input type='checkbox' name='group2' value='2' />three<br/>
<input type='checkbox' name='group2' value='3' />four<br/>
<input type='checkbox' name='group2' value='4' checked='checked'/>five<br/>
<input type='checkbox' name='group2' value='5' checked='checked'/>six<br/>
<input type='checkbox' name='group2' value='6' />seven<br/>
</div><br/><br/>
于 2013-10-22T19:14:05.973 に答える