Este artículo es antiguo. Deberías de echar un vistazo a la versión nueva (reescrita por completo).
En otra entrada ya os expliqué cómo organizar la base de datos para un sistema de encuestas con MySQL y PHP. Ahora vamos a ver los dos archivos básicos en PHP desde los que interactuaremos con la base de datos.
El primero será connect.php
, que se encargará de conectar con la base de datos, y contendrá las funciones principales para obtener los datos de las encuestas.
Para ello usaremos una PDO para prevenir inyecciones de MySQL y aumentar el rendimiento del script. Éste archivo seguramente habrá que modificarlo (añadir cosas, etc), pero voy a ir explicando paso a paso cómo hacerlo.
Paso 1: La PDO
Lo primero que haremos será conectar con la base de datos. Para ello usaremos una PDO. Necesitaremos un host, un usuario, una contraseña y una base de datos.
Además, haremos una consulta (SET NAMES 'utf8'
) para evitar problemas con tildes, y eñes:
/*
* Aquí deberéis llenar con vuestros datos
*/
$host = 'localhost';
$database = 'polls';
$usuario = 'root';
$contrasena = 'root';
$pdo = new PDO("mysql:host=$host;dbname=$database", $usuario, $contrasena);
// Evitar problemas con caracteres
$pdo->query("SET NAMES 'utf8'");
Paso 2: Crear las tablas
La primera vez que se llame a este archivo crearemos las tablas, pero también definiremos una variable para evitar intentar crearlas cada vez:
// Crear las tablas y definir que están creadas
if( ! defined("POLLS_CREATED") ) {
/*
* poll_id => id de la encuesta
* poll_question => la pregunta de la encuesta
* various_answers => Si se permiten varias respuestas (1) o no (0)
* total_votes => votos totales
*/
$pdo->query("CREATE TABLE IF NOT EXISTS `polls` (`poll_id` BIGINT NOT NULL AUTO_INCREMENT,
`poll_question` VARCHAR(200) NOT NULL,
`various_answers` INT NOT NULL,
`total_votes` BIGINT NOT NULL DEFAULT 0,
PRIMARY KEY ( `poll_id`) )");
/*
* answer_id => id de la respuesta (general, para identificarla de cualquier otra)
* answer_text => el texto de la respuesta
* answer_votes => las veces que se ha votado esa pregunta
* poll_id => la id de la encuesta a la que pertenece esa respuesta
* poll_answer_id => la id de esa respuesta *con respecto a la encuesta*
*/
$pdo->query("CREATE TABLE IF NOT EXISTS `polls_answers` (`answer_id` BIGINT NOT NULL AUTO_INCREMENT,
`answer_text` VARCHAR(200) NOT NULL,
`answer_votes` BIGINT NOT NULL DEFAULT 0,
`poll_id` BIGINT NOT NULL,
`poll_answer_id` INT NOT NULL,
PRIMARY KEY (`answer_id`))");
/*
* ip => ip del votante
* poll_id => id de la encuesta votada
*/
$pdo->query("CREATE TABLE IF NOT EXISTS `polls_ip` (`ip` VARCHAR(15) NOT NULL,
`poll_id` BIGINT NOT NULL)");
// Definimos que ya se han creado las tablas para evitar luego 3 consultas cada vez
$este_archivo = file_get_contents("connect.php");
file_put_contents("connect.php", "<?php define('POLLS_CREATED', true); ?>" . $este_archivo);
}
Con esto tendríamos una conexión segura con la base de datos para poder alterar las tablas (veremos cómo pronto ;)) votando, mostrando encuestas, etc.