Claro jurena. Se puede tener por ejemplo la tabla opciones:
CREATE TABLE opciones(
op_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(20) NOT NULL DEFAULT '')ENGINE = InnoDB;
Y la tabla opciones_usuario:
CREATE TABLE opciones_usuario(
user_id INT NOT NULL,
op_id INT NOT NULL,
valor VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY(user_id, op_id),
CONSTRAINT FOREIGN KEY user_id REFERENCES usuarios(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FOREIGN KEY op_id REFERENCES opciones(op_id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE = InnoDB;
Se puede hacer el formulario de manera dinámica. Un ejemplo con HTML y PHP embebido:
<?php
//Despues de conectar con la BD, validar al usuario, mostrar las cabeceras...
if (($res = mysql_query('SELECT * FROM opciones'))){
if (mysql_num_rows($res) > 0){
?>
<form method="post" action="respuesta.php">
<ul style="list-style-type:none;">
<?php
while (($row = mysql_fetch_row($res))){
?>
<li><input type="checkbox" name="opcion[]" value="<php echo $row[0];?>" /><?php echo $row[1];?></li>
<?php
}
?>
<li><input type="submit" value="Responder" /></li>
</ul>
</form>
<?php
mysql_free_result($res);
}
else
echo 'No hay opciones';
}
else
echo 'Error al consultar las opciones';
//Resto de la página
?>
Y en el action del form se podría tener:
<?php
//Despues de conectar con la BD, validar al usuario y lo que sea
//Se comprueba que se haya recibido el formulario como se esperaba
if (!empty($_POST['opcion']) && is_array($_POST['opcion'])){
//Función para aplicar un mysql_real_escape_string sobre las opciones
function escapar_opciones(&$value, $key){
$value = mysql_real_escape_string($value);
}
//Aplicamos el escape a las opciones recibidas
array_walk($_POST['opcion'], 'escapar_opciones');
$qry = "INSERT INTO opciones_usuario VALUES($_SESSION[user_id], '";
$qry .= implode("', 'true'), ($_SESSION[user_id], '", $_POST['opcion']);
$qry .= "', 'true')";
//Ahora en $qry tenemos:
//INSERT ... VALUES (user_id, 'op_id', 'true'), (user_id, 'op_id', 'true')...
if (mysql_query($qry)){
echo 'Opciones insertadas OK';
}
else
echo 'Error en el INSERT de opciones';
}
//Resto de código
?>
Saludos.
Edit: edito para arreglar el INSERT :P
Restless Souls Online: se viene un gran MMORPG