Hace ya bastante hablamos de unas encuestas con PHP que hice.

Demo

Pero ha llovido mucho desde entonces, he programado mucho con PHP, y me ha encandilado la programación orientada a objetos. Así que me puse a “reinventar” las encuestas desde el principio, desde cero, con una implementación propia del MVC, y ahora podéis ver el resultado final.
Encuesta de ejemplo
Una encuesta de ejemplo

Características

  • Panel de administración (al que por supuesto no podéis acceder en la demo, pero podéis usarlo si os descargáis el código).
  • Urls bonitas: http://emiliocobos.net/demos/polls/view/justin-bieber/.
  • Increíblemente rápidas: Una sola conexión con la base de datos, usando PDO.
  • Seguro a más no poder. Me he currado los archivos de la base de datos para que una inyección de MySQL sea imposible.
  • Editable: Si no sabéis PHP, podéis editar el HTML en la carpeta views intuitivamente. Si lo sabéis, podéis hacer maravillas.
He subido todo el código a GitHub, así como el framework, con instrucciones (aunque no sé si serán suficientes). La estructura de las tablas ha cambiado mucho (tenemos slug para las urls bonitas, etc). Creo que es mucho más completo, y que el framework me servirá de base para muchos proyectos. Podéis verlo aquí:

Demo Descarga

Vuestra opinión

Sinceramente: ¿Qué opinais?. Me gustaría conocer vuestra opinión sobre el resultado, y si sabéis php, sobre el código usado.

68 pensamientos en “Las encuestas con PHP, reescritas por completo

  1. Bitacoras.com
  2. Creando un sistema de encuestas desde cero con PHP[2]: La conexión | Emilio Cobos-CMC
  3. Creando un sistema de encuestas con PHP y MySQL[1]: El proyecto | Emilio Cobos-CMC
  4. Imagen de AritzaAritza el dijo:

    Buenas tardes Emilio,

    Lo primero de todo que sepas que eres un genio, aunque eso seguro que ya lo intuyes ;) y lo segundo es que el código, la implementación, es genial. No así tanto las explicaciones para tontos como yo debido a que:

    1.- Por un lado no se como crear las tablas porque el fichero “tables.sql” está vacio.
    2.- Después dices que hay que ir a Admin/password.php, pero no se como se hace porque el php me da un error (“Fatal error: Class ‘Param’ not found in /var/www/es/views/admin/password.php on line 3”), además no existe “/admin/password.php” sino “polls/views/admin/password.php”

    ¿Me echas una manita? ¡gracias tío!

    Aritza

  5. Imagen de jorgejorge el dijo:

    Hola, gracias por corregir lo de las funciones estaticas, pero ya tengo un nuevo error, primero la base de datos no importa solo importa la primera tabla. Viendo esto utilice la bd de datos del post anterio y esta si funciona pero al entrar al aplicativo sale este error

    ERROR 404
    Creado con cariño por Emilio Cobos

    seguro es una bobada mia, ojala me puedas ayudar…Gracias

    • Imagen de Emilio Cobos Álvarez el dijo:

      Qué va, culpa mía otra vez :( Actualicé tables.sql para que usara claves foráneas, y no me di cuenta de que el valor de answer_id en la tabla de los votos podía ser 0. Ahora sí que sí funciona, que lo he instalado localmente desde cero ;)

  6. Imagen de anonimoanonimo el dijo:

    muy bonito el dieño pero no puedo accesar a el panel de administracion poara agregar, para empesar la carpeta admin no existe, solo existe en la carpeta views, depsues esa carpeta tiene deny from all asi que no puedo accesar, borrando el deny from all en el .htacces y accesando a index.php de esta ruta: http://dominio/views/admin/index.php me da este error
    Fatal error: Class ‘Param’ not found in /ehom/midominio/public_html/views/admin/index.php on line 3.
    Ese archivo en la linea 3 tiene esto: session_start();
    No encuentro el error haber si puedes dar un poco mas de instrucciones de como configurar y accesar a esto te lo agradeceriamos muchisimo, de antemano gracias

  7. Imagen de CesarCesar el dijo:

    el archivo .htaccess lo tengo que crear, me sale un error cuando lo ejecuto en mi wamp me redirecciona mal me manda aqui ¨http://localhostc/wamp/www/polls/@/¨ en fin lo corregí cambiando a FALSE esta parte en el archivo config.php:

    [...
    'url' => array(
    			'pretty' => FALSE,     //lo cambie
    			'rewrite' => TRUE
    		),
    ...]

    Pero sigo sin accesar al panel administrativo ayuda

    • Imagen de Emilio Cobos Álvarez el dijo:

      Gracias por avisar, el .htaccess está incluído ahora.

      El problema está al detectar la url en windows (en un sistema linux DOCUMENT_ROOT devuelve algo como /var/www/, y en windows devuelve C:\wamp\www\polls\).

      Trataré de buscar un ordenador windows y actualizarlo lo antes posible para que funcione.

      • Imagen de CesarCesar el dijo:

        Vientos! pero sigo sin acceder al panel administrativo me sale el error: 403 Forbidden
        Crees que sea por mi servidor, estoy usando wamp localmente
        incluso agregue una linea al .htaccess

        Options +Indexes

        Pero no consegui nada cual crees que sea mi error?

      • Imagen de Emilio Cobos Álvarez el dijo:

        A qué directorio estás tratando de acceder? Si no me equivoco deberías de ir a http://localhost/polls/admin/.

        Ayer mismo lo probé con xampp y funcionaba bien.

        El forbidden aparece porque el directorio existe (que no debería ser el caso, si lo has creado bórralo).

  8. Imagen de Juan GutierrezJuan Gutierrez el dijo:

    Cuando intento cambiar la Contraseña me sale este error…
    Fatal error: Uncaught exception ‘Exception’ with message ‘Bcrypt requires openssl PHP extension’ in C:\xampp\htdocs\indicadores\encuesta\includes\Hash.php:16 Stack trace: #0 C:\xampp\htdocs\indicadores\encuesta\views\admin\password.php(7): Hash::make(‘123’) #1 C:\xampp\htdocs\indicadores\encuesta\includes\View.php(73): include(‘C:\xampp\htdocs…’) #2 C:\xampp\htdocs\indicadores\encuesta\app\main.php(120): View->render(true) #3 C:\xampp\htdocs\indicadores\encuesta\index.php(20): require(‘C:\xampp\htdocs…’) #4 {main} thrown in C:\xampp\htdocs\indicadores\encuesta\includes\Hash.php on line 16

    Como puedo solverntarlo?

    • Imagen de Emilio Cobos Álvarez el dijo:

      Hombre, depende de cuál sea el objetivo. No era mi intención hacer cuestionarios, pero se podría hacer no muy difícilmente (simplemente otra tabla que agrupe a las preguntas). No es mala idea, aunque ahora mismo no tengo tiempo para implementarla. No obstante me lo guardo en la lista de pendientes ;)

  9. Imagen de XimenaXimena el dijo:

    Hola, muchas gracias por el gran aporte!
    Es posible hay una encuesta pero que tenga más de una pregunta y que esas preguntas tengan varias opciones de respuesta?
    Gracias y saludos!

  10. Imagen de markitosmarkitos el dijo:

    Parse error: syntax error, unexpected T_FUNCTION, expecting ‘)’ in C:\AppServ\www\encuesta\app\config.php on line 31

    me sale este error a que crees que se deba ???

  11. Imagen de Emilio TenorioEmilio Tenorio el dijo:

    Hola

    Cuando pongo polls-master/admin/password me da una página en blanco con el texto: No input file specified.

    ¿Qué estoy haciendo mal?

    Gracias
    Saludos
    Emilio Tenorio

  12. Imagen de GerardoGerardo el dijo:

    Hola.. realmente me parece una muy excelente utilidad.. pero desgraciadamente estoy teniendo problemas con la instalacion… a ver si desasnas a este BURRO..!!! Estoy probando con un WAMP corriendo sobre Windows 7.. PHP 5.3.8

    1- Genere las tablas correctamentes y como usuario de BD les di root (como para que no sean permisos los problemas)
    2- Edite el config.php del raiz con dichos datos:
    ‘database’ => array(
    ‘driver’ => ‘mysql’,
    ‘host’ => ‘localhost’,
    ‘user’ => ‘root’,
    ‘password’ => ”,
    ‘dbname’ => ‘polls’
    ),

    3. Al cargar la pag. principal… me redirige..(con error) a: http://localhostd/wamp22a/www/padel/pruebas/encuestas/polls-master%20(1)/@/

    4- Si trato de Acceder a: http://localhost/padel/pruebas/encuestas/polls-master%20(1)/admin/password/
    me devuelve el error:
    Not Found

    The requested URL /wamp22a/www/padel/pruebas/encuestas/polls-master (1)/index.php/admin/password/ was not found on this server.

    — Podras/podran darme una mano?

    MUCHISIMAS GRACIAS

    • Imagen de Emilio Cobos Álvarez el dijo:

      Es un error con las urls absolutas de windows…

      Tiene solución y es sacar la url correctamente (modificando las líneas 13-17 del archivo app/main.php).

      Yo no puedo testear desde windows (no lo tengo instalado, ni tengo intención), así que si alguien puede (o tú mismo) corregir ese error, estaría encantado de aplicar los cambios.

  13. Imagen de ArnaudArnaud el dijo:

    Hola, tengo una pregunta, me gustaría que no saldrán los resultados de voto directamente validar el voto pero una sola pagina “Gracias por su voto” y poder volver a los resultados con otra url.
    Eso es possible ?
    Saludos y muchas gracias por ese tutorial !

  14. Imagen de Salvador GalindoSalvador Galindo el dijo:

    Hola buenos días, he visto tu ejemplo de generación de encuestas, y esta muy padre el diseño, sin embargo tengo el siguiente problema:
    Después de que hago mi voto me sale el error siguiente:
    ERROR 404
    De igual forma si deseo ver los votos el error es el mismo
    ERROR 404
    ¿Que creés que sea? o que hice mal.

    Saludos espero puedas apoyarme

    • Imagen de Emilio Cobos Álvarez el dijo:

      Lo más probable es o:
      a) que estés en windows en algo que no sea xampp y haya fallado al calcular las rutas.
      b) que haya algún otro problema al generar las url o que el .htaccess esté fallando por alguna razón…

      Qué url te pone en el navegador cuando te salta el 404?

  15. Imagen de Mario MauricioMario Mauricio el dijo:

    Hola me aparece error404 cuando cambio le saco el pass de la bd, ahora estoy ejecutando a nivel localhost con xampp cual puede ser el error? o donde tengo que modificar para verlo. Necesito ayuda, saludos.

  16. Imagen de Emilio HernandezEmilio Hernandez el dijo:

    Hola Emilio. Muy bueno el trabajo de las encuestas. llevo tiempo buscando una ayuda asi. Sabrias decirme, si dentro de estas votaciones podrias guardar en la base de datos la hora en la que se ha realizado la votacion?

    Muchas gracias

    • Imagen de Emilio Cobos Álvarez el dijo:

      Sí, claro.

      Si no me equivoco (hablo de memoria) no hay una tabla específica para los datos de las respuestas. Se podría modificar la tabla del registro de los votos para que almacenara la respuesta y un timestamp automático sin demasiada complicación :P

  17. Imagen de MarioMario el dijo:

    Hola emilio, he instalado las encuestas en mi servidor, cuando ejecuto admin/password la respuesta es “No input file specified.”, a que crees que puede deberse?, está instalado en una carpeta dentro del servidor no en el root, pero aun asi debería funcionar no? gracias

      • Imagen de Emilio Cobos Álvarez el dijo:

        Hola Mario y ET.

        No faltan archivos, no hace falta que exista el directorio admin, con el .htaccess la ruta va al index.php y se muestra lo que está programado.

        Sobre el “no input file specified”: Sí, aunque no esté en el root debería funcionar, pero probablemente tu servidor no tenga mod_rewrite habilitado, o tenga deshabilitados los .htaccess

        Un saludo :P

      • Imagen de EmilioEmilio el dijo:

        Hola

        He comprobado y tengo mod_rewrite y los .htacces habilitados.
        Mi PHP es 5.5

        He creado las bbdd y he modificado el config.php

        He copiado los archivos en el root de miservidor (www.edanza.tv)

        Lo que me sale es error 404 si pongo http://www.edanza.tv/index.php y me sale tu web si pongo http://www.edanza.tv

        Y ya no tengo ni idea de qué hacer.

        ¿De verdad le funciona esto a alguien? Si lo hace, ¿me puede pasar el link para que lo vea?

        Saludos
        Emilio

  18. Imagen de Rafael el dijo:

    como puedo acceder al administrador para poner las preguntas que requiero utilizar, saludos, solo logre entrar a la app pero no puedo crear las preguntas, o más bien no enconre como

    • Imagen de Emilio TenorioEmilio Tenorio el dijo:

      Hola

      Yo tenía el mismo problema.

      Miproblema era que en el servidor tenía phpFASTcgi. Cuando lo cambié a PHP Apache todo va como la seda.

      Espero que esto te ayude. :-)

  19. Imagen de CarlosCarlos el dijo:

    Disculpame soy nuevo en esto

    Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES)’ in C:\xampp\htdocs\polls\app\DB.php:46 Stack trace: #0 C:\xampp\htdocs\polls\app\DB.php(46): PDO->__construct(‘mysql:host=loca…’, ‘root’, ‘root’) #1 C:\xampp\htdocs\polls\app\config.php(17): DB::connect() #2 C:\xampp\htdocs\polls\app\config.php(43): Config::init() #3 C:\xampp\htdocs\polls\app\main.php(21): Config::get(‘url.pretty’) #4 C:\xampp\htdocs\polls\index.php(20): require(‘C:\\xampp\\htdocs…’) #5 {main} thrown in C:\xampp\htdocs\polls\app\DB.php on line 46

      • Imagen de CarlosCarlos el dijo:

        Lo siento Emilio pero ya tengo mi usuario root y sin contraseña y cree otro con mi nombre y mi contraseña y aun persiste el error, algo ando haciendo mal, no se si algun dato extra te serviria como ayuda para poder guiarme en mi error.

        Lo siento en verdad por la novatada, tengo poco en esto web, disculpa tanta molestia. :S

      • Imagen de Emilio Cobos Álvarez el dijo:

        Asegúrate de que tu usuario tiene acceso a la BBDD que crees… Puedes intentar darme algún tipo de dato más acerca del sistema que usas (linux/windows + XAMPP/mac con…) para que te pueda ayudar :)

  20. Imagen de CarlosCarlos el dijo:

    Claro Emilio estoy utilizando

    Windows 10
    XAMMP y segun yo mis mi usuario tiene acceso a la bd
    Esta es la config

    private static $config = array(
    ‘driver’ => ‘mysql’,
    ‘host’ => ‘localhost’,
    ‘dbname’ => ‘poll’,
    ‘user’ => ‘root’,
    ‘password’ => ”
    );

    y en my sql tengo acceso como root a todo no se si deba poner una contraseña a root o algo

  21. Imagen de Beto el dijo:

    Hola que tal Emilio, hice todo al pie de la letra y cuando quiero acceder simplemente no muestra nada en blanco igual tus paginas con los demos me las muestra en blanco no se que pase

    • Imagen de Emilio Cobos Álvarez el dijo:

      Hola Beto,

      Sí, migré el servidor hace tiempo así que es normal que la demo no funcione (no está la base de datos).

      Comprueba que estás usando la configuración correcta de la base de datos. Puedes usar ini_set y amigos para reportar todos los errores que pasan, con lo que debería de salirte algo más que no fuera una pantalla en blanco.

      Si el mensaje de error que saliera no fuera obvio o similar, puedes pasármelo y le puedo echar un ojo :)

      Un saludo:
      Emilio

  22. Imagen de MiguelMiguel el dijo:

    Estimado, buenas tardes, estaba provando el código pero me muestra el siguiente error

    Fatal error: Uncaught exception ‘Exception’ with message ‘Bcrypt requires openssl PHP extension’ in C:\AppServ\www\polls-master\includes\Hash.php:16 Stack trace: #0 C:\AppServ\www\polls-master\views\admin\password.php(7): Hash::make(‘123’) #1 C:\AppServ\www\polls-master\includes\View.php(73): include(‘C:\\AppServ\\www\\…’) #2 C:\AppServ\www\polls-master\app\main.php(120): View->render(true) #3 C:\AppServ\www\polls-master\index.php(20): require(‘C:\\AppServ\\www\\…’) #4 {main} thrown in C:\AppServ\www\polls-master\includes\Hash.php on line 16

    como ya habías indicado a otro usuario active la extensión openssl, dentro del archivo php.ini correspondiente a la ruta C:\AppServ\php5\php.ini:

    ;extension=php_openssl.dll

    Eliminé ; y guardé sin embargo me continua el error, sabes a que se debe? de antemano gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Puedes usar las siguientes etiquetas y atributos HTML:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre data-language=""> <ul> <ol> <li>
Para poner código usa <pre data-language="[lenguaje]"><code>[código]</code></pre>, y no olvides escapar el HTMl.