Sie sind auf Seite 1von 21

27/4/2015

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">&larr;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

10 Comandos SQL que


te pueden ser de
utilidad

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

Das könnte Ihnen auch gefallen