bob12345
bob12345

Reputation: 111

php retain an array checkbox

I'm a complete noob but I have searched everywhere and can't find a solution.

What I have is an array of courses that I pull from my database (e.g.: maths, art, science). These can change so I must add new courses all the time.

When a user ticks 2 of 3 courses (for example) but fails to add his username, then after the validation I want those 2 checkboxes to keep their old tick, so he must refill only his username in order to proceed.

What I get are all the checkboxes ticked :{

I'm so confused.

<?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)
}
?>

Upvotes: 3

Views: 169

Answers (2)

dtakis
dtakis

Reputation: 581

Is this what you want?

<?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)
}
?>

Upvotes: 1

Matt
Matt

Reputation: 7040

You have to set your $checked variable independently for each checkbox.

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

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

Then in your loop that outputs the checkboxes, print the corresponding $checked value.

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)
}

Upvotes: 1

Related Questions