With a fair amount of help I've just about managed to get a page working which displays a list of checkboxes and their titles using arrays.
The table they're based on in 'keywords', which contains Keyword_ID (PK), Keyword and Category.
The code looks like :
<table width="942px" border="0" cellpadding="0" cellspacing="0" align="center">
<form name="form1" method="POST" action="photoKeywordsEdited.php">
<input type='hidden' name='Photo_ID' value='<?php echo $Photo_ID; ?>'>
<?php require_once('Connections/Photolibrary.php');
error_reporting(E_ALL & E_STRICT);
$Photo_ID = 1;
if (isset($_GET['Photo_ID'])) {
$Photo_ID = intval($_GET['Photo_ID']);
}
mysql_select_db($database_Photolibrary, $Photolibrary);
$query_Keyword_Match = sprintf("SELECT * FROM photokeywords WHERE Photo_ID = %s", $Photo_ID);
$Keyword_Match = mysql_query($query_Keyword_Match, $Photolibrary) or die(mysql_error());
$photokeywords = array();
while ($row_Keyword_Match = mysql_fetch_assoc($Keyword_Match)) {
$photokeywords[] = $row_Keyword_Match['Keyword_ID'];
}
$totalRows_Keyword_Match = mysql_num_rows($Keyword_Match);
$sql = "SELECT * FROM Keywords ORDER BY Category, Keyword";
$keywordArray = array();
$query = mysql_query($sql);
while ($result=mysql_fetch_assoc($query)) {
$keywordArray[$result['Category']][] = $result;
}
$current_category = '';
foreach ($keywordArray as $categoryData)
{
if($current_category <> $categoryData[2]['Category'])
{
//open a new <tr>
echo "<tr class=\"categorycell\">\n";
//print the category as a header
echo "<td colspan=\"10\">". $categoryData[2]['Category']."</td>\n";
//close the <tr>
echo "</tr>\n";
$current_category = $categoryData[2]['Category'];
}
$row_count = 0;
//even row
if($row_count%2==0)
{
$row_type = 'even';
}
//odd row
else
{
$row_type = 'odd';
}
echo("<tr class=\"".$row_type."\">");
foreach ($categoryData as $keywordData) {
echo("<td><input ");
if (in_array($keywordData['Keyword_ID'],$photokeywords)) {
echo "checked ";
}
echo('name="ckbox['.$keywordData['Keyword_ID'].']" type="checkbox" class="tickbox2" id="ckbox['.$keywordData['Keyword_ID'].']"></td>');
echo("<td>".$keywordData['Keyword'].'</td>');
if ($counter==4) {
echo('</tr><tr>');
$counter = 0;
} else {
$counter++;
}
}
echo('</tr>');
$row_count++;
}
?>
</table>
It should display each category distinctly, with the keywords of each category below.
It pretty much does so, but sometimes starts a new row after as few as three checkboxes with title. (There should be room for five.)
Below is some code that is produced :
<table width="942px" border="0" cellpadding="0" cellspacing="0" align="center">
<form name="form1" method="POST" action="photoKeywordsEdited.php">
<input type='hidden' name='Photo_ID' value='149'>
<tr class="categorycell">
<td colspan="10">Activities / sports and crafts</td>
</tr>
<tr class="even">
<td><input name="ckbox[31]" type="checkbox" class="tickbox2" id="ckbox[31]"></td>
<td>Ball games</td>
<td><input name="ckbox[32]" type="checkbox" class="tickbox2" id="ckbox[32]"></td>
<td>Climbing / mountaineering</td>
<td><input name="ckbox[33]" type="checkbox" class="tickbox2" id="ckbox[33]"></td>
<td>Crafts</td>
<td><input name="ckbox[34]" type="checkbox" class="tickbox2" id="ckbox[34]"></td>
<td>Cycling</td>
<td><input name="ckbox[35]" type="checkbox" class="tickbox2" id="ckbox[35]"></td>
<td>Dancing</td>
</tr>
<tr>
<td><input name="ckbox[36]" type="checkbox" class="tickbox2" id="ckbox[36]"></td>
<td>Fishing</td>
<td><input name="ckbox[37]" type="checkbox" class="tickbox2" id="ckbox[37]">
</td><td>Golf</td>
<td><input name="ckbox[38]" type="checkbox" class="tickbox2" id="ckbox[38]"></td>
<td>Horse riding / pony trekking</td>
<td><input name="ckbox[39]" type="checkbox" class="tickbox2" id="ckbox[39]"></td>
<td>Music</td>
<td><input name="ckbox[40]" type="checkbox" class="tickbox2" id="ckbox[40]"></td>
<td>Paragliding / hang gliding</td>
</tr>
<tr>
<td><input name="ckbox[41]" type="checkbox" class="tickbox2" id="ckbox[41]"></td>
<td>Sailing</td>
<td><input name="ckbox[42]" type="checkbox" class="tickbox2" id="ckbox[42]"></td>
<td>Shopping / shopping centre</td>
<td><input name="ckbox[43]" type="checkbox" class="tickbox2" id="ckbox[43]"></td>
<td>Skiing</td>
<td><input name="ckbox[44]" type="checkbox" class="tickbox2" id="ckbox[44]"></td>
<td>Swimming</td>
<td><input name="ckbox[45]" type="checkbox" class="tickbox2" id="ckbox[45]"></td>
<td>Walking / pathways</td>
</tr>
<tr>
<td><input name="ckbox[46]" type="checkbox" class="tickbox2" id="ckbox[46]"></td>
<td>Water sports</td>
</tr>
<tr class="categorycell">
<td colspan="10">Events</td>
</tr>
<tr class="even">
<td><input name="ckbox[72]" type="checkbox" class="tickbox2" id="ckbox[72]"></td>
<td>Carnival</td>
<td><input name="ckbox[73]" type="checkbox" class="tickbox2" id="ckbox[73]"></td>
<td>Ceremony / pageantry</td>
<td><input name="ckbox[74]" type="checkbox" class="tickbox2" id="ckbox[74]"></td>
<td>Fair</td>
<td><input checked name="ckbox[76]" type="checkbox" class="tickbox2" id="ckbox[76]"></td>
<td>Festival</td>
</tr>
<tr>
<td><input checked name="ckbox[75]" type="checkbox" class="tickbox2" id="ckbox[75]"></td>
<td>Flag / heraldry</td>
<td><input name="ckbox[77]" type="checkbox" class="tickbox2" id="ckbox[77]"></td>
<td>Parade</td>
</tr>
<tr class="categorycell">
<td colspan="10">Flora and fauna</td>
</tr>
<tr class="even">
<td><input name="ckbox[85]" type="checkbox" class="tickbox2" id="ckbox[85]"></td>
<td>Amphibian</td>
<td><input name="ckbox[78]" type="checkbox" class="tickbox2" id="ckbox[78]"></td>
<td>Bird</td>
<td><input name="ckbox[79]" type="checkbox" class="tickbox2" id="ckbox[79]"></td>
<td>Fish</td>
</tr>
<tr>
<td><input name="ckbox[80]" type="checkbox" class="tickbox2" id="ckbox[80]"></td>
<td>Flower / plant</td>
<td><input name="ckbox[86]" type="checkbox" class="tickbox2" id="ckbox[86]">
</td><td>Fungus</td>
<td><input name="ckbox[81]" type="checkbox" class="tickbox2" id="ckbox[81]"></td>
<td>Insect</td>
<td><input name="ckbox[82]" type="checkbox" class="tickbox2" id="ckbox[82]"></td>
<td>Mammal</td>
<td><input name="ckbox[83]" type="checkbox" class="tickbox2" id="ckbox[83]"></td>
<td>Reptile</td>
</tr>
<tr>
<td><input name="ckbox[84]" type="checkbox" class="tickbox2" id="ckbox[84]"></td>
<td>Tree / shrub</td>
</tr>
<tr class="categorycell">
<td colspan="10">Physical features / landscapes</td>
</tr>
<tr class="even">
<td><input name="ckbox[47]" type="checkbox" class="tickbox2" id="ckbox[47]"></td>
<td>Aerial view</td>
<td><input name="ckbox[48]" type="checkbox" class="tickbox2" id="ckbox[48]"></td>
<td>Beach / bay / cove</td>
<td><input name="ckbox[49]" type="checkbox" class="tickbox2" id="ckbox[49]"></td>
<td>Causeway</td>
<td><input name="ckbox[50]" type="checkbox" class="tickbox2" id="ckbox[50]"></td>
<td>Cave</td>
</tr>
<tr>
<td><input name="ckbox[51]" type="checkbox" class="tickbox2" id="ckbox[51]"></td>
<td>Cityscape</td>
<td><input name="ckbox[52]" type="checkbox" class="tickbox2" id="ckbox[52]"></td>
<td>Cliff</td>
<td><input name="ckbox[53]" type="checkbox" class="tickbox2" id="ckbox[53]"></td>
<td>Coast</td>
<td><input name="ckbox[54]" type="checkbox" class="tickbox2" id="ckbox[54]"></td>
<td>Crag / rock / tor</td>
<td><input name="ckbox[55]" type="checkbox" class="tickbox2" id="ckbox[55]"></td>
<td>Dune</td>
</tr>
<tr>
<td><input name="ckbox[56]" type="checkbox" class="tickbox2" id="ckbox[56]"></td>
<td>Estuary / marsh</td>
<td><input name="ckbox[57]" type="checkbox" class="tickbox2" id="ckbox[57]"></td>
<td>Farmland</td>
<td><input name="ckbox[58]" type="checkbox" class="tickbox2" id="ckbox[58]"></td>
<td>Forest / trees</td>
<td><input name="ckbox[59]" type="checkbox" class="tickbox2" id="ckbox[59]"></td>
<td>Hill</td>
<td><input name="ckbox[60]" type="checkbox" class="tickbox2" id="ckbox[60]"></td>
<td>Island</td>
</tr>
<tr>
<td><input name="ckbox[61]" type="checkbox" class="tickbox2" id="ckbox[61]"></td>
<td>Lake / loch / tarn / reservoir</td>
<td><input name="ckbox[62]" type="checkbox" class="tickbox2" id="ckbox[62]"></td>
<td>Landscapes (general)</td>
<td><input name="ckbox[63]" type="checkbox" class="tickbox2" id="ckbox[63]"></td>
<td>Lava</td>
<td><input name="ckbox[64]" type="checkbox" class="tickbox2" id="ckbox[64]"></td>
<td>Limestone pavement</td>
<td><input name="ckbox[65]" type="checkbox" class="tickbox2" id="ckbox[65]"></td>
<td>Moor / heathland</td>
</tr>
<tr>
<td><input name="ckbox[66]" type="checkbox" class="tickbox2" id="ckbox[66]"></td>
<td>Mountain</td>
<td><input name="ckbox[67]" type="checkbox" class="tickbox2" id="ckbox[67]"></td>
<td>Peninsula / headland</td>
<td><input name="ckbox[68]" type="checkbox" class="tickbox2" id="ckbox[68]"></td>
<td>River</td>
<td><input name="ckbox[69]" type="checkbox" class="tickbox2" id="ckbox[69]"></td>
<td>Sea / waves</td>
<td><input name="ckbox[70]" type="checkbox" class="tickbox2" id="ckbox[70]"></td>
<td>Valley / gorge / glen</td>
</tr>
<tr>
<td><input name="ckbox[71]" type="checkbox" class="tickbox2" id="ckbox[71]"></td>
<td>Waterfall</td>
</tr>
...continued below...