Andrew, I made a few adjustments to your script, this should do what you
want. It appears that you had a mixup in your selected subjects query.
Although, this may be a little slow because it makes a query after every
subject to see if it is checked.
$full_result = mysql_query("SELECT supersub_id, supersubject FROM
supersubs ORDER BY supersubject");
while ($supersub = mysql_fetch_assoc($full_result)) {
$faq_result = mysql_query("SELECT faq_id FROM faq_supersubs WHERE
supersub_id = '" . $supersub['supersub_id'] ."'");
if (mysql_num_rows($faq_result)) {
echo '<input type="checkbox" name="id" value="' .
$supersub['supersub_id']. '" CHECKED> ' . $supersub['supersubject'];
} else {
echo '<input type="checkbox" name="id" value="' .
$supersub['supersub_id']. '"> ' . $supersub['supersubject'];
}
}
A much more efficient way would to do some sort of outer join in order
to get a field that acts as a switch for checking if the checkbox should
be checked or not.
Andrew Darby wrote:
PHP people, I fall upon your mercy! I'm trying to do something which
shouldn't be so hard: to allow a user to edit an existing entry to a
FAQ database, I want to query the table of subjects to generate tick
boxes for all subjects, and query the faq_subjects intervening table to
determine which subjects are associated with that FAQ, and then combine
them into one long list of checkboxes, with the already selected
subjects CHECKED.
So, after spending way too much time on it, I made it work using
is_array to compare the two arrays of results, only to discover, when
putting it on my live server, that is_array doesn't accept an array for
the second value in MySQL versions < 4.2.
So, can anyone suggest another way to do this? The code using is_array
is below. Any help would be greatly appreciated; i'm going around in
circles on this, and as a one man shop, i've got no one to bounce this
off of [insert frowny face here].
Thanks,
Andrew
p.s. if this sort of nuts and bolts question is inappropriate for this
list, please let me know!
------- Used to Work PHP Code --------
//selected_subjects_query determines which subjects should be pre-ticked.
$selected_subjects_query = "SELECT faq.faq_id,
faq_supersubs.supersubs_id FROM faq, faq_supersubs
WHERE faq.faq_id = faq_supersubs.faq_id
AND faq.faq_id = '$this_id'";
// this will create an array of all items already checked
$selected_subjects_result = MYSQL_QUERY($selected_subjects_query);
$checked_ones = "";
while($myrow = mysql_fetch_array($selected_subjects_result)) {
$checked_ones[] .= $myrow['1'];
}
$full_query = "SELECT supersub_id, supersubject FROM supersubs ORDER BY
supersubject";
/* Select all active records (this is based on a db connection made
above)*/
$full_result = MYSQL_QUERY($full_query);
// create the checkboxes
while($myrow = mysql_fetch_array($full_result))
{
$sub_id = $myrow["0"];
$sub_name = $myrow["1"];
if (!in_array($sub_id, $checked_ones)) {
$checkboxes .= "<input name=\"subject[]\" type=\"checkbox\"
value=\"$sub_id\">$sub_name</input><br />";
} else {
$checkboxes .= "<input name=\"subject[]\" type=\"checkbox\"
value=\"$sub_id\" CHECKED>$sub_name</input><br />";
}
}