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.