Actualizado el 25-09-2020: se han cambiado todas las funciones mysql (deprecadas) por mysqli, tambien se actualizo un poco el CSS y se arreglo la URL del .zip al código
En este tutorial aprenderas a hacer un sistema de encuestas funcional, práctico y expandible, usaremos PHP y MySQL con tablas relacionales.
Trabajaremos con 4 ficheros PHP, uno para la conexión a la base de datos (conexion.php), uno para listar las encuestas (index.php), otro para crear nuevas encuestas (agregar.php), el que mostrara los resultados de las encuestas (resultado.php) y por ultimo estilos.css que se encargara de darle algo de estetica pero tambien de una parte muy esencial que es la de mostrar la barra de votaciones.
Si en ciertas partes el código te resulta muy complejo, lee los comentarios.
0. estilos.css
.barra{ background: #ff3019; background: linear-gradient(to bottom, #ff3019 0%,#cf0404 100%); clear: both; height: 15px; color: white; font-weight: bold; text-align: right; padding: 6px; border-radius: 4px; max-width: 356px; min-width: 20px; } /* A partir de aqui es solo cosmetico, lo puedes borrar */ *{ margin: 0; padding: 0; font-family: sans-serif; font-size: 14px; } body{ background: #464646; } a{ text-decoration: none; color: red; } .fr{ float: right; } .fl, .votar{ float: left; } .cf{ clear: both; } .wrap{ padding: 25px; margin: 0 auto; width: 385px; background: #F3F3F3; border-radius: 4px; margin-top: 70px; border: 1px solid #E0E0E0; } h1{ margin-bottom: 20px; font-size: 21px; border-bottom: 1px solid #DDD; padding-bottom: 15px; text-align: center; } form > div{ margin-bottom: 20px; } form .titulo{ margin-right: 20px; } form label{ display: block; } form input[type='text'], select{ border: 1px solid #E0E0E0; padding: 6px; resize: none; } form input[type="submit"]{ padding: 8px 16px; background: gray; border: 0; display: block; font-weight: bold; color: white; border-radius: 6px; } form input[type="submit"]:hover{ background: #505050; } ul.votacion{ margin-bottom: 25px; list-style: none; } .votacion li a{ padding: 8px; background: #FCFCFC; border-radius: 5px; margin-bottom: 5px; color: gray; font-weight: bold; font-size: 16px; display: block; } .votacion li a:hover{ color: black; background: white; } .votacion li span{ margin-left: 10px; } .votacion .fl{ margin-bottom: 5px; } .volver{ display: block; padding-top: 15px; clear: both; } .votar{ float: left; } .resultado{ float: left; margin-left: 10px; margin-top: 7px; color: black; }
1. SQL
Creamos una tala con el nombre encuestas con los siguientes campos: id, titulo y fecha. Aqui se almacenara los datos las encuestas como el titulo y la fecha que fue creada la encuestas, utilizaremos otra tabla para que almacene las opciones de las encuestas.
CREATE TABLE IF NOT EXISTS `encuestas` ( `id` int(11) NOT NULL AUTO_INCREMENT, `titulo` varchar(50) NOT NULL, `fecha` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Ahora insertarmos unos datos de ejemplo en la tabla:
INSERT INTO `encuestas` (`id`, `titulo`, `fecha`) VALUES (NULL , 'Que os parecen los tutoriales de PHP?', '2012-12-15');
Creamos otra tabla con el nombre opciones con los siguientes campos: id, id_encuesta, nombre y valor.
El campo de id_encuesta tendrá relación con el campo id de la tabla encuestas, en nombre ira el nombre y valor guardara el numero de votos que tendra la opcion respectiva.
CREATE TABLE IF NOT EXISTS `opciones` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_encuesta` int(11) NOT NULL, `nombre` varchar(50) NOT NULL, `valor` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Insertamos datos a la tabla opciones:
INSERT INTO `opciones` (`id` ,`id_encuesta` ,`nombre` ,`valor`) VALUES (NULL , '1', 'Muy Bueno', '14') , (NULL , '1', 'Bueno', '6') , (NULL , '1', 'Malo', '2');
Fijaos que he definido id_encuesta con 1 y es porque quiero que estas opciones esten relacionadas con la encuestas que creamos anteriormente que llevaba el id de 1.
Si no entendisteis bien como vamos a trabajar las relaciones de las tablas, esta grafica te aclarará las dudas:
02. conexion.php
El tipico fichero PHP para guardar los datos de la conexión, nada del otro mundo:
<?php // datos para la conexion a mysql define('DB_SERVER','localhost'); define('DB_NAME','tursos'); define('DB_USER','root'); define('DB_PASS','root'); $conex = mysqli_connect(DB_SERVER,DB_USER,DB_PASS); mysqli_select_db($conex, DB_NAME);
03. index.php
Lo primero sera incluir al fichero de conexión, luego haremos una consulta a la base datos para que nos muestren los títulos de la tabla ‘encuestas’ los mismos que mostraremos como enlaces hacia las encuestas, estos enlaces llevaran el id de la encuestas en cuestión mediante GET (encuestas.php?id=x).
<?php require('conexion.php'); $sql = "SELECT * FROM encuestas ORDER BY id DESC"; $req = mysqli_query($conex, $sql); ?> <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>Sistema de encuestas</title> <link rel="stylesheet" href="estilos.css"> </head> <body> <div class="wrap"> <h1>Encuestas</h1> <ul class="votacion index"> <?php while($result = mysqli_fetch_object($req)){ echo '<li><a href="encuesta.php?id='.$result->id.'">'.$result->titulo.'</a></li>'; } ?> </ul> <a href="agregar.php">+ Agregar nueva encuesta</a> </div> </body> </html>
Nos debería ir quedando así:
04. encuesta.php
Linea 04: Si no existe la variable de URL se regresara a la pagina principal.
Linea 11: Si le dan a votar (el form de votacion ira abajo) y si han seleccionado una opcion se va a actualizar los datos del campo ‘valor’ de la tabla ‘opciones’:
<?php require('conexion.php'); $id = $_GET['id']; if(!isset($_GET['id'])){ header('location: index.php'); } if(isset($_POST['votar'])) { if(isset($_POST['valor'])){ $opciones = $_POST['valor']; $mod = mysqli_query($conex, "SELECT * FROM opciones WHERE id = ".$opciones); while($result = mysqli_fetch_object($mod)){ $valor = $result->valor + 1; // obtenemos el valor de 'valor' y le añadimos 1 unidad mysqli_query($conex,"UPDATE opciones SET valor = '".$valor."' WHERE id = ".$opciones); // luego ejecutamos el query SQL } header('location: resultado.php?id='.$id); // Por ultimo lo redireccionamos a la encuestas mostrando los resultados. } } ?>
Ahora la parte HTML donde ira el form de votacion, aqui vamos a generar una consulta a la base datos para que se muestren los datos de la tabla ‘encuestas’ con relación a la tabla ‘opciones’ como radiobuttons, partes de un form:
Linea 15: En esta linea haremos un query con INNER JOIN en el cual trabajaremos con las tablas ‘encuestas’ y ‘opciones’ donde a sera encuestas y b es opciones, aqui buscaremos filas donde a.id sea igual a b.encuesta_id, el valor de a.id que se comparara sera definido por $id, este valor lo obtuvimos al principio en el primer pedazo de código mediante GET.
Linea 18 y 27: Con el resultado del query hacemos un while donde mostraremos el titulo de la encuesta y luego en la linea 48 se muestran cada una de las opciones como input[type=’radio’], $aux es una variable auxiliar que nos ayuda a detener el bucle para que ciertos elementos se muestren solo una vez.
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>Sistema de encuestas</title> <link rel="stylesheet" href="estilos.css"> </head> <body> <div class="wrap"> <form action="" method="post"> <?php $aux = 0; $sql = "SELECT a.titulo as titulo, a.fecha as fecha, b.id as id, b.nombre as nombre, b.valor as valor FROM encuestas a INNER JOIN opciones b ON a.id = b.id_encuesta WHERE a.id = ".$id; $req = mysqli_query($conex, $sql); while($result = mysqli_fetch_object($req)){ if($aux == 0){ echo '<h1>'.$result->titulo.'</h1>'; echo '<ul class="votacion">'; $aux = 1; } echo '<li><label><input name="valor" type="radio" value="'.$result->id.'"><span>'.$result->nombre.'</span></label></li>'; } echo '</ul>'; if(!isset($_POST['valor'])){ echo "<div class='error'>Selecciona una opcion.</div>"; } echo '<input name="votar" type="submit" value="Votar" class="votar">'; echo '<a href="resultado.php?id='.$id.'" class="resultado">Ver Resultados</a>'; echo '<a href="index.php" class="volver">← Volver</a>'; ?> </form> </div> </body> </html>
Si todo salió bien, encuesta.php deberia verse asi:
05. resultado.php
Esta archivo es mas simple, aqui mostraremos los resultados de las encuestas de acuerdo al id obtenido por GET (resultado.php?id=x):
Linea 11: Para obtener el valor usamos SUM() para que nos resulte la suma total del valor en un solo numero:
<?php require('conexion.php'); if(!isset($_GET['id'])){ header('location: index.php'); } $suma = 0; $id = $_GET['id']; $mod = mysqli_query($conex,"SELECT SUM(valor) as valor FROM opciones WHERE id_encuesta = ".$id); while($result = mysqli_fetch_object($mod)){ $suma = $result->valor; } ?>
Luego mostramos los resultados con el mismo query con INNER JOIN que ya hemos usado anteriormente, esto nos mostrara cada opción en forma de div (.barra) al que le definimos el ancho en porcentaje usando una operación matemática:
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>Sistema de Encuestas</title> <link rel="stylesheet" href="estilos.css"> </head> <body> <div class="wrap"> <form action="" method="post"> <?php $aux = 0; $sql = "SELECT a.titulo as titulo, a.fecha as fecha, b.id as id, b.nombre as nombre, b.valor as valor FROM encuestas a INNER JOIN opciones b ON a.id = b.id_encuesta WHERE a.id = ".$id; $req = mysqli_query($conex, $sql); while($result = mysqli_fetch_object($req)){ if($aux == 0){ echo "<h1>".$result->titulo."</h1>"; echo "<ul class='votacion'>"; $aux = 1; } echo '<li><div class="fl">'.$result->nombre.'</div><div class="fr">Votos: '.$result->valor.'</div>'; if($suma == 0){ echo '<div class="barra cero" style="width:0%;"></div></li>'; }else{ echo '<div class="barra" style="width:'.($result->valor*100/$suma).'%;">'.round($result->valor*100/$suma).'%</div></li>'; } } echo '</ul>'; if(isset($aux)){ echo '<span class="fr">Total: '.$suma.'</span>'; echo '<a href="encuesta.php?id='.$id.'"" class="volver">← Volver</a>'; } ?> </ul> </form> </div> </body> </html>
Si llegaste hasta aqui resultado.php debería lucir similar a esto:
06. agregar.php
En este fichero es probablemente el mas complejo de todos, manejaremos el proceso PHP arriba y el formulario abajo, por ello para entender esta parte es necesario ver el código completo (leer comentarios):
<?php require('conexion.php'); $cont = 0; $titulo = ''; if(isset($_POST['titulo'])){ $titulo = trim($_POST['titulo']); } // definimos $titulo para evitar errores, y guardamos su valor por el ingresado. if(isset($_POST['enviar'])){ if($titulo != ""){ $num = $_POST['opciones']; // este valor lo vamos a obtener de lo que el usuario ingrese como numero de opciones al crear la encuesta $fecha = date('Y-m-d'); $sql= "INSERT INTO `encuestas` (`id` ,`titulo` ,`fecha`) VALUES (NULL , '$titulo', '$fecha');"; // si han ingresado si quiera un titulo insertamos esta encuesta en la tabla mysqli_query($conex, $sql); $sql = "SELECT MAX(id) as id FROM encuestas"; // ahora obtenemos el id de la ultima fila, // la que acabamos de ingresar, // esto lo hacemos para poder asociarle las opciones $req = mysqli_query($conex, $sql); while($result = mysqli_fetch_object($req)){ $id_encuesta = $result->id; // con el resultado obtenido hacemos un bucle y definimos los resultados como id_encuesta. } $sql = "INSERT INTO `opciones` (`id` ,`id_encuesta` ,`nombre` ,`valor`) VALUES "; // En esta parte estamos armando un query SQL dinamico el cual sera modificado de acuerdo a lo que el usuario ingrese en el formulario. for($i=1;$i<=$num;$i++){ $opcnativa = trim($_POST['opc'.$i]); // obtenemos el nombre de cada opcion indivudalmente. if($opcnativa != ""){ $sql .= "(NULL , '$id_encuesta', '$opcnativa', '0')"; // el id de la opcion ira null para que se ponga automaticamente, en id_encuesta pues ira el id de la encuesta que acabamos de crear, en 'nombre' ira el nombre de la opcion y valor ira 0, puesto que es una nueva opcion sin votos, esto se repetira con todas las opciones que el usuario haya definido. $cont++; } if($i == $num){ $sql .= ";"; // si es que se llega al final, termina la consulta }else{ $sql .= ", "; // sino se pone una , y se continua. } } if($cont < 2){ // si el usuario no definio ninguna opcion, se elimina la encuesta recien creada, esto es poco probable que suceda ya que la definicion de opciones la haremos con un select, y aqui se seleccionara el valor de 2 por defecto. $sql = "DELETE FROM `encuestas` WHERE id = ".$id_encuesta; echo "<div class='error'>Tiene que llevar por lo menos 2 opciones.</div>"; }else{ header('location: index.php'); // por ultimo si todo salio bien, redireccionamos al index para que el usuario vea su encuesta recien creada. } mysqli_query($conex, $sql); // y ejecutamos el query } } ?> <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>Sistema de Encuestas</title> <link rel="stylesheet" href="estilos.css"> </head> <body> <div class="wrap"> <h1>Agregar Encuesta</h1> <form action="" method="post"> <div class="fl titulo"> <label>Titulo:</label> <input name="titulo" type="text" value="<?php echo $titulo; ?>" size="26"> </div> <?php // esto es simplemente un formulario, pero aqui hacemos una condicion, identificamos si se ha definido un numero de opciones, si es si hacemos un bucle, si es no mostramos el select para definir un numero de opciones, como es obvio por defecto se mostrara el bucle: if(isset($_POST['opc'])){ $num = $_POST['opciones']; // guardamos el valor del numero de opciones for($i=1;$i<=$num;$i++){ // hacemos el bucle mostrando los campos respectivos. ?> <div class="cf"> <label>Opcion <?php echo $i; ?>: </label> <input name="opc<?php echo $i; ?>" type="text" size="43"> </div> <?php } // aqui termina el bucle ?> <div class="cf"> <input name="enviar" type="submit" value="Enviar"> <input name="opciones" type="hidden" value="<?php echo $num; // le pasamos el valor de num al proceso del formulario mediante un campo oculto. ?>"> <input name="cont" type="hidden" value="<?php echo cont; ?>"> </div> <?php }else{ // sino se ha definido nro de opciones: ?> <div class="fl"> <label>Nº de opciones:</label> <select name="opciones"> <?php for($i=2;$i<=20;$i++){ // esto es un loop simple, solo para ahorrarnos trabajo, este select tendra de 2 a 20 opciones, si deseas cambiarlo lo puedes hacer aqui. ?> <option value="<?php echo $i; ?>"><?php echo $i; ?></option> <?php } ?> </select> </div> <div class="cf"> <input name="opc" type="submit" value="Continuar"> </div> <?php } // Sino se han definido opciones, que en vez de salir el boton de Enviar, salga uno que sea Continuar. ?> <a href="index.php" class="volver">← Volver</a> </form> </div> </body> </html>
Por ultimo, agregar.php en sus dos fases:
Posibles mejoras
Dentro de las posibles mejoras que se le podemos hacer al sistema, esta la creación de nuevas encuestas (agregar.php) detrás de un login, otra adición seria la de impedir votaciones consecutivas bloqueando la IP o por cookies.
Si no entendiste alguna parte o te sale algún error, házmela saber en los comentarios y recuerda que puedes bajarte el código fuente desde este enlace.
Excelente!!! Muchas gracias por sus aportes. Para los neofitos en PHP, como yo, son de mucha ayuda.
Hola tiene alguien la demo o codigo o algo parecido para ver el funcionamiento?¿
saludos;)
Esta bueno, hace tiempo que no sacaban un tutorial, saludos
Y como seria la consulta si quería que mostrar un listado de encuestas para responder en el momento
Seria bueno que continuaras el post con las mejoras que mencionas al final.
Gracias
Hola muy bueno el tutorial la verdad me gusto mucho saludos y esperando más tutoríales
Hola, muy bueno el ejemplo y tutorial. Yo estoy queriendo hacer algo así, pero me falta algo que no estoy seguro como resolver.
Que pasa si la encuesta se compone de varias preguntas, algunas a desarrollar, otras del estilo que se muestran en el tutorial, y otras que acepten más de una respuesta (tipo checkbox) ? ¿cómo resuelvo esto desde la base de datos, ya que en respuestas se guarda un solo valor, como guardo las respuestas a desarrollar (input type=text) y las múltiples (input type=checkbox)?
Se agradece la ayuda !
guardas el id de pregunta con el id de respuestas y los sumas luego
Gracoas Edwin, pero creo que eso no responde a lo que estoy planteando, probablemente no fui claro. Yo lo resolví usando 2 tablas para las respuestas, unas, para las preguntas que aceptan valoración (de 1 a 4, por ejemplo) donde guardo en el campo valor en número elegido para esa preguna, y otra tabla para las demás respuestas, a desarrollar, de más de un valor, o de un solo valor.
La idea es hacer algo similar a los google forms, y me estoy aproximando…
Saludos y gracias responder.
solo tenias que cambiar la logica para usar los checkbox, pienso yo que estas usando mas tablas innecesarias, bueno lo importante es que te cumpla la aplicación pero tambien debes tener un codigo mas limpio y claro.
saludos
Gracias Edwin, es muy probable que tengas razón, es la primera vez que lo pienso y realizo. En cuanto pueda voy a ver si te puedo pasar el código, y si sos tan amable y tenes la posibilidad de mirarlo, se aceptan cualquier consejo y/o comentarios, y sino, y sirve para agregar a lo que ya realizaron, MEJOR.
Saludos.
meda este error como solucionarlo
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in E:\xampp\htdocs\encuestas\index.php on line 18
estas conectando mal tu base de datos
revisa bien tu conexion a la base de datos
Hola, solo quería hacer una consulta, porque hace como 1 mes que espcse con esto del php, y lo que nunca me funciona es la conexión, no se que es lo que hago mal, eh visto casi todos los tutoriales pero la verdad solo me sirvió 1 que fue de de la lista de queseares de Josue Ochoa, la verdad siempre me quedo con las ganas. Y quería ver si me podían dar una solución a mi mala conexión, no se como explicarles asique si me responden a mi correo estaría bueno para que yo les pudiese contar
mandame un mensaje con tu problema en mi pagina personal y te respondo por correo
Buenas noches, gracias por este excelente tutorial como algunos comentan seria muy bueno si le añades las mejoras la del login y si es posible una opción de guardar el avance para cada usuario
saludos,
si ya pronto estaremos subiendo un tutorial sobre eso
Muy Buen Tutorial. Me sirve de Mucho.. !!!!
Quisiera saber si pueden hacer un tutorial de como crear un sisitema de busqueda algo parecido a los que tienes aqui en esta pagina !!! Grasi Por todos los tutos !!
Gracias Daniel, si puede ser que hagamos un tutorial sobre eso
E Tenido Problemas al Adactarlos a mi pagina web.. El Tutorial de Sistema de REgistor y Sistema de Login Y tambien el de las encuestas.. . los e Adaptado a mi pagina web.. Pero Me Sale eerores como:
Sep muestra en mi pagina web(abierta por chrome) Todo el codigo php… nesesito que me ayuden… Es que quiero urgente todos esos sisitemas en mi web.. !!! alguien que me ayuda vale.. !!
no te entiendo, explicate mejor
Tengo una duda… Busco hacer una votación de una lista de 10! pero necesito votar por «tres» máximo. En el ejemplo que tu nos ofreces, el valor sólo pasa una vez y se registra esa misma solamente! Cómo puedo hacer que me detecte esos valores y los ingrese a mis gráficos y a mi db! Saludos!! y Gracias!
Tendrias que usar checkbox y limitar la seleccion por JavaScript.
Me sale un error, y soy nuevo en esto, espero que me ayudes el error:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in/encuestas.php on line 18
Ayudame porfavor
Tienes un error de conexión, seguro esas poniendo mal los datos de mysql
hola a mi me salio lo mismo..me puedes ayudar si ya lo averiguaste que era??.. un millón de gracias!!
Encontré un error en donde escribes los datos para la conexión, ami no me anda por este motivo.
al iniciar la parte de conexion pones el <php pero sin el ?
Saludos ahora me anda joya !
ah muchas gracias por la observación.
Tengo un problema con el diseño, cuando lo coloco en mi web queda tapado con el header, no se porque pero cuando le doy distancia del borde mi header si mueve con el, como lo arreglo ?
seguro estas usando los mismos estilos para el header y el borde, trata de cambiar los nombres de estilos a tu header.
mmm… Eso se refiere a que debo cambiar los id y class ?porque yo solo uso id y el estilo de este cuadro son con class
Haz algo mas facil, borra el CSS del tutorial y haz el tuyo propio para que no haya conflictos.
Boy a tratar de hacerlo de nuevo porque intente eso y se me pega así todo junto. Cualquier cosa comento.
Con que version de mysql lo hiciste porque yo lo probe con mysql-front y me sale esto
Con la misma version de MySQL, mysql-front es solo un software, la diferencia está en que en este tutorial se crean las tablas por medio de SQL directo, el error que te sale es por una disparidad entre la estructura que tienes y la del ejemplo.
como lo soluciona tambien tengo ese detalle
Parse error: syntax error, unexpected ‘$sql’ (T_VARIABLE) in C:wampwwwvotosindex.php on line 3
Ya no funciona el link puedes arreglarlo o alguien que me lo pase a mi correo the_wape@hotmail.com
tengo una duda esto me ayudo mucho a realizar un examen pero como lo puedo convertir en aleatorio que meta la encuentas y que me regrese siertas preguntas ??
Hola lo primero felicitarte por el tutorial, espectacular, ahora podías darme un poco de información de como se podrían hacer esas mejoras que propones?
Muchas gracias¡¡¡¡
Hacer que no se pueda votar varias veces seguidas, guardando un cookie en la computadora del usuario o guardando su IP.
Ya si eso es lo que quiero lo se, pero no se como hacerlo.
por favor yo tqmbien quiero las mejoras
se puede hacer que almacene las preguntas y que despues me las imprima aleatorias ????
muchas gracias esta facil
para los que tiene problema con SQL
aqui esta hecho archive sql
http://www.stereoamigos.com/encuestas.sql
Magistral:
En la ciudad donde vivo no hay universidades, ni forma de poder formarse «oficialmente» en informática. Es decir que sobrevivo de los Tutoriales, Google, y personas como vos.
No tengo palabras para agradecer, estaba loco buscando esto!!! Muchísimas gracias hermano, realmente.!!!!!!! – Eternamente agradecido de gente dedicada a compartir conocimientos.!
Tengo una Question!
Para ordenar DESC por «valor» – Nose como puedo insertar mi linea sin sobre poner la llamada $sql a la tabla encuesta en «result.php». Por favor, gracias.!!
Haz intentado cambiar order por id?
«SELECT * FROM encuestas ORDER BY valor DESC»;
Si, es exactamente la línea que quiero utilizar, el problema es que se sobre pone con:
» $sql = «SELECT a.titulo as titulo, a.fecha as fecha, b.id as id, b.nombre as nombre, b.valor as valor FROM encuestas a INNER JOIN opciones b ON a.id = b.id_encuesta WHERE a.id = «.$id;
$req = @mysql_query($sql); »
En Resultado.php, linea 30 – O tal vez estoy reflexionando fuera del recipiente. Muchas gracias.
La consulta que hago es
«SELECT * FROM opciones ORDER BY valor DESC»;
Para que las votaciones se acomoden por la más votada a la menos… Pero no se como acoplarlo en «Resultado.php – linea 30» – He intentado pero se sobrepone… con la consulta $sql=*, antes mencionada… Por favor, desde ya muchísimas gracias.
Ya esta solucionado mi hermano, muchas gracias.!!!!!!
Gracias a ti por tu comentario Ric.
Aqui un humilde aporte:
Una posible mejora «Ordenar las barras con los porcentajes de modo que quedase del más elegido, al menos…»
En «resultado.php» editamos la linea 30″
$sql = «SELECT a.titulo as titulo, a.fecha as fecha, b.id as id, b.nombre as nombre, b.valor as valor FROM encuestas a INNER JOIN opciones b ON a.id = b.id_encuesta WHERE a.id = «.$id .» ORDER BY valor DESC «; //No olvidar el espacio entre ‘Comilla doble’ y ‘ORDER’
Saludos.!!!
Hola Edwind, Excelente aportacion!!
Quisiera saber si existe la posibilidad de que los resultados sean mostrados en un solo formulario con todas las encuestas registradas?
Agradecería mucho tu ayuda!!
Saludos!
como puedo hacer un test con php y q tenga reporte, ayuda por favor necesito para mi trabajo en el Instituto..mi pueden escribir a coronadomv@gmail.com se les agradecere cualquier ayuda…..
este codigo es muy bueno .. pero lo he probado pero el resultado de la encuestas no me sale …….me podias colab orarme alguien porfa ??
Y que error te sale mi amigo…
Thanks Josue, this is probably the best article I’ve seen on how to do this.
GROSOOOOOOO MUY BUENO
Amigo felicitaciones por tu pagina esta excelente, pero tengo una duda: ¿como haría para mostrar cada pregunta con sus respectiva respuesta abajo, en una misma pagina? saludos y espero tu respuesta
Edwind, como hago para agrega la encuesta un index.php es decir que se vaya ejecutando en un div por ejemplo.
Prueba hacerlo con include: http://www.php.net/manual/en/function.include.php
Como podriar animar las barras?
Con transitions: http://css-tricks.com/almanac/properties/t/transition/
Quiero reemplazar los botones de opción con casillas de verificación con el fin de tener preguntas con múltiples respuestas. Necesito ayuda para hacer eso.
Buenas, antes que nada disculpen porque recién empiezo con esto, asi que no tengo muchos conocimientos. Mi pregunta es, ¿los resultados de la encuesta se actualizan en tiempo real mientras los tengo en pantalla? Es decir que si los puedo ir viendo mientras se cargan desde otras computadoras. Gracias.
Exelente tutorial!
Gracias
Simplemente esta genial,
Espero que no te moleste que te cite en mi blog:
http://www.lmcdevloper.es/?p=284
Gracias por el magnifico aporte,
Gracias Luis Miguel por tu comentario, me alegra que te haya servido.
hola amigo si podrias ayudarme con el codigo
he tenido problema con la base sobre la linea 18 x favor
Tengo una pregunta, me gustaría usar esta encuesta, solo que necesito registrar el nombre de la persona que estaría haciendo la encuesta, como podría hacer esto ?
en este ejemplo no, solo se agrega las preguntas y las opciones.
alguna idea de como solucionar esto por favor
Hola revisa que la conexion y la estructura de tablas este correcta
como puedo solucionar esto he visto los comentarios no encuentro la solucion?
Hola Angel revisa que la conexion y la estructura de tablas este correcta
como elimino las preguntas con sus respectivas opciones
gracias
Hola Carlos, puedes usar estas funciones del MySQL
http://dev.mysql.com/doc/refman/4.1/en/delete.html
investiga como usar las variables GET que se usa en las URL para que lo coloques con un hipervinculo en cada opción.
por favor las mejoras para no votar tantas veces
Gracias Edwind, justo estaba haciendo algo parecido y este aporte me sirve mucho para comparar y mejorar algunas cosas. Solo tengo una pregunta con respecto a la base de datos.
Puedo hacer de la tabla OPCIONES varias tablas? como yo lo había pensado es así: partiendo de que yo se que la mayoría de las encuestas serán de 2 opciones (SI o NO), y otras encuestas de no muchas opciones entonces hago
Encuesta = ( idEncuesta, titulo )
2OPCIONES = ( idEncuesta, opcion1, valor1, opcion2, valor2 )
3OPCIONES = ( idEncuesta, opcion1, valor1, opcion2, valor2, opcion3, valor3 )
4OPCIONES = ( idEcnuesta, opcion1, valor1, opcion2, valor2, opcion3, valor3, opcion4, valor4 )
{para mas de 4 opciones}
OPCIONES = ( idEncuesta, opcion, valor )
que me recomiendan?
Los links ya no cuentan con contenido demo, ni de descarga :S, alguien podria resubirlo o pasarlo?
tengo un problema con los estilos alguien me ayuda
no funciona los estilos
Quien podria ayudarme en esto por favor
Muchas Gracias por el tutorial, me ha servido Mucho. Alguien ha logrado la mejora para que se vote solo una vez, les agradecería el aporte.
The requested URL /chamilo/agregar.php was not found on this server.
Me sale este error al moemnto que le doy agregar encuesta en wamp y en xampp tambien me salia este mismo error por que??? si alguien me podria explicar
hola buen dia no puedo descargar el archivo
que puedo hacer
Vas copiando y pegando para generar cada PHP
Parse error: syntax error, unexpected ‘\’ (T_NS_SEPARATOR), expecting identifier (T_STRING) in /Applications/XAMPP/xamppfiles/htdocs/encuesta001/index.php on line 15
hola buenas tardes amigo , muy bueno este programa , pero tengo problemas en la conexion sera que me podrias echar una ayudita?
me sale asi : Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\Encuesta\conexion.php:7 Stack trace: #0 C:\xampp\htdocs\Encuesta\index.php(2): require() #1 {main} thrown in C:\xampp\htdocs\Encuesta\conexion.php on line 7
He bajado o copiado los ejemplos espero revisarlos con calmay elegir según mi necesidad el que mejor se adapte. Saludos desde Venezuela.
Excelente tutorial para encuestas; me sirvió a hoy con unos pocos cambios respecto a la conexión de la DB.
Muchísimas gracias por el apoyo.
hola, me podrian ayudar, estoy empezando con este tutorial y me aparece este mensaje;
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\wamp64\www\encuestas\conexion.php on line 7
al modificar el codigo y colocando mysqli_connect(), aparecen estos;
Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in C:\wamp64\www\encuestas\conexion.php on line 8
Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, null given in C:\wamp64\www\encuestas\index.php on line 18
hola Alfredo, el post ha sido actualizado, dele una nueva revisada!
Hola estoy probando el formulario y me da este error.
Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, null given in /www/est-aduaneroflores.com.ar/htdocs/DiarioMercado/index.php on line 18
podrías ayudarme…gracias….
Hola nuevamente…revise la programación y ahora me da este error.
Warning: mysqli_connect(): (HY000/2002): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) in /www/est-aduaneroflores.com.ar/htdocs/DiarioMercado/conexion.php on line 7
Warning: mysqli_select_db() expects parameter 1 to be mysqli, boolean given in /www/est-aduaneroflores.com.ar/htdocs/DiarioMercado/conexion.php on line 8
al usuario que comento antes que yo le tira el mismo error….gracias…por la ayuda…
Excelente, muchas gracias.
Excelente aporte