2012-08-01 95 views
3

我是一個完整的noob,但我到處搜索並找不到解決方案。php保留數組複選框

我所擁有的是我從數據庫中提取的一系列課程(例如: 數學,藝術,科學)。這些可以改變,所以我必須一直添加新的課程。

當用戶蜱的3個療程(例如)2,但無法添加自己的用戶名,再經過驗證我希望這些2個複選框,以保持其原有的打勾,所以他必須按順序進行填充只是他的用戶名。

我得到的是什麼打勾的所有複選框:{

我很困惑。

<?PHP 
$check="unchecked"; 
?> 

<?PHP 
if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    foreach ($_POST['cid'] as $cid) { 
     $check="checked"; 
    } 
} 
?> 

<?PHP 
$course_data = "SELECT * FROM course ORDER BY cname"; 
$get_course = mysql_query($course_data) or die (mysql_error()); 

while ($db_field = mysql_fetch_assoc($get_course)){ 
    $cname= $db_field['cname'] ;//course name 
    $cid= $db_field['cid'] ;// course id 

    print"<BR>". 
    "<FONT COLOR='blue' SIZE='4'><B>$cname</B></FONT>". 
    "<input type='checkbox' name='cid[]' value='$cid' $check>"; // here are the courses(checkboxes) 
} 
?> 

回答

1

您必須爲每個複選框獨立設置您的$checked變量。

$checkedBoxes = array(); 
foreach($cid as $id) { 
    $checkedBoxes[$id] = "checked='false'"; 
} 

foreach ($_POST['cid'] as $cid) { 
    $checkedBoxes[$cid] = "checked='true'"; 
} 

然後在輸出複選框的循環中打印相應的$選中的值。

while ($db_field = mysql_fetch_assoc($get_course)){ 
    $cname= $db_field['cname'] ;//course name 
    $cid= $db_field['cid'] ;// course id 

    print"<BR>". 
    "<FONT COLOR='blue' SIZE='4'><B>$cname</B></FONT>". 
    "<input type='checkbox' name='cid[]' value='$cid' {$checkedBoxes[$cid]}>"; // here are the courses(checkboxes) 
} 
+0

首先謝謝!但我得到一個錯誤未定義的變量:checkedBoxes中,如果我發佈$ checkedBoxes [$ cid]後刪除大括號我得到一個偏移量錯誤我該怎麼辦? – bob12345 2012-08-01 16:59:40

1

這是你想要的嗎?

<?PHP 
if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 

    $cid_array = $_POST['cid']; 

/*foreach ($_POST['cid'] as $cid) { 
$check="checked"; 
}*/ 
} 
?> 


<?PHP 
$course_data = "SELECT * FROM course ORDER BY cname"; 
$get_course = mysql_query($course_data) or die (mysql_error()); 

while ($db_field = mysql_fetch_assoc($get_course)){ 
    $cname= $db_field['cname'] ;//course name 
    $cid= $db_field['cid'] ;// course id 
    if(is_array($cid_array)) 
{ 
    if(in_array($cid, $cid_array)) 
    { 
     $check="checked='checked'"; 
    } 
    else 
    { 
     $check=""; 
    } 
} 
else//it is not array because nothing was checked 
{ 
    if($cid == $cid_array) 
    { 
     $check="checked='checked'"; 
    } 
    else 
    { 
     $check=""; 
    } 
} 

print"<BR>". 
"<FONT COLOR='blue' SIZE='4'><B>$cname</B></FONT>". 
"<input type='checkbox' name='cid[]' value='$cid' $check>"; // here are the courses(checkboxes) 
} 
?> 
+0

嘿,謝謝你,這是偉大的工程,但我得到這個警告:in_array()期望參數2是數組,任何建議? – bob12345 2012-08-01 17:07:15

+0

我對我的代碼做了輕微的改動,並添加了一個if is_array。我認爲,沒有選擇任何東西(在加載時)數組是空的!如果有任何問題評論,我會在本地測試代碼並更新它! – dtakis 2012-08-03 01:32:10