Bueno, en la parte cliente te puedo ayudar, y en servidor al recoger los datos puedes usar la propuesta de DADU.
Suponiendo que tienes una tabla con x filas y n columnas yá creada y de id="tablita"
<SCRIPT LANGUAGE="JavaScript">
var valores = new Array()
function asigna(){
for(m=0;m<document.getElementById('tablita').getEl ementsByTagName('td').length;m++){
document.getElementsByTagName('td')[m].id='T'+m
document.getElementsByTagName('td')[m].style.backgroundColor = 'white'
document.getElementsByTagName('td')[m].onclick=function(){
colorea(this.id)
}
valores[m] = false
}
}
function colorea(cual){
celda = document.getElementById(cual).style.backgroundColo r
celda == 'white' ? document.getElementById(cual).style.backgroundColo r = 'gray' : document.getElementById(cual).style.backgroundColo r = 'white'
valores[cual.substr(1)] = celda == 'white' ? true : false
document.forms[0].Valores.value = valores
}
</script>
En body le pones.....
<body onload="asigna()">
Luego pones tu tabla con las celdas que te dé la gana. No hace falta que le des id's a las celdas, ni onclicks ni nada, sólo dale por id a tu tabla "tablita"
<table width="100%" border="1" id="tablita">
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
Finalmente el formulario desde el cual se enviarán los datos para guardarlos en la base de datos
<form action="loquesea.asp" method="post">
<input name="Valores" type="hidden" value="">
</form>
Cuando se envíe, a la página que los recoja le pides que te guarde el valor de Valores en alguna variable
<%
Valores = split(request.form("Valores"),",")
%>
Y está listo para enviarlo a la BD referenciando cada valor por su posición dentro del array
pepe = Valores(posicion)
Los valores se guardan como true o false; true indica que la celda fué seleccionada y false indica que no lo fue
a ver si te sirve....