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.
Juan Gmo dice
Excelente!!! Muchas gracias por sus aportes. Para los neofitos en PHP, como yo, son de mucha ayuda.
FelipeCachinero dice
Hola tiene alguien la demo o codigo o algo parecido para ver el funcionamiento?¿
saludos;)
luis dice
Esta bueno, hace tiempo que no sacaban un tutorial, saludos
marco dice
Y como seria la consulta si quería que mostrar un listado de encuestas para responder en el momento
Adolfo Diaz dice
Seria bueno que continuaras el post con las mejoras que mencionas al final.
Gracias
Giobanny Santamaria dice
Hola muy bueno el tutorial la verdad me gusto mucho saludos y esperando más tutoríales
Camilo dice
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 !
Edwind Pineda dice
guardas el id de pregunta con el id de respuestas y los sumas luego
Camilo dice
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.
Edwind Pineda dice
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
Camilo dice
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.
MIlen dice
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
Edwind Pineda dice
estas conectando mal tu base de datos
Yair Ademar Salazar dice
revisa bien tu conexion a la base de datos
Fernando dice
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
Edwind Pineda dice
mandame un mensaje con tu problema en mi pagina personal y te respondo por correo
José Moreno dice
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,
Edwind Pineda dice
si ya pronto estaremos subiendo un tutorial sobre eso
Daniel dice
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 !!
Edwind Pineda dice
Gracias Daniel, si puede ser que hagamos un tutorial sobre eso
Daniel dice
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.. !!
Edwind Pineda dice
no te entiendo, explicate mejor
Layla Magaly dice
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!
josueochoa dice
Tendrias que usar checkbox y limitar la seleccion por JavaScript.
Fernando dice
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
Edwind Pineda dice
Tienes un error de conexión, seguro esas poniendo mal los datos de mysql
begoña lufin dice
hola a mi me salio lo mismo..me puedes ayudar si ya lo averiguaste que era??.. un millón de gracias!!
Fernando dice
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 !
Edwind Pineda dice
ah muchas gracias por la observación.
Fernando dice
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 ?
Edwind Pineda dice
seguro estas usando los mismos estilos para el header y el borde, trata de cambiar los nombres de estilos a tu header.
Fernando dice
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
josueochoa dice
Haz algo mas facil, borra el CSS del tutorial y haz el tuyo propio para que no haya conflictos.
Fernando dice
Boy a tratar de hacerlo de nuevo porque intente eso y se me pega así todo junto. Cualquier cosa comento.
Fabián José dice
Con que version de mysql lo hiciste porque yo lo probe con mysql-front y me sale esto
josueochoa dice
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.
Guest dice
como lo soluciona tambien tengo ese detalle
Tommy DR dice
Parse error: syntax error, unexpected ‘$sql’ (T_VARIABLE) in C:wampwwwvotosindex.php on line 3
JUNIOR HACKER dice
Ya no funciona el link puedes arreglarlo o alguien que me lo pase a mi correo the_wape@hotmail.com
Milton Gilmour Led Zeppeliano dice
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 ??
Ramón dice
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¡¡¡¡
josueochoa dice
Hacer que no se pueda votar varias veces seguidas, guardando un cookie en la computadora del usuario o guardando su IP.
Ramón dice
Ya si eso es lo que quiero lo se, pero no se como hacerlo.
Erick lescano gonzales dice
por favor yo tqmbien quiero las mejoras
Milton Gilmour Led Zeppeliano dice
se puede hacer que almacene las preguntas y que despues me las imprima aleatorias ????
melvin flores dice
muchas gracias esta facil
para los que tiene problema con SQL
aqui esta hecho archive sql
http://www.stereoamigos.com/encuestas.sql
Ric Leal dice
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.!
Ric Leal dice
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.!!
josueochoa dice
Haz intentado cambiar order por id?
«SELECT * FROM encuestas ORDER BY valor DESC»;
Ric Leal dice
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.
Ric Leal dice
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.
Ric Leal dice
Ya esta solucionado mi hermano, muchas gracias.!!!!!!
josueochoa dice
Gracias a ti por tu comentario Ric.
Ric Leal dice
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.!!!
Liss dice
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!
Vidal Coronado M. dice
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…..
brayan dice
este codigo es muy bueno .. pero lo he probado pero el resultado de la encuestas no me sale …….me podias colab orarme alguien porfa ??
Ric Leal dice
Y que error te sale mi amigo…
Tim Rowley dice
Thanks Josue, this is probably the best article I’ve seen on how to do this.
CRISTIAN DAMIAN CANTERO dice
GROSOOOOOOO MUY BUENO
Otniel Gonzalez dice
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
Mono dice
Edwind, como hago para agrega la encuesta un index.php es decir que se vaya ejecutando en un div por ejemplo.
josueochoa dice
Prueba hacerlo con include: http://www.php.net/manual/en/function.include.php
Manuel Carmona dice
Como podriar animar las barras?
josueochoa dice
Con transitions: http://css-tricks.com/almanac/properties/t/transition/
Jean-Benoit Kauffman dice
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.
Hessed dice
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.
Diego dice
Exelente tutorial!
Edwind Pineda dice
Gracias
Luis Miguel Devloper dice
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,
Josue Ochoa dice
Gracias Luis Miguel por tu comentario, me alegra que te haya servido.
M Angell Vegaa dice
hola amigo si podrias ayudarme con el codigo
he tenido problema con la base sobre la linea 18 x favor
zack Rdz dice
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 ?
Edwind Pineda dice
en este ejemplo no, solo se agrega las preguntas y las opciones.
Guest dice
alguna idea de como solucionar esto por favor
Edwind Pineda dice
Hola revisa que la conexion y la estructura de tablas este correcta
M Angell Vegaa dice
como puedo solucionar esto he visto los comentarios no encuentro la solucion?
Edwind Pineda dice
Hola Angel revisa que la conexion y la estructura de tablas este correcta
carlos dice
como elimino las preguntas con sus respectivas opciones
gracias
Edwind Pineda dice
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.
Erick lescano gonzales dice
por favor las mejoras para no votar tantas veces
Sebastian dice
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?
Allan dice
Los links ya no cuentan con contenido demo, ni de descarga :S, alguien podria resubirlo o pasarlo?
Carlos Vélez dice
tengo un problema con los estilos alguien me ayuda
Carlos Vélez dice
no funciona los estilos
Guest dice
Quien podria ayudarme en esto por favor
Nemetrix dice
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.
pedro dice
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
paula dice
hola buen dia no puedo descargar el archivo
que puedo hacer
Henry dice
Vas copiando y pegando para generar cada PHP
claudio dice
Parse error: syntax error, unexpected ‘\’ (T_NS_SEPARATOR), expecting identifier (T_STRING) in /Applications/XAMPP/xamppfiles/htdocs/encuesta001/index.php on line 15
jesus dice
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
Enrique Ojeda dice
He bajado o copiado los ejemplos espero revisarlos con calmay elegir según mi necesidad el que mejor se adapte. Saludos desde Venezuela.
Henry dice
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.
alfredo dice
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
Josue Ochoa dice
hola Alfredo, el post ha sido actualizado, dele una nueva revisada!
osvaldo dice
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….
osvaldo dice
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…
Luis dice
Excelente, muchas gracias.
Jose dice
Excelente aporte