Como Hacer Un Sistema de Encuestas Con PHP y MySQL _ WebTursos

Post on 07-Nov-2015

118 views 2 download

description

Sistema

Transcript of Como Hacer Un Sistema de Encuestas Con PHP y MySQL _ WebTursos

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 1/21

    ComoHacerunSistemadeEncuestasconPHPyMySQLPor Edwind Pineda

    diciembre 21, 2012 MySQL, PHP 64 Comentarios

    DEMO DESCARGAR

    Enestetutorialaprenderasahacerunsistemadeencuestasfuncional,prcticoyexpandible,usaremosPHPyMySQLcontablasrelacionales.

    Trabajaremoscon4ficherosPHP,unoparalaconexinalabasededatos(conexion.php),unoparalistarlasencuestas(index.php),otroparacrearnuevasencuestas(agregar.php),elquemostraralosresultadosdelasencuestas(resultado.php)yporultimoestilos.cssqueseencargaradedarlealgodeesteticaperotambiendeunapartemuyesencialqueeslademostrarlabarradevotaciones.

    Sienciertasparteselcdigoteresultamuycomplejo,leeloscomentarios.

    0.estilos.css

    PUBLICIDAD

    .barra{

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 2/21

    moz (top, , ) webkit (top, , ) (tobottom, , ) both px white bold right px px px px

    sansserif px

    none red

    right

    left

    both

    .barra{background: #ff3019;

    background: lineargradient #ff3019 0% #cf0404 100% ;background: lineargradient #ff3019 0% #cf0404 100% ;background: lineargradient #ff3019 0% #cf0404 100% ;clear: ;height: 15 ;color: ;fontweight: ;textalign: ;padding: 6 ;borderradius: 4 ;maxwidth: 356 ;minwidth: 20 ;

    }

    /*Apartirdeaquiessolocosmetico,lopuedesborrar*/

    *{margin: 0;padding: 0;fontfamily: ;fontsize: 14 ;

    }body{

    background: #464646;}a{

    textdecoration: ;color: ;

    }.fr{

    float: ;}

    ,.fl .votar{float: ;

    }.cf{

    clear: ;

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 3/21

    both

    px auto px px px pxsolid

    px px pxsolid px center

    px

    px

    block

    pxsolid px none

    px px gray block bold white

    clear: ;}

    .wrap{padding: 25 ;margin: 0 ;width: 385 ;background: #F3F3F3;borderradius: 4 ;margintop: 70 ;border: 1 #E0E0E0;

    }h1{

    marginbottom: 20 ;fontsize: 21 ;borderbottom: 1 #DDD;paddingbottom: 15 ;textalign: ;

    }form>div{

    marginbottom: 20 ;}form.titulo{

    marginright: 20 ;}formlabel{

    display: ;}forminput[type='text'],select{

    border: 1 #E0E0E0;padding: 6 ;resize: ;

    }forminput[type="submit"]{

    padding: 8 16 ;background: ;border: 0;display: ;fontweight: ;color: ;

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 4/21

    white px

    px none

    px px px

    white

    gray bold px

    black

    px

    px

    block px both

    color: ;borderradius: 6 ;

    }forminput[type="submit"]:hover{

    background: #505050;}ul.votacion{

    marginbottom: 25 ;liststyle: ;

    }li.votacion {

    padding: 8 ;background: #FCFCFC;borderradius: 5 ;marginbottom: 5 ;

    }li.votacion :hover{

    background: ;}

    lia.votacion {color: ;fontweight: ;fontsize: 16 ;

    }lia.votacion :hover{

    color: ;}

    lispan.votacion {marginleft: 10 ;

    }.votacion .fl{

    marginbottom: 5 ;}.volver{

    display: ;paddingtop: 15 ;clear: ;

    }.resultado{

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 5/21

    left

    px px black

    1.SQLCreamosunatalaconelnombreencuestasconlossiguientescampos:id,tituloyfecha.Aquisealmacenaralosdatoslasencuestascomoeltituloylafechaquefuecreadalaencuestas,utilizaremosotratablaparaquealmacenelasopcionesdelasencuestas.

    encuestas id AUTO_INCREMENTtitulo fecha date

    id CHARSET latin1AUTO_INCREMENT

    Ahorainsertarmosunosdatosdeejemploenlatabla:

    encuestas id titulo fecha

    Creamosotratablaconelnombreopcionesconlossiguientescampos:id,id_encuesta,nombreyvalor.Elcampodeid_encuestatendrrelacinconelcampoiddelatablaencuestas,ennombreiraelnombreyvalorguardaraelnumerodevotosquetendralaopcionrespectiva.

    opciones id AUTO_INCREMENT id_encuesta nombre

    .resultado{float: ;

    marginleft: 10 ;margintop: 7 ;color: ;

    }

    CREATE TABLE IF NOT EXISTS ` ` (` ` int(11) NOT NULL ,` ` varchar(50) NOT NULL,` ` NOT NULL,PRIMARY KEY (` `)) ENGINE=InnoDB DEFAULT = =1 ;

    INSERT INTO ` ` (` `, ` `, ` `)VALUES (NULL , 'QueosparecenlostutorialesdePHP?','20121215');

    CREATE TABLE IF NOT EXISTS ` ` (` ` int(11) NOT NULL ,` ` int(11) NOT NULL,` ` varchar(50) NOT NULL,

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 6/21

    valor

    id CHARSET latin1AUTO_INCREMENT

    Insertamosdatosalatablaopciones:

    opciones id id_encuesta nombre valor

    Fijaosquehedefinidoid_encuestacon1yesporquequieroqueestasopcionesestenrelacionadasconlaencuestasquecreamosanteriormentequellevabaelidde1.

    Sinoentendisteisbiencomovamosatrabajarlasrelacionesdelastablas,estagraficateaclararlasdudas:

    PUBLICIDAD

    ` ` int(11) NOT NULL,

    PRIMARY KEY (` `)) ENGINE=InnoDB DEFAULT = =1 ;

    INSERT INTO ` ` (` ` ,` ` ,` ` ,` `)VALUES (NULL , '1', 'MuyBueno', '14'), (NULL , '1', 'Bueno', '6'), (NULL , '1', 'Malo', '2');

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 7/21

    02.conexion.phpEltipicoficheroPHPparaguardarlosdatosdelaconexin,nadadelotromundo:

    mysql_connect

    03.index.phpLoprimeroseraincluiralficherodeconexin,luegoharemosunaconsultaalabasedatosparaquenosmuestrenlosttulosdelatablaencuestaslosmismosquemostraremoscomoenlaceshacialasencuestas,estosenlacesllevaraneliddelaencuestasencuestinmedianteGET(encuestas.php?id=x).

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 8/21

    Sistemadeencuestas

    Encuestas

    Agregarnuevaencuesta

    Nosdeberairquedandoas:

    html< lang enUS=" ">head< >

    meta< charset UTF8=" ">title< > title

    link< rel stylesheet=" " href estilos.css=" ">head

    body< >div< class wrap=" ">h1< > h1

    ul< class votacionindex=" ">

    ' id

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 9/21

    04.encuesta.phpLinea04:SinoexistelavariabledeURLseregresaraalapaginaprincipal.Linea11:Siledanavotar(elformdevotacioniraabajo)ysihanseleccionadounaopcionsevaaactualizarlosdatosdelcampovalordelatablaopciones:

    1

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 10/21

    AhoralaparteHTMLdondeiraelformdevotacion,aquivamosagenerarunaconsultaalabasedatosparaquesemuestrenlosdatosdelatablaencuestasconrelacinalatablaopcionescomoradiobuttons,partesdeunform:

    Linea15:EnestalineaharemosunqueryconINNERJOINenelcualtrabajaremosconlastablasencuestasyopcionesdondeaseraencuestasybesopciones,aquibuscaremosfilasdondea.idseaigualab.encuesta_id,elvalordea.idquesecompararaseradefinidopor$id,estevalorloobtuvimosalprincipioenelprimerpedazodecdigomedianteGET.

    Linea18y27:Conelresultadodelqueryhacemosunwhiledondemostraremoseltitulodelaencuestayluegoenlalinea48semuestrancadaunadelasopcionescomoinput[type='radio'],$auxesunavariableauxiliarquenosayudaadetenerelbucleparaqueciertoselementossemuestrensolounavez.

    PUBLICIDAD

    if(isset($_POST['valor'])){

    $opciones = $_POST['valor'];$mod = mysql_query("SELECT*FROMopcionesWHEREid="while($result = mysql_fetch_object($mod)){

    $valor = $result>valor + 1;//obtenemoselvalorde'valor'yleaadimos1unidadmysql_query("UPDATEopcionesSETvalor='".$valor

    }header('location:resultado.php?id='.$id);//Porultimoloredireccionamosalaencuestasmostrandolosresultados.

    }}

    ?>

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 11/21

    Sistemadeencuestas

    12345678910111213141516171819

    html< lang enUS=" ">

    head< >meta< charset UTF8=" ">

    title< > title link< rel stylesheet=" " href estilos.css=" ">

    headbody< >

    div< class wrap=" ">

    form< action="" method post=" ">

    ' '

    ' '

    ' id

    ' '

    " Seleccionaunaopcion "

    ' '

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 12/21

    Sitodosalibien,encuesta.phpdeberiaverseasi:

    ' ' ' VerResultados

    ' larr Volver '

    echo input< name votar=" " type submit=" " value Votar=" "> ;echo a< href resultado.php?id '.$id.'=" = " class resultado=" ">

    echo a< href index.php=" " class volver=" ">& ; a ;

    ?>

    formdiv

    bodyhtml

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 13/21

    05.resultado.phpEstaarchivoesmassimple,aquimostraremoslosresultadosdelasencuestasdeacuerdoalidobtenidoporGET(resultado.php?id=x):Linea11:ParaobtenerelvalorusamosSUM()paraquenosresultelasumatotaldelvalorenunsolonumero:

    LuegomostramoslosresultadosconelmismoqueryconINNERJOINqueyahemosusadoanteriormente,estonosmostraracadaopcinenformadediv(.barra)alqueledefinimoselanchoenporcentajeusandounaoperacinmatemtica,

    1

    SistemadeEncuestas

    1234567

    @

    @

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 14/21Sillegastehastaaquiresultado.phpdeberalucirsimilaraesto:

    78

    910111213141516

    body< >

    div< class wrap=" "> form< action="" method post=" ">

    @

    @ " " " " ' ' ' valor

    ' '

    ' Total ' ' Volver

    ulformdivbodyhtml

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 15/21

    Sillegastehastaaquiresultado.phpdeberalucirsimilaraesto:

    06.agregar.phpEnesteficheroesprobablementeelmascomplejodetodos,manejaremoselprocesoPHParribayelformularioabajo,porelloparaentenderestaparteesnecesarioverelcdigocompleto(leercomentarios):

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 16/21

    " Tienequellevarporlomenos opciones

    if($titulo != ""){

    $num = $_POST['opciones'];//estevalorlovamosaobtenerdeloqueelusuarioingresecomonumerodeopcionesalcrearlaencuesta$fecha = date('Ymd');

    $sql= "INSERTINTO`encuestas`(`id`,`titulo`,`fecha`)VALUES(NULL,'$titulo','$fecha');"mysql_query($sql);

    $sql = "SELECTMAX(id)asidFROMencuestas";//ahoraobtenemoseliddelaultimafila,//laqueacabamosdeingresar,//estolohacemosparapoderasociarlelasopciones

    $req = mysql_query($sql);

    while($result = mysql_fetch_object($req)){$id_encuesta = $result>id;//conelresultadoobtenidohacemosunbucleydefinimoslosresultadoscomoid_encuesta.

    }

    $sql = "INSERTINTO`opciones`(`id`,`id_encuesta`,`nombre`,`valor`)VALUES"for($i=1;$i 2

    }else{header('location:index.php');//porultimositodosaliobien,redireccionamosalindexparaqueelusuarioveasuencuestareciencreada.

    }mysql_query($sql);//yejecutamoselquery

    }

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 17/21

    SistemadeEncuestas

    AgregarEncuesta

    Titulo

    Opcion Ndeopciones

    }}

    ?>

    html< lang enUS=" ">head< >

    meta< charset UTF8=" ">title< > title

    link< rel stylesheet=" " href estilos.css=" ">head

    body< >

    div< class wrap=" ">h1< > h1

    form< action="" method post=" ">

    div< class fltitulo=" ">label< > : label

    input< name titulo=" " type text=" " value=" div

    div< class cf=" ">label< > : label

    input< name opc=" " type text=" " size 43=" ">div

    div< class cf=" ">

    input< name enviar=" " type submit=" " value Enviar=" "> input< name opciones=" " type hidden=" " value=" input< name cont=" " type hidden=" " value=" cont ">

    div

    div< class fl=" ">label< > : label

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 18/21

    Ndeopciones

    Volver

    Porultimo,agregar.phpensusdosfases:

    label< > : labelselect< name opciones=" ">

    option< value=" "> option a< href index.php=" " class volver=" "> aformdiv

    bodyhtml

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 19/21

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 20/21 Compartir Compartir Compartir

    PosiblesmejorasDentrodelasposiblesmejorasqueselepodemoshaceralsistema,estalacreacindenuevasencuestas(agregar.php)detrsdeunlogin,otraadicinserialadeimpedirvotacionesconsecutivasbloqueandolaIPoporcookies.

    Sinoentendistealgunaparteotesalealgnerror,hzmelasaberenloscomentariosyrecuerdaquepuedesbajarteelcdigofuentedesdeesteenlaceoverloenfuncionamientoaqui.

  • 27/4/2015 ComohacerunSistemadeencuestasconPHPyMySQL| WebTursos

    http://web.tursos.com/comohacerunsistemadeencuestasconphpymysql/ 21/21

    Compartir Compartir Compartir

    EdwindPinedaSoyAutor/EditordeTursos,estudiolaIngenieriadeSistemasytrabajocomoprogramadorPHPfreelance,siguemeenTwitteroescribemealm@edwindpineda.com.

    Talvezteinterese

    10 Comandos SQL quete pueden ser de

    utilidad

    Dotgeek: HostingGratuito para

    Desarrolladores Web

    Traducir la Funcindate() de PHP al

    Espaol

    Como Hacer unFormulario deContacto IV:

    Almacenar en Base deDatos MySQL con PHP