2013-10-22 136 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/>