Este artículo es antiguo. Deberías de echar un vistazo a la versión nueva (reescrita por completo).

De acuerdo, podría decir que la base está terminada. Ahora por fin puedo hacer una pequeña ronda sobre cómo crear unas encuestas personalizadas en un servidor con PHP y MySQL. Este tutorial fue a petición de Andrés Ardila, y tengo que reconocer que ha costado lo suyo ponerlo a funcionar.

Por ahora la base está, y ahora os explicaré la teoría y os dejaré un pequeño ejemplo funcionando. Como siempre podéis esperar a que acabe para descargarlo todo.

Lo que falta

  • Panel de administración: Por ahora no se pueden editar las encuestas (así que hay que ser cuidadoso al crearlas), y hay que andar subiendo y bajando el archivo para crearlas (ya que no hay contraseñas). Tengo que escoger un encriptado (md5, sha1, etc), y crear una tabla para usuarios, o símplemente editando vuestro archivo PHP.
  • Listado de encuestas (por ahora sólo se pueden mostrar de una en una).
  • AJAX: La interfaz por ahora es muy básica (sólo HTML + PHP), pero tengo pensado introducir algo de AJAX para facilitar el voto, la vista de los resultados, etc.
  • CSS: Por ahora solo he usado una pizca de CSS (la de las barras de los resultados, y algo de estilos generales). Queda mucho que mejorar en ese aspecto.

No es poco lo que hay que mejorar ;).

Organización de las tablas

Tendremos tres tablas en nuestra base de datos, que crearemos automáticamente.

Siento poner los nombres en inglés, pero es la costumbre (las funciones de todos los lenguajes están en inglés, y se te pega).

  • polls (la tabla principal): Tendremos poll_id (la id), poll_question (la pregunta), various_answers (si soporta varias respuestas simultáneas), y finalmente total_votes (la cuenta de los votos totales).
  • polls_answers (donde tendremos las respuestas), con: answer_id (por ahora inútil, ya que accederemos a ellas gracias a otro campo, anuque nunca viene mal crear una referencia global), answer_text (el texto de la respuesta), answer_votes (los votos a esa respuesta), poll_id (la id de la encuesta a la que pertenece), y poll_answer_id (una id de la respuesta relativa a la pregunta)
  • polls_ip (aquí almacenaremos la IP de los votantes y la id de la encuesta votada). Sólo dos campos: ip y poll_id

Ejemplo

Aquí tenéis el ejemplo de encuesta. (Sí, la pregunta no es nada original, y las dos respuestas de «fatal» las hice yo de prueba antes de consuguir evitar el doble voto ;))