2012-08-01 97 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