27.Nov.2007
Publicado por MijT en PHP y MySQL | 1417 Lecturas | 5 comentarios
He hecho este script basándome en uno que vi en PHP-Hispano, la diferencia con aquel script es que aquí he cambiado algunas cosas como por ejemplo, permitir que el administrador del site pueda añadir las opciones que se desee(el script original sólo permite 4 por encuesta), y también he modificado el script para que se pueda hacer restricciones de IP y el usuario pueda votar una sola vez sin necesidad de estar registrado(el original sólo permite votar a usuarios registrados).
Bueno, ahora vamos a la acción, lo primero que tenemos que hacer es crear las tablas en las que guardaremos los datos(Título de la encuesta, Opciones de las encuestas y la IP de los votantes), comov erán son en total 3 tablas, pues bien, si nuestro Hosting dispone de phpMyadmin, ingresamos en él con nuestro usuario y contraseña y nos vamos a la parte de SQL para empezar a crear nuestras tablas, que son las siguientes:
Una vez creadas nuestras tablas en MySQL, pasamos a crear los scripts de nuestro sistema de encuestas.
Lo primero será crear el archivo con el que nos conectaremos a MySQL, lo llamaremos acceso_DB.php
Nuestro siguiente archivo será crear el script que con el que crearemos encuestas con sus respectivas opciones, a este archivo lo llamamos addencuesta.php
A este archivo lo llamaremos encuestas.php, y será el que nos muestre la encuesta para votar y los resultados de la misma si ya se ha votado:
Para finalizar, el archivo que guardará los votos y la IP del votante en la BD, lo llamaremos votarencuesta.php
Con todo ello ya tendremos listo nuestro sistema de encuestas, ahora nos quedaría hacer un include() a nuestro archivo encuestas.php en cualquier zona de nuestra web, foro o blog para empezar a utilizarla.
El sistema es sencillo, pueden agregársele más cosas, por ejemplo un poco de AJAX para que los votos se hagan sin necesidad de recargar toda la página en la que esté incluida la encuesta, y demás cosillas que ustedes pueden integrarle. Espero que les pueda servir de utilidad.
Bueno, ahora vamos a la acción, lo primero que tenemos que hacer es crear las tablas en las que guardaremos los datos(Título de la encuesta, Opciones de las encuestas y la IP de los votantes), comov erán son en total 3 tablas, pues bien, si nuestro Hosting dispone de phpMyadmin, ingresamos en él con nuestro usuario y contraseña y nos vamos a la parte de SQL para empezar a crear nuestras tablas, que son las siguientes:
# Esta tabla contendrá los títulos de la encuesta
CREATE TABLE `encuestas` (
`id_enc` int(5) NOT NULL auto_increment,
`pregunta` varchar(250) NOT NULL default '',
PRIMARY KEY (`id_enc`)
);
# Esta tabla contendrá las opciones de cada encuesta creada
CREATE TABLE `encuestas_opt` (
`id_opt` int(10) NOT NULL auto_increment,
`opciones` varchar(100) NOT NULL default '',
`num_votos` int(10) NOT NULL default '0',
`id_enc` int(6) NOT NULL default '0',
PRIMARY KEY (`id_opt`)
);
# Esta tabla contendrá la IP de los votantes
CREATE TABLE `encuestas_ip` (
`id_ip` int(10) NOT NULL auto_increment,
`ip_voto` varchar(15) NOT NULL default '',
PRIMARY KEY (`id_ip`)
)
Una vez creadas nuestras tablas en MySQL, pasamos a crear los scripts de nuestro sistema de encuestas.
Lo primero será crear el archivo con el que nos conectaremos a MySQL, lo llamaremos acceso_DB.php
<?php
$dbhost = "localhost"; //Host del mysql
$dbuser = "tu_usuario_de_mysql"; //Usuario del mysql
$dbpass = "la_clave"; //Password del mysql
$db = "base_de_datos"; //db donde se creará la tabla users
//conectamos y seleccionamos db
mysql_connect("$dbhost","$dbuser","$dbpass");
mysql_select_db("$db");
?>
Nuestro siguiente archivo será crear el script que con el que crearemos encuestas con sus respectivas opciones, a este archivo lo llamamos addencuesta.php
<?php
include('acceso_DB.php'); // Este archivo contendrá nuestros datos de conexión a MySQL
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Encuestas</title>
<meta name="distribution" content="global" />
<meta name="robots" content="all" />
<style type="text/css">
body {
font-family: 'Trebuchet MS', Verdana, Arial, Helvetica, sans-serif; /* Tahoma,Verdana, sans-serif*/
Font-size: 10pt;
background: #fff;
padding: 0;
margin: 20px;
}
a.link {
color: #0066cc;
text-decoration: none;
}
a.link:hover {
text-decoration: underline;
}
.file {
display: block;
}
label {
display: block;
font-weight: bold;
}
span a {
margin-left: 1em;
}
</style>
<!-- Este javascirpt nos permitirá tener la opción de agregar las opciones que deseemos agregar a cada encuesta -->
<script type="text/javascript">
var numero = 0;
// Funciones comunes
c = function (tag) { // Crea un elemento
return document.createElement(tag);
}
d = function (id) { // Retorna un elemento en base al id
return document.getElementById(id);
}
e = function (evt) { // Retorna el evento
return (!evt) ? event : evt;
}
f = function (evt) { // Retorna el objeto que genera el evento
return evt.srcElement ? evt.srcElement : evt.target;
}
addField = function () {
container = d('files');
span = c('SPAN');
span.className = 'file';
span.id = 'file' + (++numero);
field = c('INPUT');
field.name = 'opciones[]';
field.type = 'text';
a = c('A');
a.name = span.id;
a.href = '#';
a.onclick = removeField;
a.innerHTML = 'Quitar';
span.appendChild(field);
span.appendChild(a);
container.appendChild(span);
}
removeField = function (evt) {
lnk = f(e(evt));
span = d(lnk.name);
span.parentNode.removeChild(span);
}
</script>
</head>
<body>
<?php
if(isset($_POST['enviar'])) {
if($_POST['pregunta'] == '') {
echo "No has ingresado la pregunta de la encuesta. <a class='link' href='javascript:history.back()'>Regresar</a>";
}else {
$pregunta = strip_tags($_POST['pregunta']);
mysql_query("INSERT INTO encuestas (pregunta) VALUES('".$pregunta."')");
$id_enc = mysql_insert_id();
$cont = '0';
$cant = count($_POST['opciones']);
while($cont < $cant) {
$opciones = $_POST['opciones']["$cont"];
$sql = mysql_query("INSERT INTO encuestas_opt (opciones, id_enc) VALUES ('$opciones', '$id_enc')");
$cont++;
}
?>
<div style="border: 1px solid #e0e0e0; background: #f7f7f7; padding: 5px; text-align: center; margin-top: 100px;">
<strong>Encuesta creada correctamente</strong>
</div>
<?php
mysql_query("DELETE FROM encuestas_ip"); // Limpiamos la tabla encuestas_ip para permitir a los anteriores votantes poder votar en esta nueva encuesta
}
}else {
?>
<div style="font-size: 17px; color: #0066cc;">Crear encuesta</div>
<form name="frm" id="frm" action="addencuesta.php" method="post">
<label>Título de la encuesta:</label>
<input type="text" name="pregunta" size="30" /><br />
<label>Opciones:</label>
<a class="link" href="#" onclick="addField()" accesskey="5">Añadir opciones</a>
<div id="files"></div>
<input type="submit" value="Guardar datos" id="envia" name="enviar" />
</form>
<?php
}
?>
</body>
</html>
A este archivo lo llamaremos encuestas.php, y será el que nos muestre la encuesta para votar y los resultados de la misma si ya se ha votado:
<?php
include('acceso_DB.php'); // este archivo contendrá nuestros datos de conexión a MySQL
$ipencuesta = $_SERVER['REMOTE_ADDR'];
$sql = mysql_query("SELECT * FROM encuestas_ip WHERE ip_voto LIKE '".$ipencuesta."'")or die(mysql_error());
$votadas = mysql_fetch_array($sql);
if(mysql_num_rows($sql) == 0) {
$sql_enc = mysql_query("SELECT * FROM encuestas ORDER BY id_enc DESC LIMIT 0,1") or die(mysql_error());
while($row = mysql_fetch_array($sql_enc)) {
$id_enc = $row['id_enc'];
$pregunta = $row['pregunta'];
?>
<div style="text-align: center;"><strong><?=$pregunta?></strong></div>
<form method="post" action="votarencuesta.php">
<?php
$opt = mysql_query("SELECT * FROM encuestas_opt WHERE id_enc='".$id_enc."'") or die(mysql_error());
while($row2 = mysql_fetch_array($opt)) {
$id_opt = $row2['id_opt'];
$opciones = $row2['opciones'];
$num_votos = $row2['num_votos'];
?>
<input type="radio" name="opciones" value="<?=$id_opt?>" /> <?=$opciones?><br />
<?php
}
?>
<div style="text-align: center; padding: 10px;"><input type="submit" name="votar" value="Votar" /></div>
</form>
<?php
}
}else {
$encuesta = mysql_query("SELECT * FROM encuestas ORDER BY id_enc DESC LIMIT 0,1") or die(mysql_error());
while($datos = mysql_fetch_array($encuesta)) {
$id_enc = $datos['id_enc'];
$pregunta = $datos['pregunta'];
?>
<div style="text-align: center;"><strong><?=$pregunta?></strong></div>
<?php
$rs = mysql_query("SELECT sum(num_votos) FROM encuestas_opt WHERE id_enc='".$id_enc."'");
$tot = mysql_result($rs,0);
$opts = mysql_query("SELECT * FROM encuestas_opt WHERE id_enc='".$id_enc."'") or die(mysql_error());
while($dat2 = mysql_fetch_array($opts)) {
$id_opt = $dat2['id_opt'];
$opciones = $dat2['opciones'];
$num_votos = $dat2['num_votos'];
$ptos = $num_votos * 100;
$porcentaje = @round($ptos/$tot,0);
?>
<strong><?=$opciones?></strong> - <?=$num_votos?> votos - <?=$porcentaje?>%
<div style="width: <?=$porcentaje?>%; height: 10px; background: #009900;"></div>
<?php
}
?>
<div style="text-align: center; font-size: 11px;">Votos totales: <strong><?=$tot?></strong></div>
<?php
}
}
?>
Para finalizar, el archivo que guardará los votos y la IP del votante en la BD, lo llamaremos votarencuesta.php
<?php
include('acceso_DB.php'); // Este archivo contendrá nuestros datos de conexión a MySQL
if(isset($_POST['votar'])) {
if($_POST['opciones'] == '') {
echo "No se ha seleccionado ninguna opción. <a href='javascript:history.back()'>Regresar</a>";
}else {
$opciones = $_POST['opciones'];
$sql = mysql_query("SELECT * FROM encuestas_opt WHERE id_opt='".$opciones."'");
$row = mysql_fetch_array($sql);
$suma = $row['num_votos']+1;
mysql_query("UPDATE encuestas_opt SET num_votos='".$suma."' WHERE id_opt='".$opciones."'");
mysql_query("INSERT INTO encuestas_ip (ip_voto) VALUES('$REMOTE_ADDR')");
$redir = $_SERVER['HTTP_REFERER'];
header("Location: $redir");
}
}else {
echo "Operación incorrecta. <a href='javascript:history.back()'>Regresar</a>";
}
?>
Con todo ello ya tendremos listo nuestro sistema de encuestas, ahora nos quedaría hacer un include() a nuestro archivo encuestas.php en cualquier zona de nuestra web, foro o blog para empezar a utilizarla.
El sistema es sencillo, pueden agregársele más cosas, por ejemplo un poco de AJAX para que los votos se hagan sin necesidad de recargar toda la página en la que esté incluida la encuesta, y demás cosillas que ustedes pueden integrarle. Espero que les pueda servir de utilidad.
Enlaces relacionados
El 5 de Mayo del 2008 a las 09:44
He seguido todos los pasos y no me funciona, tan solo creo una pagina y llamo como tu lo dices.
include("encuestas.php"); // Este archivo contendrá nuestros datos de conexión a MySQL
Por casualidad no tienes el script para bajarlo, seria de gran ayuda.
Desde ya muchas gracias.
El 22 de Feb. del 2008 a las 09:39
Disculpen la demora, había olvidado ese archivo, ya lo he agregado al post, espero que con ello les funcione el script.
Saludos.
El 22 de Feb. del 2008 a las 02:59
wenas, yo tambien necesito el codigo de acceso_bd.php porfavor.
e intentado usar este:
<?php
$hostname_conexion = "localhost";
$database_conexion = "";
$username_conexion = "";
$password_conexion = "";
$conexion = mysql_pconnect($hostname_conexion, $username_conexion, $password_conexion) or trigger_error(mysql_error(),E_USER_ERROR);
?>
pero no me funciona, ademas la base de datos no tienen ni username ni password asi que este codigo no sirce, porque te lo pide no?
gracias
El 13 de Feb. del 2008 a las 05:22
podes subir el codigo del acceso_bd.php por favor? Gracias.
Guía BBCode
Comentar este artículo
PRONTO EN CANALPERU
Si deseas saber más, entra a CanalPeru.NET
BÚSQUEDAS
GALERÍA
|
|
|
|
|
|
|
|
|
|
SÍGUEME EN TWITTER
Cuando un geek muere, su tumba -obviamente- se debe diferenciar de las otras http://www.rarurl.com/tumbageek xD
@TheGhost 2 semanas desconectado del mundo y me vuelvo a enfermar, creo que el internet me afecta, habrá "Kaspersky" en pastillas? xD
Por enésima vez... agripado!!!
Firefox 3... un desastre!! http://rarurl.com/jEYIwL
Nuestra bandera ya está en 1er lugar, a seguir votando!! http://www.rarurl.com/9UOzz
que rico estuvo el estofado!
@TheGhost amén
@TheGhost admiro tu fé en esa tira de inútiles xD
Nace RarURL, otra alternativa para comprimir URLs extensas http://www.rarurl.com/q0GQ
TwitterCounter, cuántos te siguen en Twitter http://www.rarurl.com/ZwU6Lh
CATEGORÍAS
- Actualidad (11)
- AJAX (0)
- CelulaWeb.NET (7)
- Cine y TV (40)
- CSS (2)
- Deportes (63)
- Descargas (16)
- Diseño (7)
- Eventos (7)
- Gadgets (75)
- Informática (105)
- Internet (173)
- Juegos y Consolas (19)
- Multimedia (2)
- Música (22)
- Off Topic (29)
- PHP y MySQL (6)
- Seguridad (37)
- Software Libre (19)
- XHTML (1)
BLOGROLL
ENCUESTAS
¿Quién crees que fue o es el "Rey del Rock" a nivel mundial?
VIDEO MÁS VISTO EN CANALPERÚ
- Título: Telekinesis
- Álbum: Soda Stereo
- Intérprete: Soda Stereo
- 2616 visitas | 0 comentarios
- 98 votos recibidos | 912 puntos























