Beruflich Dokumente
Kultur Dokumente
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
ComoHacerunSistemadeEncuestas
conPHPyMySQL
Por Edwind Pineda
diciembre 21, 2012
MySQL, PHP
64 Comentarios
PUBLICIDAD
DEMO
DESCARGAR
Enestetutorialaprenderasahacerunsistemadeencuestasfuncional,prcticoyexpandible,
usaremosPHPyMySQLcontablasrelacionales.
Trabajaremoscon4ficherosPHP,unoparalaconexinalabasededatos(conexion.php),
unoparalistarlasencuestas(index.php),otroparacrearnuevasencuestas(agregar.php),el
quemostraralosresultadosdelasencuestas(resultado.php)yporultimoestilos.cssquese
encargaradedarlealgodeesteticaperotambiendeunapartemuyesencialqueeslade
mostrarlabarradevotaciones.
Sienciertasparteselcdigoteresultamuycomplejo,leeloscomentarios.
0.estilos.css
.barra{
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
1/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
.barra{
background:#ff3019;
background:mozlineargradient(top,#ff30190%,#cf0404100%);
background:webkitlineargradient(top,#ff30190%,#cf0404100%);
background:lineargradient(tobottom,#ff30190%,#cf0404100%);
clear:both;
height:15px;
color:white;
fontweight:bold;
textalign:right;
padding:6px;
borderradius:4px;
maxwidth:356px;
minwidth:20px;
/*Apartirdeaquiessolocosmetico,lopuedesborrar*/
*{
margin:0;
padding:0;
fontfamily:sansserif;
fontsize:14px;
}
body{
background:#464646;
}
a{
textdecoration:none;
color:red;
}
.fr{
float:right;
}
.fl,.votar{
float:left;
}
.cf{
clear:both;
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
2/21
27/4/2015
clear:both;
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
.wrap{
padding:25px;
margin:0auto;
width:385px;
background:#F3F3F3;
borderradius:4px;
margintop:70px;
border:1pxsolid#E0E0E0;
}
h1{
marginbottom:20px;
fontsize:21px;
borderbottom:1pxsolid#DDD;
paddingbottom:15px;
textalign:center;
}
form>div{
marginbottom:20px;
}
form.titulo{
marginright:20px;
formlabel{
display:block;
forminput[type='text'],select{
border:1pxsolid#E0E0E0;
padding:6px;
resize:none;
forminput[type="submit"]{
padding:8px16px;
background:gray;
border:0;
display:block;
fontweight:bold;
color:white;
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
3/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
color:white;
borderradius:6px;
}
forminput[type="submit"]:hover{
background:#505050;
}
ul.votacion{
marginbottom:25px;
liststyle:none;
}
.votacionli{
padding:8px;
background:#FCFCFC;
borderradius:5px;
marginbottom:5px;
}
.votacionli:hover{
background:white;
}
.votacionlia{
color:gray;
fontweight:bold;
fontsize:16px;
.votacionlia:hover{
color:black;
}
.votacionlispan{
marginleft:10px;
}
.votacion.fl{
marginbottom:5px;
}
.volver{
display:block;
paddingtop:15px;
clear:both;
}
.resultado{
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
4/21
27/4/2015
.resultado{
float:left;
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
marginleft:10px;
margintop:7px;
color:black;
1.SQL
Creamosunatalaconelnombreencuestasconlossiguientescampos:id,tituloyfecha.Aqui
sealmacenaralosdatoslasencuestascomoeltituloylafechaquefuecreadalaencuestas,
utilizaremosotratablaparaquealmacenelasopcionesdelasencuestas.
CREATETABLEIFNOTEXISTS`encuestas`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`titulo`varchar(50)NOTNULL,
`fecha`dateNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBDEFAULTCHARSET=latin1AUTO_INCREMENT=1;
Ahorainsertarmosunosdatosdeejemploenlatabla:
INSERTINTO`encuestas`(`id`,`titulo`,`fecha`)
VALUES(NULL,'QueosparecenlostutorialesdePHP?',
'20121215');
Creamosotratablaconelnombreopcionesconlossiguientescampos:id,id_encuesta,
nombreyvalor.
Elcampodeid_encuestatendrrelacinconelcampoiddelatablaencuestas,ennombre
iraelnombreyvalorguardaraelnumerodevotosquetendralaopcionrespectiva.
CREATETABLEIFNOTEXISTS`opciones`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`id_encuesta`int(11)NOTNULL,
`nombre`varchar(50)NOTNULL,
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
5/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
`valor`int(11)NOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBDEFAULTCHARSET=latin1AUTO_INCREMENT=1;
Insertamosdatosalatablaopciones:
INSERTINTO`opciones`(`id`,`id_encuesta`,`nombre`,`valor`)
VALUES(NULL,'1','MuyBueno','14')
,(NULL,'1','Bueno','6')
,(NULL,'1','Malo','2');
PUBLICIDAD
Fijaosquehedefinidoid_encuestacon1yesporquequieroqueestasopcionesesten
relacionadasconlaencuestasquecreamosanteriormentequellevabaelidde1.
Sinoentendisteisbiencomovamosatrabajarlasrelacionesdelastablas,estagraficate
aclararlasdudas:
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
6/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
02.conexion.php
EltipicoficheroPHPparaguardarlosdatosdelaconexin,nadadelotromundo:
<?php//datosparalaconexionamysql
define('DB_SERVER','localhost');
define('DB_NAME','TUBASEDEDATOS');
define('DB_USER','TUUSUARIO');
define('DB_PASS','TUCLAVE');
$conex=mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$conex);
03.index.php
Loprimeroseraincluiralficherodeconexin,luegoharemosunaconsultaalabasedatos
paraquenosmuestrenlosttulosdelatablaencuestaslosmismosquemostraremoscomo
enlaceshacialasencuestas,estosenlacesllevaraneliddelaencuestasencuestin
medianteGET(encuestas.php?id=x).
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
7/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
<?php
require('conexion.php');
$sql="SELECT*FROMencuestasORDERBYidDESC";
$req=mysql_query($sql);
?>
<!DOCTYPEHTML>
<htmllang="enUS">
<head>
<metacharset="UTF8">
<title>Sistemadeencuestas</title>
<linkrel="stylesheet"href="estilos.css">
</head>
<body>
<divclass="wrap">
<h1>Encuestas</h1>
<ulclass="votacionindex">
<?php
while($result=mysql_fetch_object($req)){
echo'<li><ahref="encuesta.php?id='.$result>id.'">'.
}
?>
</ul>
<ahref="agregar.php">+Agregarnuevaencuesta</a>
</div>
</body>
</html>
Nosdeberairquedandoas:
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
8/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
04.encuesta.php
Linea04:SinoexistelavariabledeURLseregresaraalapaginaprincipal.
Linea11:Siledanavotar(elformdevotacioniraabajo)ysihanseleccionadounaopcion
sevaaactualizarlosdatosdelcampovalordelatablaopciones:
1
<?php
require('conexion.php');
$id=$_GET['id'];
if(!isset($_GET['id'])){
header('location:index.php');
if(isset($_POST['votar']))
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
9/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
if(isset($_POST['valor'])){
?>
$opciones=$_POST['valor'];
$mod=mysql_query("SELECT*FROMopcionesWHEREid="
while($result=mysql_fetch_object($mod)){
$valor=$result>valor+1;//obtenemoselvalorde'v
mysql_query("UPDATEopcionesSETvalor='".$valor
}
header('location:resultado.php?id='.$id);//Porultimolo
AhoralaparteHTMLdondeiraelformdevotacion,aquivamosagenerarunaconsultaala
basedatosparaquesemuestrenlosdatosdelatablaencuestasconrelacinalatabla
opcionescomoradiobuttons,partesdeunform:
Linea15:EnestalineaharemosunqueryconINNERJOINenelcualtrabajaremosconlas
tablasencuestasyopcionesdondeaseraencuestasybesopciones,aquibuscaremos
filasdondea.idseaigualab.encuesta_id,elvalordea.idquesecompararaseradefinido
por$id,estevalorloobtuvimosalprincipioenelprimerpedazodecdigomedianteGET.
Linea18y27:Conelresultadodelqueryhacemosunwhiledondemostraremoseltitulode
laencuestayluegoenlalinea48semuestrancadaunadelasopcionescomo
input[type='radio'],$auxesunavariableauxiliarquenosayudaadetenerelbucleparaque
ciertoselementossemuestrensolounavez.
PUBLICIDAD
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
10/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPEHTML>
<htmllang="enUS">
<head>
<metacharset="UTF8">
<title>Sistemadeencuestas</title>
<linkrel="stylesheet"href="estilos.css">
</head>
<body>
<divclass="wrap">
<formaction=""method="post">
<?php
$aux=0;
$sql="SELECTa.tituloastitulo,a.fechaasfecha,b.idasid,b.nombr
$req=mysql_query($sql);
while($result=mysql_fetch_object($req)){
if($aux==0){
echo'<h1>'.$result>titulo.'</h1>';
echo'<ul>';
$aux=1;
echo'<li><inputname="valor"type="radio"value="'.$result>id
echo'</ul>';
if(!isset($_POST['valor'])){
echo"<divclass='error'>Seleccionaunaopcion.</div>";
}
echo'<inputname="votar"type="submit"value="Votar">';
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
11/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
echo'<inputname="votar"type="submit"value="Votar">';
echo'<ahref="resultado.php?id='.$id.'"class="resultado">VerResul
echo'<ahref="index.php"class="volver">←Volver</a>';
?>
</form>
</div>
</body>
</html>
Sitodosalibien,encuesta.phpdeberiaverseasi:
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
12/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
05.resultado.php
Estaarchivoesmassimple,aquimostraremoslosresultadosdelasencuestasdeacuerdo
alidobtenidoporGET(resultado.php?id=x):
Linea11:ParaobtenerelvalorusamosSUM()paraquenosresultelasumatotaldelvalor
enunsolonumero:
1
<?php
require('conexion.php');
if(!isset($_GET['id'])){
header('location:index.php');
}
$suma=0;
$id=$_GET['id'];
$mod=@mysql_query("SELECTSUM(valor)asvalorFROMopcionesWHEREid_e
while($result=@mysql_fetch_object($mod)){
$suma=$result>valor;
}
?>
LuegomostramoslosresultadosconelmismoqueryconINNERJOINqueyahemosusado
anteriormente,estonosmostraracadaopcinenformadediv(.barra)alqueledefinimosel
anchoenporcentajeusandounaoperacinmatemtica,
1
2
<!DOCTYPEHTML>
<htmllang="enUS">
3
4
<head>
<metacharset="UTF8">
5
6
<title>SistemadeEncuestas</title>
<linkrel="stylesheet"href="estilos.css">
</head>
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
13/21
27/4/2015
7
8
<body>
11
<divclass="wrap">
<formaction=""method="post">
<?php
12
13
$aux=0;
$sql="SELECTa.tituloastitulo,a.fechaasfecha,b.idasid,b.nombr
14
15
$req=@mysql_query($sql);
16
while($result=@mysql_fetch_object($req)){
9
10
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
if($aux==0){
echo"<h1>".$result>titulo."</h1>";
echo"<ulclass='votacion'>";
$aux=1;
echo'<li><divclass="fl">'.$result>nombre.'</div><divclass=
if($suma==0){
echo'<divclass="barracero"style="width:0%;"></div></li
}else{
echo'<divclass="barra"style="width:'.($result>valor*100
}
}
echo'</ul>';
if(isset($aux)){
echo'<spanclass="fr">Total:'.$suma.'</span>';
echo'<ahref="encuesta.php?id='.$id.'""class="volver">Volver
?>
</ul>
</form>
</div>
</body>
</html>
Sillegastehastaaquiresultado.phpdeberalucirsimilaraesto:
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
14/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
Sillegastehastaaquiresultado.phpdeberalucirsimilaraesto:
06.agregar.php
Enesteficheroesprobablementeelmascomplejodetodos,manejaremoselprocesoPHP
arribayelformularioabajo,porelloparaentenderestaparteesnecesarioverelcdigo
completo(leercomentarios):
<?phprequire('conexion.php');
$cont=0;
$titulo='';if(isset($_POST['titulo'])){$titulo=trim($_POST['titulo'
if(isset($_POST['enviar'])){
if($titulo!=""){
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
15/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
if($titulo!=""){
$num=$_POST['opciones'];//estevalorlovamosaobtenerdeloque
$fecha=date('Ymd');
$sql="INSERTINTO`encuestas`(`id`,`titulo`,`fecha`)VALUES(NULL
mysql_query($sql);
$sql="SELECTMAX(id)asidFROMencuestas";//ahoraobtenemoseli
//laqueacabamosdei
//estolohacemospara
$req=mysql_query($sql);
while($result=mysql_fetch_object($req)){
$id_encuesta=$result>id;//conelresultadoobtenidohacemos
$sql="INSERTINTO`opciones`(`id`,`id_encuesta`,`nombre`,`valo
for($i=1;$i<=$num;$i++){
$opcnativa=trim($_POST['opc'.$i]);//obtenemoselnombredeca
if($opcnativa!=""){
$sql.="(NULL,'$id_encuesta','$opcnativa','0')"
if($i==$num){
$sql.=";";//siesquesellegaalfinal,terminalaconsu
}else{
if($cont<2){//sielusuarionodefinioningunaopcion,seelimina
$cont++;
$sql.=",";//sinoseponeuna,ysecontinua.
$sql="DELETEFROM`encuestas`WHEREid=".$id_encuesta;
echo"<divclass='error'>Tienequellevarporlomenos2opciones
}else{
header('location:index.php');//porultimositodosaliobien,
}
mysql_query($sql);//yejecutamoselquery
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
16/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
}
}
?>
<!DOCTYPEHTML>
<htmllang="enUS">
<head>
<metacharset="UTF8">
<title>SistemadeEncuestas</title>
<linkrel="stylesheet"href="estilos.css">
</head>
<body>
<divclass="wrap">
<h1>AgregarEncuesta</h1>
<formaction=""method="post">
<divclass="fltitulo">
<label>Titulo:</label>
<inputname="titulo"type="text"value="<?phpecho$titulo;?>
</div>
<?php
//estoessimplementeunformulario,peroaquihacemosunacondicion
if(isset($_POST['opc'])){
?>
<divclass="cf">
<label>Opcion<?phpecho$i;?>:</label>
<inputname="opc<?phpecho$i;?>"type="text"size="43">
</div>
<?php}//aquiterminaelbucle?>
<divclass="cf">
$num=$_POST['opciones'];//guardamoselvalordelnumerodeopcion
for($i=1;$i<=$num;$i++){//hacemoselbuclemostrandoloscamposres
<inputname="enviar"type="submit"value="Enviar">
<inputname="opciones"type="hidden"value="<?phpecho$num;//lepa
<inputname="cont"type="hidden"value="<?phpechocont;?>">
</div>
<?php}else{//sinosehadefinidonrodeopciones:?>
<divclass="fl">
<label>Ndeopciones:</label>
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
17/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
<label>Ndeopciones:</label>
<selectname="opciones">
<?phpfor($i=2;$i<=20;$i++){//estoesunloopsimple,solopara
<optionvalue="<?phpecho$i;?>"><?phpecho$i;?></option
<?php}?>
</select>
</div>
<divclass="cf">
<inputname="opc"type="submit"value="Continuar">
</div>
<?php}//Sinosehandefinidoopciones,queenvezdesalirelboton
<ahref="index.php"class="volver">Volver</a>
</form>
</div>
</body>
</html>
Porultimo,agregar.phpensusdosfases:
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
18/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
19/21
27/4/2015
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
Posiblesmejoras
Dentrodelasposiblesmejorasqueselepodemoshaceralsistema,estalacreacinde
nuevasencuestas(agregar.php)detrsdeunlogin,otraadicinserialadeimpedir
votacionesconsecutivasbloqueandolaIPoporcookies.
Sinoentendistealgunaparteotesalealgnerror,hzmelasaberenloscomentariosy
recuerdaquepuedesbajarteelcdigofuentedesdeesteenlaceoverloenfuncionamiento
aqui.
Compartir
Compartir
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
Compartir
20/21
27/4/2015
Compartir
ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos
Compartir
Compartir
EdwindPineda
SoyAutor/EditordeTursos,estudiolaIngenieriadeSistemasytrabajocomo
programadorPHPfreelance,siguemeenTwitteroescribemeal
m@edwindpineda.com.
Talvezteinterese
Dotgeek: Hosting
Gratuito para
Desarrolladores Web
Traducir la Funcin
date() de PHP al
Espaol
Como Hacer un
Formulario de
Contacto IV:
Almacenar en Base de
Datos MySQL con PHP
http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/
21/21