Ya que no puedo poner spoilers, te dejo una lista de los archivos y el contenido que deben tener.
Crear la tabla y la Base de Datos
Código MySQL :
CREATE DATABASE IF NOT EXISTS `pruebas` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci */;
USE `pruebas`;
-- MySQL dump 10.13 Distrib 5.6.17, for Win64 (x86_64)
--
-- Host: localhost Database: pruebas
-- ------------------------------------------------------
-- Server version 5.6.17
--
-- Table structure for table `electronic_groups`
--
DROP TABLE IF EXISTS `electronic_groups`;
CREATE TABLE `electronic_groups` (
`id_electronic_groups` int(11) NOT NULL AUTO_INCREMENT,
`nombre_grupo` varchar(45) COLLATE utf8_spanish_ci DEFAULT NULL,
PRIMARY KEY (`id_electronic_groups`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
--
-- Dumping data for table `electronic_groups`
--
LOCK TABLES `electronic_groups` WRITE;
INSERT INTO `electronic_groups` VALUES (1,'Clazziquai'),(2,'M-flo'),(3,'Fantastic Plastic Machine'),(4,'House rulez'),(5,'Rip Slyme'),(6,'Shinichi Osawa');
UNLOCK TABLES;
--
-- Table structure for table `users`
--
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id_users` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(45) COLLATE utf8_spanish_ci DEFAULT NULL,
`electronic_groups_preference` varchar(45) COLLATE utf8_spanish_ci DEFAULT NULL,
PRIMARY KEY (`id_users`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
--
-- Dumping data for table `users`
--
LOCK TABLES `users` WRITE;
INSERT INTO `users` VALUES (1,'lalito','1,2,3'),(2,'gumaro','1,4,5');
UNLOCK TABLES;
preferencesForm.php
Se ocupa degenerar los primeros checkbox y enviar los datos para guardar.
Código PHP :
<?php
/**
* Created by PhpStorm.
* @author: Porfirio Chávez <[email protected]>
* @link http://www.elporfirio.com
* Date: 24/12/2014
* Time: 10:50 AM
*/
require_once("utilFunctions.php");
$conexion = connectDB();
$opcionesDisponibles = queryAll($conexion);
if($opcionesDisponibles){
$html = "";
foreach($opcionesDisponibles as $elemento){
$html .= '<label>
<input type="checkbox" name="preferencias[]" value="'.$elemento['id_electronic_groups'].'">
'.$elemento['nombre_grupo'].'
</label>
<br>';
}
}
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">
<head lang="en">
<meta charset="UTF-8">
<title>Guardado y recuperado de preferencias</title>
</head>
<body>
<form action="preferencesSave.php" method="post">
<fieldset>
<legend>Selecciona que te gustaría escuchar</legend>
<?php echo $html; ?>
</fieldset>
<label for="username">Nombre de Usuario:</label>
<input type='text' name="username" id="username">
<input type="submit" value="Guardar Preferencias">
</form>
</body>
</html>
utilFunctions.php
Tiene todas las lineas para conectarse a la base de datos y consultar.
Código PHP :
<?php
/**
* Created by PhpStorm.
* @author: Porfirio Chávez <[email protected]>
* @link http://www.elporfirio.com
* Date: 24/12/2014
* Time: 10:57 AM
*/
#Conectarse a la base de datos
function connectDB(){
#Datos para conexión
$domain = "localhost";
$database = "pruebas";
$user = "root";
$password = "";
try {
$dbConnection = new PDO(
'mysql:host=' . $domain . ';dbname=' . $database .';port=3306',
$user,
$password,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
return $dbConnection;
} catch (PDOException $ex){
echo "<strong>Error de Conexión: </strong>" . $ex->getMessage() . "<br>";
die();
}
}
#Consultar datos
function queryAll($connection){
try{
$query = 'SELECT * FROM electronic_groups';
$stmt = $connection->prepare($query);
if($stmt->execute()){
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
return false;
} catch (PDOException $ex){
echo "<strong>Error de ejecución: </strong>" . $ex->getMessage() . "<br>";
die();
}
}
function insertPreferences($connection, $user, $preferences){
try{
$query = 'INSERT INTO users (username, electronic_groups_preference)
VALUES (:username, :idsgroup)';
$stmt = $connection->prepare($query);
$stmt->bindParam(':username', $user);
$stmt->bindParam(':idsgroup', $preferences);
if($stmt->execute()){
return $connection->lastInsertId();
}
return false;
} catch (PDOException $ex){
echo "<strong>Error de ejecución: </strong>" . $ex->getMessage() . "<br>";
die();
}
}
function obtainPreferences($connection, $user){
try{
$query = 'SELECT electronic_groups_preference
FROM users
WHERE username = :username
LIMIT 1';
$stmt = $connection->prepare($query);
$stmt->bindParam(':username', $user);
if($stmt->execute()){
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
return false;
} catch (PDOException $ex){
echo "<strong>Error de ejecución: </strong>" . $ex->getMessage() . "<br>";
die();
}
}
preferencesSave.php
Página que guarda los datos del formulario
Código PHP :
<?php
/**
* Created by PhpStorm.
* User: Porfirio
* Date: 24/12/2014
* Time: 11:12 AM
*/
require_once("utilFunctions.php");
if(isset($_POST['preferencias'])){
$preferenciasUsuario = implode(",", $_POST['preferencias']);
$conexion = connectDB();
$iduser = insertPreferences($conexion,$_POST['username'], $preferenciasUsuario);
if($iduser !== false){
echo "preferencias guardadas";
}
}
detailUser.php
Está página muestra los datos elegidos dependiendo el usuario
Para ver como funciona debes decirle mediante la variable $_GET["username"] el nombre del usuario como lo tienes en la Base de datos
por ejemplo
Código :
http://localhost/detailUser.php?username=lalito
Código PHP :
<?php
/**
* Created by PhpStorm.
* @author: Porfirio Chávez <[email protected]>
* @link http://www.elporfirio.com
* Date: 24/12/2014
* Time: 11:30 AM
*/
require_once("utilFunctions.php");
$conexion = connectDB();
$opcionesDisponibles = queryAll($conexion);
$opcionesUsuario = obtainPreferences($conexion, $_GET['username']);
$opcionesElegidas = explode(",",$opcionesUsuario[0]['electronic_groups_preference']);
if($opcionesDisponibles){
$html = "";
foreach($opcionesDisponibles as $elemento){
$selected = "";
if(in_array($elemento['id_electronic_groups'], $opcionesElegidas)){
$selected .= 'checked';
}
$html .= '<label>
<input type="checkbox" name="preferencias[]" value="'.$elemento['id_electronic_groups'].'" '. $selected .'>
'.$elemento['nombre_grupo'].'
</label>
<br>';
}
}
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">
<head lang="en">
<meta charset="UTF-8">
<title>Guardado y recuperado de preferencias</title>
</head>
<body>
<form action="#" method="post">
<fieldset>
<legend>El usuario eligio:</legend>
<?php echo $html; ?>
</fieldset>
<label for="username">Nombre de Usuario:</label>
<input type='text' name="username" id="username" value="<?php echo $_GET['username']; ?>" disabled>
</form>
</body>
</html>
Suerte en un post de mi blog, explicare como funciona el código
Saludos.