2013-10-22 217 views
0

这是毫无意义的人我试图找出这个了几个小时,并搜索遍布此网站。在数据库中,user_level为1,2,3,作为I imploded的值。我正在显示复选框,我希望在数值与数据库中的值匹配时检查它们。当数据库中只有一个值(如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. ' '; 

} 

的$选择的值应该输出的“选中”在正确的复选框值,但事实并非如此。

+0

您应该转储'$ row'在foreach之前,以确保它包含了你在找什么。而'$ field_names'的值似乎没有意义......实际上,从不在'$ row'之上,因为它实际上并没有在任何地方使用。是整段代码还是你编辑了一些东西?另外..如果你应该使用'$ row'并且有好几行......你需要为每一行执行while($ row = mysql_fetch_array($ result)){....}'回到......(你应该使用msqli_或pdo bc它更安全,大声笑...我现在不再更新它,对不起!) –

+0

$行显示数据库中的user_level值。当user_level中只有1位数字时,此功能完美无缺。只有当这些逗号被添加时,这是拧紧。我认为in_array()不能以某种方式工作。 –

+0

您可以发布$ row中返回的内容的示例吗?在'$ fieldnames'中有'MEMBER'和'VISITOR'常量吗?如果不是,那究竟发生了什么?我不知道你想做什么......有多少个复选框?二? –

回答

1

多个问题:

array(MEMBER ...不正确。 MEMBERVISITOR就像那些未定义的常量(除非你没有在其他地方显示define()调用)。 PHP会“礼貌地”将它们纠正为字符串,但会发出警告。然后

你的foreach()循环采用这种新的阵列和循环对其内容:

foreach ($field_names as $key => $value) { 
    $thePostIdArray = explode(',', $key); 

但在这一点上$key只是一个字符串,例如'会员'或'访客'。这不是数组,所以没什么可爆炸的。

$foo = explode(',', 'member'); 

会产生含有0 => 'member'单个元件阵列,所以,现在你有一个数组。而那纯粹是偶然的,会让你的in_array电话工作。但是,这整个序列是毫无意义和完全多余的。

注意in_array做了区分大小写的比较:

$arr = array('FOO'); 
var_dump('foo', $arr); 

将返回一个布尔值false,因为FOO != foo在这种情况下。

+0

是的,常数是在别的地方定义的。 –

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++; 
} 


?> 

enter image description here

和HTML的PHP​​输出(查看源代码):

<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/>