INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELECTRICA SISTEMA ADMINISTRATIVO DE ELECCIONES “SADE” TESIS QUE PARA OBTENER EL TÍTULO DE INGENIERO EN COMUNICACIONES Y ELECTRÓNICA PRESENTA: PIÑONES GARCÍA JAIR IVÁN Asesores: Ing. Catalina Patiño Gallegos Ing. Mancilla León Armando M. en C. Genaro Zavala Mejía Estados Unidos Mexicanos, Distrito Federal. 2011 INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELECTRICA UNIDAD PROFESIONAL "ADOLFO LÓPEZMATEOS" TEMA DE TESIS INGENIERO EN COMUNICACIONES Y ELECTRÓNICA QUE PARA OBTENER EL TITULO DE TESIS INDIVIDUAL Y EXAMEN ORAL POR LA OPCIÓN DE TITULACIÓN DEBERA(N) DESARROLLAR C. JAIR IVAN PIÑONES GARCIA "SISTEMA ADMINISTRATIVO DE ELECCIONES (SADE) " DESARROLLAR UNA APLICACIÓN DISPONIBLE EN INTERNET MANEJADORA DE BASES DE DATOS QUE ADMINISTRE UNA JORNADA ELECTORAL EL CUAL REALIZARÁ EL ESCRUTINIO DE FORMA AUTOMÁTICA Y LOS RESULTADOS SE MUESTRAN EN TIEMPO REAL. • • CREAR UN SISTEMA DE COMPUTO QUE FUNCIONE EN UNA INTRANET Y/O INTERNET APLICAR UNA METODOLOGÍA DE DESARROLLO DE SISTEMAS DE CÓMPUTO CON BASE DE DATOS. MÉXICO D.F. A 12 DE OCTUBRE DE 2011. ASESORES ING. ARMAN1D4~/l\PllJ\\ICILLALEÓN ING. CATALlN M. EN C. DAVID VÁZQUEZ ÁLVAREZ JEFE DEL DEPARTAMENTO ACADÉMICO DE INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA Sistema Administrativo De Elecciones “SADE” DEDICATORIA Hay tantas personas a las que quisiera agradecer pero el espacio es tan corto y es que las mejores cosas de la vida muchas veces se van en corto. Hay veces que las palabras no me alcanzan para expresar todos los sentimientos, mucho menos para decir cuan agradecido estoy con las grandes personas que se cruzaron en mi camino y que además me ayudaron a cumplir con este objetivo: terminar la carrera profesional. Este trabajo de tesis se lo dedico en principio a mi familia porque siempre me ayudó a salir adelante, a cumplir mis metas y todo ese apoyo que recibi de mis padres, de mis hermanos, de mi abuelita y de mi tia se ve reflejado en este trabajo. Familia solo quiero decirles que todas esas horas de estudio y desvelo, de enojos, lagrimas e inseguridad asi como de felicidad y ganas de seguir adelante no son en vano, que estan en mi, en el profesionista que soy ahora. Tambien se lo dedico a Victor, que es una gran persona y un gran Ingeniero. Vict, hay tantas cosas que quisiera decirte y no tengo palabras para agradecerte el infinito apoyo que me diste, que en las buenas y en las malas siempre estabas ahí y sigues aquí conmigo, con nosotros porque siempre te lo he dicho (y Cesar no me dejará mentir) tú eres parte de la familia. Graacias tambien por formarme como lo hiciste, por todo lo que me enseñaste y por que creo que soy una gran persona gracias a ti. Dedicado tambien a mis compañeros de especialidad, en especial a mis amigos: Daniel, Paco, Karla, Rosario, Erick, So, Jorge y ¿Por qué no? a Jacob tambien. Amigos, quiero decirles que a pesar de todas las diferencias, de todos los enfrentamientos, de toda la competencia, no se, los extraño mucho. Espero que algún dia nos reencontremos y recordemos con gusto esos días de escuela. Ademas no se les olvide que tenemos que enaltecer nuestra alma máter. Finalmente a mis profesores, por todos los conocimientos que me otorgaron, porque me enseñaron que no todo en la vida es la escuela, que las cosas en la industria son muy dificiles y por los valores que en mi dejarón. Ing. Catalina Patiño, Ing. Armando Mancilla, Ing. Genaro Zavala, Ing. Fernando Noya, Ing. Ignacio Díaz muchas gracias por todo lo que me enseñaron, por la paciencia que, en especial a nuestro grupo tuvieron, por todas las horas que pasamos juntos como una segunda familia y que espero que esto no sea un adios, si no un hasta luego. Finalmente quiero compartir una frase mia que surgia las veces que estaba a punto de darme por vencido… ¿Para que practicar si nadie es perfecto?... ¡¡¡Para ser MEJOR!!! Jair Iván Piñones García Jair Iván Piñones García Página 3 Sistema Administrativo De Elecciones “SADE” AGRADECIMIENTOS A mi madre que me dio la vida y por todo el apoyo que me brindo aún cuando a veces no lo merecía. A mi padre que me enseñó a nunca decir “no puedo” y que es lo que me ha llevado a lograr mis metas A mis hermanos que, a pesar de las diferencias, nunca faltaron consejos para que siguiera adelante. A Víctor que llegó a mi vida en el momento preciso, porque formó el hombre que soy ahora y por transmitirme tanto conocimiento y tantas experiencias para recorrer el sendero de la vida. A mis profesores que me enseñaron que se necesita mucho más que los cálculos y la programación para ser un buen Ingeniero, que los valores y los buenos sentimientos te hacen una mejor persona. A Pedro Abundes que me ayudó mucho con este trabajo en los momentos más críticos, cuando no encontraba una solución. A mis compañeros de especialidad de computación porque nos dimos cuenta que como individuos somos fuertes pero como grupo somos invencibles. Jair Iván Piñones García Página 4 Sistema Administrativo De Elecciones “SADE” 1. INTRODUCCIÓN ..................................................................................................................... 7 1.1. 1.2. 1.3. 1.4. 1.5. Objetivo General. ...................................................................................................................... 7 Objetivos Particulares. .............................................................................................................. 7 Problemática ............................................................................................................................. 7 Justificación............................................................................................................................... 8 Propuesta de Solución. ............................................................................................................. 9 2. ESTADO DEL ARTE ............................................................................................................. 10 2.1. El sistema electoral Actual en México. ................................................................................... 10 2.2. Elecciones Electrónicas ........................................................................................................... 12 2.2.1. Sistemas de Votación DRE de Red Pública ....................................................................... 12 2.2.2. Sistemas de Votación por Internet ................................................................................... 12 2.2.3. Problemas que se han presentado ................................................................................... 14 2.3. Democracia Digital (CIBERDEMOCRACIA) ............................................................................... 17 2.3.1 Desventajas .......................................................................................................................... 18 2.4. Sistemas Electrónicos Electorales en México. ........................................................................ 20 3. PLATAFORMA DE DESARROLLO ................................................................................... 21 3.1. 3.2. 3.3. 3.4. Marco de trabajo en Adobe DreamWeaver CS5 .................................................................... 21 Lenguaje PHP .......................................................................................................................... 22 Hojas de estilos CSS ................................................................................................................ 23 WAMP ..................................................................................................................................... 24 4. IMPLEMENTACION DEL SISTEMA. ................................................................................ 25 4.1. Análisis .................................................................................................................................... 25 4.2. Diseño. .................................................................................................................................... 27 4.3. Desarrollo................................................................................................................................ 34 4.3.1. Construcción ..................................................................................................................... 34 5. DESCRIPCIÓN DEL SISTEMA SADE ............................................................................... 45 5.1. Objetivos. ................................................................................................................................ 45 5.1.1. Mapa de Sitio. .................................................................................................................. 45 5.2. Servicios que ofrece SADE. ..................................................................................................... 52 6. BASES DE DATOS ................................................................................................................ 53 6.1. Manejador de Bases de Datos. ............................................................................................... 53 6.2. Modelo entidad Relación. ....................................................................................................... 53 6.3. Diagrama Entidad Relación. .................................................................................................... 54 6.4. Diccionario de Datos. .............................................................................................................. 55 6.5. Consultas a la Base de datos. .................................................................................................. 58 6.5.1. Ejemplo de consulta a la base de datos. .......................................................................... 58 6.5.2. Consulta de inicio de sesión mediante comportamiento de servidor............................... 60 7. SEGURIDAD POR VPN. ...................................................................................................... 64 Jair Iván Piñones García Página 5 Sistema Administrativo De Elecciones “SADE” 8. ANEXOS .................................................................................................................................. 68 8.1. Pantallas y código. .................................................................................................................. 68 8.1.1. Código de la hoja de estilos. ............................................................................................. 68 8.1.2. INICIO (INDEX) .................................................................................................................. 70 8.1.3. TIPO DE USUARIO ............................................................................................................. 73 8.1.4. ELECCIONES ACTIVAS. ...................................................................................................... 77 8.1.5. VOTACIONES..................................................................................................................... 82 8.1.6. VOTO REALIZADO ............................................................................................................. 90 8.1.7. VOTO REGISTRADO. ......................................................................................................... 94 8.1.8. MENU ADMINISTRADORES. ............................................................................................. 98 8.1.9. INGRESAR CANDIDATO................................................................................................... 102 8.1.10. CONSULTAS DE ESTADOS. ............................................................................................ 114 8.1.11. JORNADA ELECTORAL................................................................................................... 119 8.1.12. RESULTADOS. ............................................................................................................... 126 9. Referencias ........................................................................................................................129 Jair Iván Piñones García Página 6 Sistema Administrativo De Elecciones “SADE” 1. INTRODUCCIÓN 1.1. Objetivo General. Desarrollar una aplicación disponible en Internet manejadora de bases de datos que administre una jornada electoral el cual realizará el escrutinio de forma automática y los resultados se muestren en tiempo real. 1.2. 1.3. Objetivos Particulares. Crear un sistema de cómputo que funcione en una Intranet y/o Internet. Aplicar una metodología de desarrollo de sistemas de cómputo con bases de datos. Problemática En la actualidad, la elección de los representantes de cargos públicos de gobierno en México se lleva a cabo mediante un proceso electoral en el cual los votantes sufragan por un candidato perteneciente a un partido político. El proceso electoral federal es organizado por el Instituto Federal Electoral (IFE) que es un organismo autónomo organizado por un consejo ciudadano que no responde a los intereses de ningún partido político. La jornada electoral, es un periodo en el cual se realiza la parte más importante de todo el proceso electoral, que es cuando la población elige a sus representantes en un tiempo determinado y se cuentan los sufragios que se realizaron a lo largo de la jornada, se registran los resultados y se dan a conocer mediante un sistema de resultados preliminares (PREP) los posibles resultados del proceso electoral. La problemática de este sistema es que todo se lleva a cabo de manera manual, tanto el registro de los electores, de actas de resultados y hasta el conteo de sufragios. Por esta razón se necesitan demasiados recursos humanos (21,500 funcionarios de casilla aproximadamente) para la organización de una jornada electoral en las diferentes localidades que integran nuestro país. Ante esta situación siempre puede existir el error humano ya sea en el conteo o en el registro de los resultados en la documentación otorgada por el IFE. Además de estos recursos humanos, también se requieren recursos Materiales como papel para expedir las boletas electorales y las actas para la publicación de resultados, plumones, crayones, tinta, urnas, mamparas, mesas para los funcionarios de casilla, mesas de mamparas y lista nominal. Jair Iván Piñones García Página 7 Sistema Administrativo De Elecciones “SADE” Para realizar esta jornada electoral se requieren recursos financieros que aportamos todos los mexicanos. Según la Fundación Internacional para Sistemas Electorales México es el país donde más caro nos cuesta cada voto: 17.24 dólares por votante. Este cálculo se basa en la suma del total de recursos públicos destinados a todos los partidos políticos, dividido por el número de votantes. Siendo México el país con el proceso electoral más caro de Latinoamérica. Figura 1 Grafica de los costos para el proceso electoral por país de América Latina. 1.4. Justificación Surge de la necesidad de crear un sistema electoral en México el cual administre la jornada electoral de una manera automática y en tiempo real. Para realizar una jornada electoral, se necesitan muchos recursos, tanto materiales como humanos y por lo tanto financieros que se podrían ahorrar con el uso de este sistema electoral digital. El sistema electoral mexicano, carece de seguridad y es fácil de manipular y tiende mucho a errores humanos ya que el escrutinio de los votos se lleva a cabo de manera manual y la hoja para el cómputo de los resultados preliminares se llena a mano. El Internet y las computadoras nos proporcionan todo lo necesario para llevar a cabo una jornada electoral completa de manera exitosa con un sistema que administre dicha jornada y que además se puedan consultar los resultados conforme los electores realicen su voto en las casillas, proporcionando seguridad y confidencialidad al elector al hacer efectivo su voto. Es urgente realizar un sistema electoral que reciba el sufragio y realice el escrutinio de estos y a su vez, conforme avance la jornada, muestre los resultados de cualquier área que sea consultada, qué sea administrado solo por las personas necesarias y utilizado por los electores de una manera Jair Iván Piñones García Página 8 Sistema Administrativo De Elecciones “SADE” fácil e intuitiva y que mejor que desarrollarlo con un sistema de información como servicio WEB disponible en Internet. 1.5. Propuesta de Solución. Una Reforma Electoral describe el proceso de introducir sistemas electorales más justos y democráticos donde estos no existen o mejorar la efectividad y transparencia de los sistemas existentes. La propuesta es diseñar un sistema electoral que conectado a la base de datos del padrón electoral, los votantes sufraguen por medio de una página de Internet que estará disponible en las casillas electrónicas. Este sistema realizará el escrutinio automáticamente y en tiempo real, lo que permitirá a todos los ciudadanos consultar los resultados desde el primer instante en que se comiencen a realizar los votos. Con este sistema se ahorraría muchos recursos financieros y materiales, además de que se salvarían muchos árboles porque no se necesitarían imprimir las boletas, ni las actas de escrutinio y cómputo. Jair Iván Piñones García Página 9 Sistema Administrativo De Elecciones “SADE” 2. ESTADO DEL ARTE 2.1. El sistema electoral Actual en México. Una elección es un proceso de toma de decisiones en el cual los ciudadanos elegimos democráticamente a un candidato de determinado partido político el cual actúa como nuestro representante en el sistema gubernamental. A esto se le conoce como proceso electoral. La forma de organización política del Estado mexicano es la de una república representativa, democrática y federal, integrada por 31 estados y un Distrito Federal (ciudad de México), sede de los poderes federales. En total se conforma el país por 32 entidades que a su vez y para poder organizar las elecciones federales también se divide en circunscripciones (5), Distritos (300), Municipios (2,444) y Secciones (64,938). Tiene como base el principio de división de competencias entre los poderes Ejecutivo, Legislativo y Judicial como instancias diferenciadas de autoridad cuyas atribuciones se encuentran jurídicamente reguladas y delimitadas en la constitución política de los Estados Unidos Mexicanos. Para el ejercicio del poder, el Ejecutivo tiene carácter unitario, el de la federación se deposita en el presidente de la República y el de cada uno de los 31 estados en el gobernador y el del Distrito Federal en el jefe de Gobierno. Todos ellos sirven un periodo de seis años y no pueden ser reelegidos. El Poder Legislativo Federal se deposita en el Congreso de la Unión, integrado por una Cámara de Diputados y una Cámara de Senadores. La Cámara de Diputados se conforma por un total de 500 representantes, todos ellos electos para un periodo de tres años y sólo pueden ser reelegidos después de un periodo intermedio. La Cámara de Senadores se integra por un total de 128 miembros, todos ellos electos para un periodo de seis años y, al igual que los diputados, sólo pueden ser reelegidos después de un periodo intermedio. El Poder Judicial de la Federación se deposita en la Suprema Corte de Justicia de la Nación, la cual se integra por 11 ministros designados por el voto de las dos terceras partes de los miembros del senado, a propuesta del presidente de la república, para servir un periodo de 15 años. El Poder Judicial de las 32 entidades federativas se deposita en su respectivo Tribunal Superior de Justicia. La Constitución reconoce que la vía electoral es la única jurídicamente válida y legítima para la integración y renovación de los Poderes Ejecutivo y Legislativo de la Federación, así como también de las entidades federativas y de los ayuntamientos. El poder Ejecutivo tiene carácter unitario y se deposita en el Presidente de los Estados Unidos Mexicanos. Es elegido por votación directa, sufragio universal y el principio de mayoría relativa para servir un periodo de seis años. El poder Legislativo, se deposita en el Congreso de la Unión integrado por la Cámara de Diputados y la Cámara de Senadores. La Cámara de Diputados se integra por 500 representantes que se renuevan cada 3 años. De estos 500 diputados, 300 son elegidos por el principio de mayoría relativa equivalente al número de distritos electorales, en tanto que los otros 200 lo son por el Jair Iván Piñones García Página 10 Sistema Administrativo De Elecciones “SADE” principio de representación Proporcional mediante el sistema de Listas Regionales votadas en 5 circunscripciones plurinominales (40 por circunscripción). La Cámara de Senadores se integra por un total de 128 miembros. En cada una de las 32 entidades federativas se eligen tres senadores. Para estos efectos, los partidos políticos deben registrar una lista con dos fórmulas de candidatos. Dos de los escaños se asignan por el principio de mayoría relativa, es decir, le corresponden al partido que haya obtenido el mayor número de votos, en tanto que el tercero se asigna por el principio de primera minoría, esto es, al partido que haya obtenido la segunda mayor votación. Los 32 senadores restantes son elegidos por el principio de representación proporcional, mediante el sistema de listas votadas en una sola circunscripción plurinominal nacional. Para su asignación, la ley dispone que se utilice la fórmula de proporcionalidad pura (cociente natural y resto mayor). Principio de Mayoría Relativa: El ganador es el que obtiene mayor número de votos. Principio de Representación proporcional: Es reducir las disparidades entre el porcentaje de la votación nacional obtenida por un partido y los escaños parlamentarios que le corresponden: por ejemplo, si un partido grande gana 40% de los votos debería obtener aproximadamente el 40% de los escaños y si un partido pequeño gana 10% de los votos debería también conquistar el 10% de los escaños parlamentarios. Para esto se considera una lista de candidatos regional para conseguir una mejor proporcionalidad. Jair Iván Piñones García Página 11 Sistema Administrativo De Elecciones “SADE” 2.2. Elecciones Electrónicas Es una expresión que comprende varios tipos de votación, que abarca tanto modos electrónicos de emitir votos como medios electrónicos de contar los votos. Las tecnologías para el voto electrónico pueden incluir tarjetas perforadas, sistemas de votación mediante escáneres ópticos y casillas de votación especializados. También puede referirse a la transmisión de boletas y votos por vía telefónica, redes de computación privadas o por la Internet. Las tecnologías del voto electrónico pueden acelerar el conteo de los votos y proveer una mejor accesibilidad para los votantes con algún tipo de discapacidad. Sin embargo existen controversias, acerca de que el voto electrónico, puede facilitar el fraude electoral o la violación del secreto de sufragio. Los sistemas de votación electrónica para electorados han estado en uso desde 1960 cuando empezaron a usarse las tarjetas perforadas. Los más recientes sistemas de escaneo óptico de votos permiten que un ordenador compute marcas hechas por los votantes en boletas. En Brasil los votantes usan en todas las elecciones máquinas de votar DRE que recogen y cuentan los votos en una sola máquina, como también sucede en gran escala en la India, Venezuela y los Estados Unidos. También hay sistemas híbridos que incluyen aparatos electrónicos de marcado de boletas (normalmente sistemas de digitación sobre la pantalla similares a un DRE) u otras tecnologías de asistencia para imprimir una boleta de papel verificable por el votante y el uso posterior de una máquina distinta para la tabulación electrónica. Asimismo, algunos países han implementado la votación por Internet, que es una modalidad del voto a distancia. El voto por Internet ha cobrado popularidad y ha sido usado para elecciones gubernativas y referéndums en el Reino Unido, Estonia y Suiza, así como también en elecciones municipales en Canadá y elecciones partidarias primarias en los Estados Unidos y Francia. 2.2.1. Sistemas de Votación DRE de Red Pública Estos sistemas usan boletas electrónicas y transmiten los datos de la votación desde su lugar de emisión a otro lugar a través de la red pública. Esto puede ser tanto por Internet como por vía telefónica. Los sistemas de votación DRE de red pública pueden utilizar tanto el conteo en el lugar de emisión del voto como en la oficina central. El método de conteo en la oficina central tabula en una locación central los votos emitidos en múltiples lugares de votación. 2.2.2. Sistemas de Votación por Internet El voto por internet puede usar lugares remotos o puede utilizar los tradicionales con casillas computarizadas conectadas a Internet. Algunas organizaciones usan Internet para elegir ejecutivos o miembros de directivos así como para otros tipos de elecciones. La votación por Internet ha sido utilizada privadamente en algunas naciones y públicamente en los Estados Unidos, el Reino Unido Jair Iván Piñones García Página 12 Sistema Administrativo De Elecciones “SADE” (UK), Irlanda, Suiza y Estonia. En Suiza, los votantes son provistos de contraseñas, a través del servicio postal, para acceder a la boleta. La mayoría de los votantes en Estonia pueden emitir sus votos en elecciones locales y parlamentarias, si desean hacerlo, a través de Internet, por cuanto la mayoría de los inscriptos en los padrones tienen acceso a un sistema de voto electrónico; éste es el desarrollo más opulento en países de la Unión Europea. Se hizo posible porque la mayoría de los estonios tienen una tarjeta de identidad nacional equipada con un microprocesador legible por computadora que pueden utilizar para acceder a la elección en red. Los votantes sólo necesitan una computadora, un lector electrónico de tarjetas, su tarjeta de identidad y su clave, y así votar desde cualquier rincón del mundo. Los votos electrónicos estonios sólo pueden emitirse durante los días de votación anticipados. El día mismo de la elección la gente debe dirigirse a los puestos de votación y llenar una boleta de papel. Los sistemas de votación electrónica pueden usar boletas electrónicas para almacenar votos en memorias de computación. Los sistemas que las usan con exclusividad son llamados sistemas de votación DRE. Cuando se usan boletas electrónicas no se corre el riesgo de que se agote el suministro de boletas. Adicionalmente, estas boletas electrónicas hacen innecesario imprimir boletas de papel, que tiene un costo significativo. Cuando se administran elecciones en las cuales las boletas se ofrecen en múltiples idiomas (en algunas áreas de los Estados Unidos, las elecciones públicas deben contemplar esto según la Ley de Derechos Electorales Nacional de 1965), las boletas electrónicas se pueden programar para proveer boletas en múltiples idiomas para una sola máquina. La ventaja con relación a boletas en lenguajes diferentes luce como única del voto electrónico. Por ejemplo, la situación demográfica del condado de King, Washington, les requiere bajo la ley de elecciones federales de los Estados Unidos proveer acceso a boletas en idioma chino. Con cualquier tipo de boleta de papel, el condado tiene que decidir cuántas boletas imprimir en idioma chino, cuántas tener disponibles para cada lugar de votación, etc. Las máquinas de tarjetas perforadas y las de escaneo óptico no son completamente accesibles para los ciegos o discapacitados visuales y las máquinas de palancas pueden ser dificultosas para votantes con movilidad y fortaleza limitadas. Las máquinas electrónicas pueden usar auriculares, sorbedores y sopladores, pedales, manivelas y otros artificios de tecnología adaptativa para proveer la accesibilidad necesaria. Algunas organizaciones, como la Verified Voting Foundation han criticado la accesibilidad de las máquinas de voto electrónico y proponen alternativas. Algunos votantes discapacitados (incluyendo los discapacitados visuales) podrían usar una boleta táctil, sistema de boletas que usa marcadores físicos para indicar a dónde se debería hacer una marca, para votar con una boleta de papel secreta. Estas boletas pueden estar diseñadas idénticamente a aquéllas usadas por otros votantes. Sin embargo, otros votantes discapacitados (incluyendo votantes con discapacidades de destreza) podrían no ser hábiles para usar estas boletas. Jair Iván Piñones García Página 13 Sistema Administrativo De Elecciones “SADE” 2.2.3. Problemas que se han presentado Fairfax County, Virginia, 4 de noviembre de 2003. Las máquinas salieron del sistema, saturaron los módems en los sistemas de votación cuando 953 máquinas de votar llamaron simultáneamente para informar resultados, produciendo un incidente de denegación de servicio en la elección. El 50% de los precintos no pudieron informar resultados hasta el día siguiente. También, algunos votantes se quejaron de que cuando indicaban que querían votar por determinado candidato, el indicador correspondiente a ese candidato se borraba poco después. Si no se hubieran dado cuenta, su voto por ese candidato no hubiera sido registrado; un número no conocido de votantes fueron afectados por esto. El sistema de votación Premier Election Solutions (antes Diebold Election Systems) TSx descalificó a muchos votantes en los condados de Alameda y San Diego durante la elección presidencial primaria del 2 de marzo de 2004, a causa de tarjetas de votación cuyos códigos no funcionaban. El 30 de abril el secretario de estado Kevin Shelley retiró la certificación de todas las máquinas de votación de pantallas de contacto y recomendó la incriminación penal de Diebold Election Systems. El Fiscal General de California decidió en contra de la incriminación penal, pero a continuación se sumó una demanda legal contra Diebold por reclamos fraudulentos hechos a oficiales de la elección. Diebold arregló esa demanda legal pagando $2.6 millones. El 17 de febrero de 2006 el Secretario de Estado de California Bruce McPherson luego certificó nuevamente a la máquina de Diebold Election Systems DRE y al Sistema de Votación por Escaneo Óptico. En el condado de Napa, California, el 2 de marzo de 2004, un escáner de sensor de marcas mal calibrado no registró 6,692 votos de boletas a distancia. Luego de la elección presidencial de los Estados Unidos de 2004 hubo alegaciones de irregularidades en los datos y fallas sistemáticas que podrían haber afectado el resultado tanto de las elecciones presidenciales como locales. Ver: Voting machine problems in the 2004 United States presidential election El 30 de octubre de 2006 el ministro Holandés del Interior retiró la licencia de 1187 máquinas de votar del fabricante, cerca del 10% del número total a ser usado, porque el Servicio de inteligencia Holandés demostró que se podía "escuchar" los votos desde una distancia de hasta 40 metros usando el dispositivo "Van Eck phreaking". Las elecciones Nacionales debían realizarse 24 días después de esta decisión. La decisión fue forzada por una organización de base Holandesa llamada wijvertrouwenstemcomputersniet que se traduce como "no confiamos en las computadoras de votación". Problemas en las elecciones generales de Estados Unidos de 2006: o Durante las primeras horas de la elección en Miami, Hollywood y Fort Lauderdale, Florida, en octubre de 2006 tres votos que intentaban ser registrados para candidatos demócratas fueron mostrados como hechos para los Republicanos. Los oficiales de la elección lo atribuyeron a errores de calibración en el procedimiento táctil de la pantalla del sistema de votación. o En Pennsylvania, un error de programación de computadoras forzó a algunos a emitir boletas de votación de papel. En Indiana, 175 precintos también acudieron al Jair Iván Piñones García Página 14 Sistema Administrativo De Elecciones “SADE” papel. Los condados en esos estados también extendieron los horarios de votación para resolver las demoras. o Un archivo de cerca de 1000 informes de incidentes de primera y segunda mano hechos a una línea roja no partidaria que operaba el día de las elecciones parciales del 7 de noviembre, así como informes de noticias. En agosto 1 de 2001 se documentaron instancias de tecnología defectuosa y temas de seguridad en el Centro Brennan de la Escuela de Derecho de Nueva York. La Escuela de Derecho de la Universidad de Nueva York emitió un informe con más de 60 ejemplos de fallas de máquinas electrónicas de votación en 26 estados en 2004 y 2006. Los ejemplos incluían boletas en lengua española que fueron emitidos por votantes pero no contados en Sacramento en 2004. Revisión completa de los sistemas de votación del Secretario de Estado de Califormia: o En mayo de 2007, la Secretaria de Estado de California Debra Bowen, comprometió a expertos en seguridad de computadoras incluyendo a la Universidad de California a efectuar evaluaciones del código fuente del sistema de votación y dispuso de "equipos rojos" que operaban escenarios de "peor caso posible" en el Día de la Elección con el fin de identificar puntos vulnerables, adulteraciones o errores. El TTBR también incluyó una revisión completa de la documentación de los fabricantes así como también una revisión de los elementos de accesibilidad y requerimientos de lenguaje alternativos. o Los resultados finales de los ensayos fueron emitidos en cuatro resoluciones detalladas del Secretario de Estado el 3 de agosto de 2007 (Para Diebold Election Systems, Hart InterCivic, Sequoia Voting Systems y Elections Systems and Software, Inc.) y actualizados el 25 de octubre de 2007, para los sistemas de votación de Diebold y Sequoia. o El 3 de Agosto de 2007, Bowen retiró la certificación de máquinas que fueron probadas en su revisión de arriba abajo incluyendo la máquina ES&S InkaVote, que no estuvo incluida en la revisión porque la compañía la sometió a la prueba en forma extemporánea. El informe emitido el 27 de julio de 2007 fue llevado a cabo por el "equipo rojo" de expertos que procuraban detectar los niveles de vulnerabilidad tecnológica. El 2 de agosto de 2007, otro informe fue emitido por un equipo de revisión de código fuente para detectar fallas en el código fuente de los sistemas de votación. Ambos informes encontraron que tres de los sistemas probados quedaron muy atrás de los requerimientos mínimos especificados en los Lineamientos Voluntarios de Sistemas de Votación de 2005 (VVSG, por sus siglas en inglés). Algunos de los sitemas probados fueron recertificados condicionalmente con la imposición de nuevos requerimientos estrictos de seguridad. Las compañías en cuestión tenían plazo hasta las Elecciones Primarias Presidenciales de California de febrero de 2008 para resolver sus problemas de seguridad y asegurar que los resultados de la elección puedan ser auditados minuciosamente. Jair Iván Piñones García Página 15 Sistema Administrativo De Elecciones “SADE” El Sistema de Votación Premier Election Solutions, (antes Diebold Election Systems) AccuVote-TSx fue estudiado por un grupo de científicos informáticos de la Universidad de Princeton en 2006. Sus resultados mostraron que al sistema AccuVote-TSx se le podía "instalar software de robo de software en menos de un minuto." Los científicos también dijeron que las máquinas pueden transmitirse virus de computación las unas a las otras "durante el desarrollo normal pre y post elección." Problemas en Brasil: en noviembre de 2009, el investigador Sergio Freitas da Silva, uno de los 32 especialistas convocados por el Tribunal Superior Electoral de Brasil para probar la seguridad de las urnas electrónicas de ese país, logró romper el secreto del sufragio con técnicas de lectura de radiofrecuencia y equipamiento muy económico. El experimento logró vulnerar el secreto del voto, aunque no apuntó a la manipulación del conteo. El sistema usado fueron las denominadas interferencias de Van Eck. Jair Iván Piñones García Página 16 Sistema Administrativo De Elecciones “SADE” 2.3. Democracia Digital (CIBERDEMOCRACIA) La democracia Digital se ha convertido en una de las alternativas existentes para revitalizar nuestro sistema electoral. Esta alternativa debe ser analizada en elementos tecnológicos pues debe tener un desarrollo e implementación suficientes para que permita la correcta utilización por la ciudadanía. El gran auge que tiene Internet como una nueva vía de comunicación, nos lleva a concebir a nuestra propia sociedad desde una nueva perspectiva pues ha provocado cambios técnicos, sociales y culturales muy importantes que nos encontramos ante una reinvención del entorno (Espacio – Tiempo dominado por lo electrónico, digital, virtual) que la Sociedad Informática ha denominado como Ciberespacio. El ciberespacio se refiere a los objetos e identidades que existen dentro del Internet, así que metafóricamente una página web se encuentra en el ciberespacio. Llegamos a este ciberespacio gracias al desarrollo tecnológico de las últimas décadas que nos ayuda a adentrarnos en el mundo digital y con una sociedad digitalizada eventos como los deportes, las elecciones y el resto de la recepción de la información será recibida en tiempo real. La interactividad con el ciberespacio y los sistemas de información en la web permite crear lazos estrechos entre los ciudadanos, así como que estos establezcan sus propias vías de comunicación. De igual forma, permite seleccionar la información, controlarla en su recepción, buscar nuevas fuentes, etc. En su aplicación política las nuevas tecnologías posibilitan, en el ámbito de lo que se ha denominado como ciberdemocracia, la votación electrónica de los representantes, la participación y apoyo en las decisiones en temas de política. Sin embargo nos vamos a centrar en el aspecto de la ciberdemocracia de la votación electrónica de los representantes. Un primer paso hacia la ciberdemocracia es la interactividad En este sentido debemos destacar cómo “Las comunicaciones interactivas ofrecen múltiples posibilidades y son los agentes sociales, las administraciones y los representantes políticos quienes pueden dirigirlas hacia el incremento del bienestar de los ciudadanos y el enriquecimiento de la práctica democrática” Un segundo paso son las relaciones interactivas entre ciudadano – administración (E- Administradores), ante este punto el ciudadano parece mostrarse muy interesado por las aplicaciones interactivas, especialmente prestados a través de los sistemas de información web como puede ser el pago de la tenencia vehicular, pago de infracciones, comunicación por medio de correo electrónico, manejo de redes sociales, pago de impuestos y tasas. Pero cierta parte de la población muestra rechazo hacia las nuevas tecnologías pues el desconocimiento entre la población acerca de estos sistemas de información es todavía alto. Al menos en relación a una utilización correcta, además de que las medidas de seguridad están siendo aún perfeccionadas. Sin embargo existen muchas ventajas que se derivan de estos servicios. Jair Iván Piñones García Página 17 Sistema Administrativo De Elecciones “SADE” No hay limitaciones horarias (siempre On – Line) Rapidez, sin formarse en una fila, ni problemas burocráticos. Acceso Directo a la información. Herramientas Interactivas. Efectividad en bajos costos. Un detalle importante acerca de esta ciberdemocracia es la seguridad tanto en el Sistema como en la Red y no sólo para la realización de comercio por Internet o para las relaciones de Administración, si no para las actividades participativas de los ciudadanos dentro del ámbito político. En las elecciones federales del 5 de julio de 2009 en algunas secciones del Distrito Federal se instalaron casillas electrónicas dando a México su primera experiencia con esta nueva ciberdemocracia. Dando la posibilidad a considerarse el voto por Internet y claro que luchando con las dificultades de los Hackers, Crackers, suplantación de Identidad, etc. pues este tipo de prácticas elimina numerosas barreras (costos electorales, lentitud en el escrutinio, caída del sistema, la quema de urnas o la inserción de boletas en las urnas a favor de cierto candidato). De esta forma se tiene una posibilidad para los ciudadanos de recuperar el concepto de Democracia, hoy en cierto modo deformado por las actividades ilícitas descubiertas a lo largo de la historia. 2.3.1 Desventajas Los posibles beneficios que se podrían obtener con la votación por Internet deberían contrastarse con los riesgos que implica. Todas las elecciones sin importar los medios con que se conduzcan, deberían cumplir íntegramente con los mismos principios de secrecía, anonimato, justicia, precisión y transparencia. Todos los sistemas de votación ya sea que usen lápiz y papel o cualquier otro método, deberían garantizar que los electores se puedan identificar acertadamente y que los votos se escruten de forma precisa. Todos los sistemas de votación que solamente sean electrónicos deberían considerar la necesidad de salvaguardar la precisión del escrutinio de votos, a pesar de la falta de representación física del voto. Además de estas preocupaciones, la votación por internet está sujeta a otros riesgos por la inseguridad que tienen las máquinas de los usuarios y de la conexión de red que se usa. El sistema operativo más utilizado en México es Microsoft Windows, pues ofrece al usuario una interfaz fácil de utilizar. Pero este sistema operativo también es de los más atacados por virus, gusanos, “Caballos de Troya” o cualquier otro software denominado “Malware”. Se han realizado esfuerzos para proteger el sistema operativo para evitar que aplicaciones maliciosas ejecuten acciones indeseadas. Este tipo de aplicaciones pone en duda la confiabilidad del proceso de elección con un sistema de votación electrónica por internet. Jair Iván Piñones García Página 18 Sistema Administrativo De Elecciones “SADE” Además los sistemas de votación electrónica por internet no están exentos de ataques de Hackers que puedan, por medio de fuerza bruta, acceder al sistema y modificar el resultado de la votación, beneficiando a algún candidato de su preferencia o simplemente tirar el sistema. Los sistemas de votación por internet enfrentan grandes dificultades, pues están fuera de control de las autoridades electorales. Internet al ser una red pública, cualquier persona puede tener acceso al sistema desde cualquier parte del mundo y generar un ataque desde su ubicación lo que es un gran problema, pues las autoridades solo tienen jurisdicción en el territorio que les compete. La mayor desventaja es que en dichos sistemas no existe una plena confianza del correcto funcionamiento de un sistema electrónico. A menos que la arquitectura del Internet o de las computadoras evolucione a un nivel superior de seguridad y control, esta confianza seguirá puesta en duda. Jair Iván Piñones García Página 19 Sistema Administrativo De Elecciones “SADE” 2.4. Sistemas Electrónicos Electorales en México. En México, la informática vinculada a los procesos electorales se remonta al XXVII Congreso de los Estados Unidos Mexicanos, cuando aprobó la Ley para la Elección de Poderes Federales, la cual fue promulgada el día 1º de julio de 1918, por Venustiano Carranza, Presidente Constitucional, entrando en vigor el mismo día de su publicación. Este ordenamiento reguló la renovación, por elecciones ordinarias, de los Poderes Legislativo y Ejecutivo de la Unión, y precisó que dichas elecciones se celebrarían en los años terminados en cero o cifra par, el primer domingo de julio, (Constitución de 1917 –artículos 51 a 70- Sección I, Capítulo II, Título Tercero “De la elección e instalación del Congreso"). Algo que es sorpresivamente cautivador, si se toma en cuenta el pensamiento de los legisladores de esa época, es el contenido del artículo 58, que está como elegante “parche” en el telar de este ordenamiento: “ARTICULO 58. La votación podrá recogerse por medio de máquinas automáticas, siempre que llenen los requisitos siguientes: I. Que pueda colocarse en lugar visible el disco de color que sirva de distintivo al partido y los nombres de los candidatos propuestos; II. Que automáticamente marque el número total de votantes y los votos que cada candidato obtenga; III. Que tenga espacios libres donde los ciudadanos puedan escribir los nombres de los candidatos cuando voten por alguno no registrado; IV. Que pueda conservarse el secreto del voto; V. Que el registro total señalado automáticamente sea visible e igual a las sumas parciales de los votos obtenidos por cada candidato; VI. Que los electores de la sección respectiva conozcan su manejo”. Actualmente solo contamos con un Programa de Resultados Electorales Preliminares (PREP) y una casilla electrónica que cuenta con una maquina contabilizadora de votos que no tiene conexión a internet. El PREP cuenta todos los votos de la mayoría de las casillas a partir de las actas de escrutinio que se pegan a las urnas electorales. La página oficial del PREP publica los resultados que se van obteniendo para que los ciudadanos estén enterados del resultado aproximado de las votaciones. Sin embargo estos resultados carecen de validez oficial para determinar el ganador de los comicios. Jair Iván Piñones García Página 20 Sistema Administrativo De Elecciones “SADE” 3. PLATAFORMA DE DESARROLLO 3.1. Marco de trabajo en Adobe DreamWeaver CS5 Adobe Dreamweaver es una aplicación enfocada a la construcción y edición de sitios y aplicaciones web basadas en estándares. Soporta diversos lenguajes de internet como HTML, PHP y además es compatible para el manejo de hojas de estilo CSS. Es fácil de utilizar y es muy personalizable, lo que hace que la mayoría de los diseñadores web lo elijan para el desarrollo de sus sistemas. La compatibilidad se extiende al uso de imágenes, sonidos y animaciones flash, que en conjunto hacen una página más interactiva con el usuario. Se eligió esta plataforma de desarrollo pues cuenta con el manejo del lenguaje PHP, Java Script y C# además del uso de plantillas con hojas de estilo (CSS) y uso de bases de datos ya sea con MYSQL, ACCES, etc. Dreamweaver realiza una conexión directa con el servidor web que nos proporciona el “Host” o alojamiento de la página y además crea un servidor local para respaldar la página completa. Cuando la página se sube al servidor y esta se encuentre disponible en Internet, Dreamweaver permite realizar cambios en las páginas guardadas en el servidor y realiza los cambios necesarios en tiempo real. Dreamweaver tiene las herramientas necesarias para desarrollar un sistema dinámico y la facilidad para manejar cambios en caso de que sea necesario un mantenimiento correctivo a la página web. Hojas de estilos CSS. Dreamweaver cuenta con herramientas para diseñar tu propia hoja de estilos y aplicar reglas de estilo, como márgenes, títulos, subtítulos, tablas, estilo de fuente, colores, imágenes, división de la página, encabezados, pies de página, etc. lo que le da a las páginas web una mejor presentación y facilidad al manejar controles y ubicarlos en los lugares deseados. Conexión con manejadores de bases de datos. Dreamweaver tiene la capacidad de establecer una conexión directa con los manejadores de bases de datos más comunes. Cuenta con una herramienta que genera el código de la consulta deseada automáticamente solo con introducir las palabras clave de la consulta. Además puede realizar diversos comportamientos de servidor como agregar a la página un sistema de identificación, restringir el acceso a ciertas páginas si los usuarios no están identificados, crear varios tipos de cuentas de usuario y otorgarles privilegios de acceso, así como actualizar, agregar y/o eliminar registros de la base de datos a través de formularios. El código de todos estos comportamientos de servidor también es generado automáticamente y puede ser modificado dependiendo de las necesidades del sistema. Jair Iván Piñones García Página 21 Sistema Administrativo De Elecciones “SADE” Modos de Trabajo. En Dreamweaver se puede trabajar en modo de diseñardor, en modo de programador o ambos. Si se trabaja en ambos modos se puede observar si se ingresa el código de algún control en la ventana de código, se puede observar en la ventana de diseño el control que se generó con código y por el contrario, si se inserta el control desde el menú insertar en la ventana de diseño, automáticamente aparece el código en la ventana correspondiente. Trabajar en esta modalidad es muy cómodo para observar los cambios realizados en ambas ventanas. Requerimientos mínimos del sistema 3.2. Procesador Intel® Pentium® 4 o AMD Athlon® de 64 bits. Microsoft® Windows® XP con Service Pack 2 (se recomienda Service Pack 3); Windows Vista® Home Premium, Business, Ultimate o Enterprise con Service Pack 1; o Windows 7. 512 MB de RAM. 1 GB de espacio disponible en el disco duro para la instalación; se necesita espacio libre adicional durante la instalación (no se puede instalar en dispositivos de almacenamiento extraíbles basados en flash). Resolución de 1.280 × 800 con tarjeta de vídeo de 16 bits. Unidad de DVD-ROM. Conexión a Internet de banda ancha necesaria para los servicios en línea Lenguaje PHP Es un lenguaje de programación interpretado, diseñado para la creación de páginas web dinámicas. PHP es acrónimo de PHP HYPERTEXT PRE – PROCESSOR. Puede ser desplegado en la mayoría de los servidores web y en la mayoría de los Sistemas Operativos y Plataformas sin costo alguno. El gran parecido que posee PHP con los lenguajes más comunes de programación estructurada, como C, permiten a la mayoría de los programadores crear aplicaciones complejas con una curva de aprendizaje muy corta. También les permite involucrarse con aplicaciones de contenido dinámico sin tener que aprender todo un nuevo grupo de funciones. Cuando el cliente hace una petición al servidor para que le envíe una página web, el servidor ejecuta el intérprete de PHP. Éste procesa el script solicitado que generará el contenido de manera dinámica (por ejemplo obteniendo información de una base de datos). El resultado es enviado por el intérprete al servidor, quien a su vez se lo envía al cliente. Mediante extensiones es también posible la generación de archivos PDF, Flash, así como imágenes en diferentes formatos. Permite la conexión a diferentes tipos de servidores de bases de datos tales como MySQL, Postgres, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird y SQLite. Jair Iván Piñones García Página 22 Sistema Administrativo De Elecciones “SADE” PHP también tiene la capacidad de ser ejecutado en la mayoría de los sistemas operativos, tales como UNIX (y de ese tipo, como Linux o Mac OS X) y Windows, y puede interactuar con los servidores de web más populares ya que existe en versión CGI, módulo para Apache, e ISAPI. 3.3. Hojas de estilos CSS CSS es acrónimo de CASCADING STYLE SHEETS, hojas de estilo en cascada. Es un lenguaje usado para definir la presentación de un documento estructurado escrito en HTML. Se usa CSS porque: Separa la estructura del diseño de presentación de la página. Control centralizado de la presentación del sitio. Se utiliza como una plantilla para el diseño del sitio web, dando la oportunidad de cambiar de plantilla cuando sea necesario. Son estandarizadas, por lo que se puede cambiar fácilmente de hoja de estilo para satisfacer el punto anterior. CSS proporciona tres caminos diferentes para aplicar las reglas de estilo a una página Web: 1. Una hoja de estilo externa, es una hoja de estilo que está almacenada en un archivo diferente al archivo donde se almacena el código HTML de la página Web. Esta es la manera de programar más potente, porque separa completamente las reglas de formateo para la página HTML de la estructura básica de la página. 2. Una hoja de estilo interna, que es una hoja de estilo que está incrustada dentro de un documento HTML. (Va a la derecha dentro del elemento <head>). De esta manera se obtiene el beneficio de separar la información del estilo, del código HTML propiamente dicho. Se puede optar por copiar la hoja de estilo incrustada de una página a otra, (esta posibilidad es difícil de ejecutar si se desea para guardar las copias sincronizadas). En general, la única vez que se usa una hoja de estilo interna, es cuando se quiere proporcionar alguna característica a una página Web en un simple fichero, por ejemplo, si se está enviando algo a la página web. 3. Un estilo en línea (inline), que es un método para insertar el lenguaje de estilo de página, directamente, dentro de una etiqueta HTML. Esta manera de proceder no es totalmente adecuada. El incrustar la descripción del formateo dentro del documento de la página Web, a nivel de código se convierte en una tarea larga, tediosa y poco elegante de resolver el problema de la programación de la página. Este modo de trabajo se podría usar de manera ocasional si se pretende aplicar un formateo con prisa, al vuelo. No es todo lo claro o estructurado que debería ser, pero funciona. Este es el método recomendado para maquetar correos electrónicos en HTML. Jair Iván Piñones García Página 23 Sistema Administrativo De Elecciones “SADE” 3.4. WAMP WAMP es el acrónimo usado para describir un sistema de infraestructura de internet que usa las siguientes herramientas: Windows, como sistema operativo; Apache, como servidor web; MySQL, como gestor de bases de datos; PHP (generalmente), Perl, o Python, como lenguajes de programación. El uso de un WAMP permite servir páginas html a internet, además de poder gestionar datos en ellas, al mismo tiempo un WAMP, proporciona lenguajes de programación para desarrollar aplicaciones web. Jair Iván Piñones García Página 24 Sistema Administrativo De Elecciones “SADE” 4. IMPLEMENTACION DEL SISTEMA. Para la implementación del sistema se llevo a cabo la metodología ADDIE. Analisis Diseño Evaluación Desarrollo Implementación Figura 2. Este modelo se eligió pues cumple con las etapas para la creación del prototipo. 4.1. Análisis Debido a todos los problemas presentados a lo largo de los capítulos 1 y 2 se llevo a cabo un profundo análisis en el cual se detectaron ciertos inconvenientes con el sistema electoral actual en México ya que es muy tardado realizar un proceso electoral y los recursos que se necesitan para llevarla a cabo exitosamente, son excesivos. Además se presento un inconveniente inesperado puesto que al solicitar la información acerca de los dispositivos electrónicos que se están desarrollando como la urna electrónica y el funcionamiento del PREP, resultó que esa información es confidencial y por lo tanto no es posible saber si el sistema SADE es compatible por lo menos con la urna electrónica. Sin embargo, el sistema SADE se desarrolló para que sea compatible desde los navegadores más comunes como MOZILLA FIREFOX, EXPLORER, OPERA, SAFARI, etc. Por la situación anterior y como no se trabajó con alguien que necesitase el sistema electoral, no es posible determinar los requerimientos ni los alcances del sistema, los tipos de usuarios y los privilegios con los que cuentan. Esto también fue un inconveniente pues el sistema electoral electrónico en México es necesario, desafortunadamente debido a lo delicado del tema de elecciones en México y los problemas que han ocurrido con los sistemas electorales anteriores, las instituciones encargadas de los proyectos sobre elecciones electrónicas cierran sus puertas para evitar el mal uso de la información y futuros ataques a su sistema. Jair Iván Piñones García Página 25 Sistema Administrativo De Elecciones “SADE” Se investigó sobre los proyectos de tesis en cuanto a elecciones electrónicas se refiere y existe poca información sobre el tema, además de que los pocos proyectos que hay, se basan en maquinas administradoras de la jornada y manejo de la información, pero nada sobre conexión a Internet, toda la información es manejada de forma local. El inconveniente con este tipo de maquinas es cuando se quieren analizar los resultados de todo el país o de ciertas áreas, pues la recolección de los datos se tendría que hacer de forma manual, que es precisamente lo que hace el PREP. Por las razones anteriores, es necesario preparar el sistema para que todo se haga de manera automática y lo más rápido posible. La manera más práctica de enlazar la decisión de los ciudadanos de todo un país es a través de Internet y también es la más rápida. Sin embargo, Internet tiene la fama de ser muy insegura, por lo que a seguridad se refiere, podemos dividir esta área del tema en dos: Seguridad por Software. Seguridad por Hardware. Seguridad por Software. SADE cuenta con los mecanismos de seguridad comunes en software. Estos mecanismos son implementados para asegurar la confidencialidad del voto en el sistema. Los mecanismos son los siguientes: Cifrado: Dreamweaver cuenta con algoritmos de cifrado para transportar los datos de un formulario a la base de datos. SADE cuenta con estos algoritmos en todas las páginas donde se requiera algún tipo de información. Control de Acceso: SADE tiene la capacidad de reconocer a los tipos de usuarios y limitar el acceso a la información gracias a un sistema de autentificación de usuarios. Integridad de Datos: Gracias a los controles “Spry” aseguramos que los datos tengan el formato solicitado por la base de datos para que estos no estén alterados. A pesar de tener este tipo de seguridad, no es posible certificar que el sistema no sufra un ataque externo y/o interno, puesto que todos estos mecanismos pueden ser evitados por personas que conozcan la información necesaria para romper la seguridad del sistema. Por estas razones se requiere también seguridad por Hardware. Seguridad por Hardware. Debido a que aun no se cuentan con algoritmos y métodos efectivos de alta seguridad en Software, debemos implementar un sistema de seguridad con Hardware. VPN (Virtual Private Network) En español, Red Privada Virtual, es una topología de red que permite realizar una extensión de la red local sobre una red pública no controlada como Internet. Jair Iván Piñones García Página 26 Sistema Administrativo De Elecciones “SADE” Las VPN nos permiten comunicarnos desde un sitio remoto con otros equipos pertenecientes a ellas utilizando como vinculo la infraestructura de Internet. Ventajas: Estar en cualquier lugar del mundo para conectarse a cualquier recurso de la red local como si se estuviera en ella. Integridad, confidencialidad y seguridad de datos. Reducen costos y son sencillas de usar. Su instalación es sencilla en cualquier PC. Los algoritmos de compresión optimizan el tráfico del usuario. Se evitan el alto costo de las actualizaciones y mantenimiento de PC's remotas. Se ahorran en costos de comunicaciones y en costes operacionales. Los trabajadores pueden acceder a los servicios de la compañía sin necesidad de llamadas. Una organización puede ofrecer servicios a sus socios mediante VPN´s, ya que éstas permiten acceso controlado y brindan un canal seguro para compartir la información de las organizaciones. En un extremo se encripta tráfico de salida, en otro extremo se decripta tráfico de entrada. Software puede correr en un hardware dedicado o en un PC con Linux, NetWare o Windows. Desventajas: Si se es infiltrada por intrusos, cuando la red no tiene el nivel de seguridad que requiere, las VPN resultan ser puertas traseras para los atacantes, quienes fácilmente se pueden infiltrar a los dispositivos de los usuarios. Requiere software en ambos extremos de la comunicación. Requiere disponibilidad de internet. A pesar de estas desventajas, aun así se tienen muchas más ventajas y es el método más seguro para proteger al sistema. 4.2. Diseño. Dentro de esta etapa de diseño existe una metodología solo para la creación del sitio web. En varias fases coincide con la metodología ADDIE. Se coloca aquí porque, para comenzar a diseñar un sitio web es necesario seguir la siguiente metodología: Jair Iván Piñones García Página 27 Sistema Administrativo De Elecciones “SADE” Fase 1 Análisis. Fase 5 Operación y Mantenimiento. Fase 2 Diseño. Fase 4 Implementación. Análisis Diseño Construcción Fase 3 Construcción. • Conocimiento del medio ambiente. • Análisis y Diagnostico del Sistema Actual. • Propuesta generál de solución. • Revisión de la propuesta de análisis. • Diseño preeliminar. • Diseño detallado. • Construcción del programa y/o modelos. • Desarrollo de procedimientos de usuario. • Pruebas y aceptación del sistema. • Preparación de la implementación. • Verificar condiciones de la implementación. Implementación • Proceso de problemas reportados. • Procesos de solicitudes de cambio. • Modificaciones al sistema. • Revisión y Evaluación del comportamiento. • Identificacion de necesidades. Operación y Mantenimiento Figura 3 Diagrama del diseño Jair Iván Piñones García Página 28 Sistema Administrativo De Elecciones “SADE” La etapa de análisis se encuentra detallada en el capítulo 2 por lo que no se retomará en este capítulo. Debido al tiempo escaso para el proyecto y a que es solo un prototipo, la fase 4 de implementación, es teórica, ya que aun no se implementa el sistema para trabajar en internet ni con VPN pues se requieren equipos especiales para levantar esta red privada virtual. Por obvias razones tampoco se llegó a la etapa de Operación y Mantenimiento. Sin embargo, se creó un ambiente para simular la implementación y la operación con un sistema llamado WAMP que, en general, prepara una PC para ser utilizada como servidor local e instala el lenguaje de administración PHP y el manejador de Base de datos MySQL. Diseño. Por la falta de información, el diseño se desarrolló mediante la experiencia propia de ser funcionario de casilla con el cargo de secretario en las elecciones para diputados federales del año 2008 y la poca información que el IFE proporciona en su página de Internet. Estos fueron los principales medios por los cuales se definió el objetivo del sistema y como es que va a realizar el escrutinio de los sufragios de manera automática y por regiones. El diseño se inició por proponer un mapa de sitio y las tablas de la base de datos. El mapa de sitio es el siguiente: 1) Usuarios Electores. a. Inicio. i. Realizar voto. ii. Voto realizado. iii. Voto ya registrado. iv. Sin actividad. 2) Usuarios Administradores. a. Inicio. b. Realizar voto. i. Voto realizado. ii. Voto ya registrado. c. Administrar jornada electoral. i. Altas. 1. Candidatos. 2. Partidos. ii. Bajas. 1. Candidatos 2. Partidos. iii. Jornada electoral. 1. Activar una elección. 3) Resultados. Jair Iván Piñones García Página 29 Sistema Administrativo De Elecciones “SADE” Descripción del sitio. El sitio web se divide en tres principales secciones: La presentación de la página web, la lógica y la conexión a la base de datos. Página web Lógica Bases de datos Figura 4. Division del sitio web Propuesta de presentación de la página web. Se propone un servicio web disponible en internet de acceso limitado por medio de un sistema de autentificación a 2 tipos diferentes de usuarios: los electores comunes y los administradores. Los electores comunes solo podrán acceder a las páginas del sistema que permiten hacer valido el sufragio; los administradores además de tener acceso a la votación, también tienen privilegios para gestionar la jornada electoral y las altas, bajas y consultas de la base de datos con respecto a lo que las elecciones se refiere. Jair Iván Piñones García Página 30 Sistema Administrativo De Elecciones “SADE” Diagrama de flujo del sitio web. Figura 5. Diagrama de flujo del sitio web Lógica. Esta lógica hace referencia a los lenguajes que se va a utilizar y al comportamiento que se propone para el servicio web. Jair Iván Piñones García Página 31 Sistema Administrativo De Elecciones “SADE” El lenguaje principal es HTML utilizando el lenguaje de programación PHP, pues todo el diseño físico es con lenguaje HTML y la lógica de programación es con PHP. El objetivo del sistema es administrar una jornada electoral y que dicha jornada sea lo más automatizada posible, es decir, que para los usuarios finales, el sistema sea muy fácil de utilizar y muy intuitivo. Para esto se requiere una automatización en todos los usuarios: 1. Filtro de usuario anónimo. Ningún usuario que no tenga una cuenta puede acceder al sistema. 2. Filtro de electores comunes y administradores. Utilizando niveles de usuario para definir a cual nivel pertenece cada uno. Solo existen dos: elector y administrador. 3. Cada usuario identificado tiene una sesión única y por lo tanto solo puede ver la información correspondiente a su sesión. 4. La información puede variar para los usuarios, por lo tanto, esta debe aparecer automáticamente a cada uno como le corresponda. 5. Aunque es un sistema automatizado, debe certificar que el voto de los usuarios sea libre y secreto. 6. Ningún usuario, sea elector o sea administrador, puede hacer votos múltiples por el mismo candidato. 7. Escrutinio de votos automático. México, debido a su amplio territorio, se divide en 5 circunscripciones, que a su vez se dividen en 32 estados (Contando el Distrito Federal) que a su vez se subdividen en municipios, distritos y localidades. Cuando el IFE hace un llamado a la población para elegir un representante, este puede ser Nacional, estatal o local. Para elegir al presidente de la republica, el llamado es Nacional y toda la población mexicana puede hacer valido su voto. Gana el candidato que tenga el mayor número de votos. Para los diputados, se eligen 500, 300 son por mayoría relativa (ganan los que consigan el mayor número de votos) y cada uno representa a la población de un distrito en particular, los otros 200 son por representación proporcional (dependiendo del número de votos que consiga cada partido es conforme se distribuyen las plazas, si cierto partido consigue el 20% de los votos, dicho partido consigue el 20% de las plazas correspondientes a su circunscripción y se dividen 40 plazas por circunscripción) y ese grupo representan a una circunscripción en particular. Para el senado, se eligen a 128 senadores, 2 por estado por mayoría relativa y los 64 restantes por representación proporcional. Para automatizar esto, se requiere que la información de cada diputado se indique en cada sesión de usuario que quiera votar dependiendo de a que regiones corresponda y que candidato le concierne, además de que el voto vaya dirigido al candidato de la región correcta. Jair Iván Piñones García Página 32 Sistema Administrativo De Elecciones “SADE” Para los resultados, se deben hacer los cálculos necesarios, pues los ganadores no siempre son los que consiguen el mayor número de votos, en el caso de representación proporcional, las plazas se dividen dependiendo los votos conseguidos por el partido en su región, quien tenga el mayor número de votos tiene mayor número de plazas pero no le corresponden todas. Con estos diferentes tipos de escrutinio se debe llevar a cabo una lógica operacional para mostrar los resultados correctos enlazando el candidato con su región, cargo público, partido al que pertenece y el número de votos que obtuvo, pero también con los electores a los que su región les corresponda dicho candidato. Base de datos. Para la base de datos se eligió el manejador MySQL pues tiene compatibilidad con PHP y la mayoría de los servidores web que proporcionan alojamiento. Para continuar con el diseño se propone el contenido de la base de datos para el control del sistema. Propuesta de las tablas de la base de datos. Electores. Nombre. Domicilio. Folio. Año de registro. Edad. Sexo. Clave de elector. CURP. Estado. Municipio. Estado. Municipio. Localidad. Sección. Emisión. Vigencia. ORC. Jair Iván Piñones García Candidatos. Nombre. Edad. Sexo. Clave elector. Partido político. Cargo público. Estado. Municipio. Distrito. Circunscripción. Id del partido. Partido Político. Id partido político. Nombre. Estado. Municipio. Distrito. Circunscripción. Elección Id elección. Circunscripción. Estado. Municipio. Distrito. Tipo de cargo. Tipo de cargo. Presidente de la republica. Diputados por mayoría relativa. Diputados por representación proporcional. Senadores por mayoría relativa. Senadores por representación proporcional. Página 33 Sistema Administrativo De Elecciones “SADE” 4.3. Desarrollo. Esta etapa de la metodología ADDIE coincide con la metodología seguida para el diseño que es la Construcción. 4.3.1. Construcción En base a la propuesta de diseño, se procede a construir el sitio web. Se inició por elegir el esqueleto de la página, es decir, la estructura del sitio en su forma general. Con la estructura de la página se crea la hoja de estilos CSS. La estructura de la página se conforma de un contenedor principal central, una barra lateral izquiérda, un encabezado y un pie de página. Figura 6. Estructura de la página Para establecer esta hoja de estilos, se crea un archivo nuevo en Dramweaver y se elije CSS, que genera un documento en blanco. Dentro de este documento se crean las clases que contendrán las reglas y divisiones de la página. Cada regla contiene ciertas características para determinados elementos de la página. Se eligen los tipos de letra, color, tamaño y estilos para los títulos, subtítulos, contenido, etc. y las divisiones de la página. Más información en el anexo. Ya declaradas las clases, en código HTML, se pueden utilizar el nombre de estas clases como etiquetas para hacer referencia a la división y/o el estilo que se desea utilizar. En este caso la hoja de estilos creada se llama “estilosforms.css”. Página de Inicio. Cuando se crea una página nueva, se debe hacer referencia a la hoja de estilos que se está utilizando, para poder ocupar los estilos de dicha hoja. Jair Iván Piñones García Página 34 Dentro del cuerpo de la página se crean las divisiones y se ocupan las clases por medio de etiquetas que se crearon en la hoja de estilos. La página de inicio queda estructurada con un contenedor principal donde se muestra el contenido dinámico de la página, una barra lateral donde se muestra el inicio de sesión y un menú de enlaces, el encabezado de la página que muestra el nombre del sistema y el pie de página. Figura 7. Diseño de la página de Inicio Teniendo la página de inicio ya con la estructura de la hoja de estilos, se puede trabajar sobre esta como plantilla para las demás páginas que se vayan creando. Prácticamente el encabezado, el pie de página y la barra lateral no sufren modificaciones en el contenido, todos los cambios se realizaran en la división del contenido principal. Así se diseñan todas las páginas propuestas en el mapa de sitio con las características que requiere cada una de ellas. Formularios. Todas las páginas por lo menos cuentan con un formulario. Los formularios se utilizan para insertar controles como cajas de texto, botones, etiquetas, etc. para trabajar con datos. Dependiendo del tipo de página, es el formulario que requiere para su labor. En el caso de las páginas de altas, se crea un formulario con las cajas de texto y etiquetas necesarias de los datos de por ejemplo, un candidato o un partido político. Estos datos deben ser los que requiera la base de datos en sus diferentes campos. Dentro de estos formularios existe también un botón que es el que realiza la acción deseada. Jair Iván Piñones García Página 35 Sistema Administrativo De Elecciones “SADE” Controles SPRY. Los controles SPRY sirven para tener un control sobre los datos que se van a solicitar en una página. Esto es muy útil cuando se trabaja con base de datos pues estos controles cuentan con filtros que indican si los datos que se requieren son inválidos, impidiendo enviar la información a otra ubicación. Hace una validación previa de los datos que ingresa un usuario para evitar que algún tipo de información incorrecta llegue a la base de datos al ser enviada la información. Los controles SPRY tienen varios estados pues son dinámicos, detectan los posibles errores que puede cometer un usuario al ingresar información solicitada, pero también detectan que el dato ingresado es correcto. Marca en color verde los datos correctos solicitados en el formulario y los incorrectos los marca en color rojo. Figura 8. Propiedades de los controles SPRY Se configuran todos los elementos de formulario que soliciten información del usuario para actualizar la base de datos o realizar algún tipo de modificación a esta. Con la elaboración de los contenidos y formularios de todas las páginas, se procede a instalar el servidor local y el manejador de la base de datos y a configurarlos en Dreamweaver para trabajar en paralelo con ellos. WAMP WAMP nos va a proporcionar de los servicios necesarios para trabajar con el sitio web de forma local. Al ejecutarse, crea un servidor apache con compatibilidad PHP y base de datos en MySQL, todos los servicios deben estar habilitados. Jair Iván Piñones García Página 36 Indicadores. Todos los servicios iniciados y ejecutándose. Solo 2 servicios iniciados y ejecutándose. Ningún servicio iniciado. Figura 9. WAMP Teniendo iniciados todos los servicios, entramos al servidor local (localhost) para gestionar las bases de datos. Jair Iván Piñones García Página 37 Sistema Administrativo De Elecciones “SADE” Figura 10. Ventana de configuracion de WAMP Dentro del servidor local, en el apartado phpMyAdmin se crea la base de datos propuesta en el diseño. Cada campo de la tabla se debe configurar dependiendo el dato que se va a ingresar para evitar la inserción de datos inválidos, o datos basura dentro de la base de datos. Configurando Dreamweaver para trabajar en un servidor. Dreamweaver tiene la capacidad de trabajar con servidores remotos y locales. En este caso del prototipo se va a trabajar con el servidor local WAMP. Se crea un nuevo sitio para el proyecto de sitio web creado en Dreamweaver. Se establecen las rutas de la ubicación del Servidor local. Jair Iván Piñones García Página 38 Figura 11. Ventana de configuracion de Servidor en DREAMWEAVER Se configura el servidor local en el que se va a trabajar especificando las rutas. Figura 12. Configurando el servidor Finalmente se verifica la conectividad con el servidor local y se sincroniza para que todos los documentos que estén dentro de ese proyecto de Dreamweaver estén disponibles también en el servidor pues como antes se menciono, Dreamweaver tiene su propio servidor de respaldos para trabajar en paralelo con el servidor y la computadora donde se esté diseñando el sistema. Jair Iván Piñones García Página 39 Sistema Administrativo De Elecciones “SADE” Figura 13. Ventana de conexión con el servidor realizada en DREAMWEAVER Establecer conexión con la base de datos. Se Debe establecer una conexión con la base de datos, para ello se necesita dar de alta una nueva conexión. Se solicitaran los datos necesarios para establecer la conexión, como la ubicación de la base de datos, el nombre de usuario y la contraseña del manejador y el nombre de la base de datos con la que va a establecer conexión. Figura 14. Conexión con MySQL Establecida esta conexión ya es posible crear todo tipo de consultas y modificaciones a la base de datos desde el sitio web. Consultas. Teniendo establecida la conexión con la base de datos, se van a crear las consultas para todas las páginas de altas. Dreamweaver cuenta con una herramienta que facilita la creación de consultas y escribe el código necesario en la página para la consulta. Jair Iván Piñones García Página 40 Se tienen 2 tipos de ventana para hacer una consulta: una simple y una avanzada. En la vista simple solo se puede seleccionar el nombre de la consulta, la conexión con la base de datos, la tabla a consultar, las columnas a recuperar el tipo de filtro y el acomodo de los datos en la consulta. Figura 15. Ventana de consultas En la vista avanzada se pueden consultar y recuperar todos los valores deseados de una o varias tablas, se pueden establecer condiciones para la recuperación de los datos, ordena la consulta como se desee y es muy simple de programar. Figura 16. Ventana de RecordSet Introducir registros en la base de datos. Jair Iván Piñones García Página 41 Sistema Administrativo De Elecciones “SADE” Para introducir un registro en la base de datos, se debe aplicar un comportamiento de servidor a la las páginas de altas. El comportamiento de servidor en Dreamweaver permite interactuar con la base de datos mediante la interfaz del sitio web. Se crean los comportamientos de servidor para satisfacer ciertas necesidades en la creación del sitio. Para el caso de las páginas de altas, se crea un comportamiento de servidor para insertar un registro a la base de datos. Al crear este comportamiento, se debe configurar de donde se van a obtener los datos para la inserción del registro. Como se crearon formularios para las altas, se configura el comportamiento de servidor insertar registro con cada valor de la tabla en la que se van a insertar los nuevos datos. Debe haber un control por cada campo que se quiere insertar a la base de datos y por lo menos un botón para enviar el registro a su destino. Figura 17. Actualización de Registro Cambios a la propuesta. En la propuesta de diseño no se tomó en cuenta una modificación o actualización en registros, por lo tanto, se modifica el mapa de sitio y el diagrama de flujo para agregar las páginas de actualización de registros. Por seguridad para la base de datos se decide quitar el poder de las bajas a los administradores y surge un nuevo usuario del sistema: el Webmaster. Al llegar al punto de la creación de la página para dar de alta una jornada electoral, se presentan diversos inconvenientes: 1. Base de datos incompleta: surge la necesidad de crear nuevas tablas con la información necesaria para automatizar el contenido del sitio. 2. Actualización de las tablas propuestas: se agregan nuevos campos a las tablas propuestas como identificadores, contraseñas y niveles de acceso. Jair Iván Piñones García Página 42 3. En la propuesta no se toma en cuenta un alta de un usuario elector. Se agrega la pagina de electores. 4. Cambio en la estructura principal de la página: se sustituyen las páginas de altas y bajas por candidatos, electores y partidos políticos: dentro de estas páginas se encuentra una consulta general de todos los registros de la base de datos correspondientes a electores, partidos o candidatos. Para resolver estos inconvenientes se agregan a la base de datos las tablas correspondientes a las circunscripciones, los estados, municipios y el tipo de elección. Se agregaron las tablas siguientes. Circunscripciones. Circunscripción. Nombre. Estados integrantes. Estados. Estado. Nombre. Circunscripción. Municipios. Estado. Municipio. Nombre. Tipo de elección Id de la elección. Descripción. Estas tablas contienen toda la información de la división del país, con los nombres e identificadores de los estados, municipios y el tipo de elección. Para la actualización de las tablas existentes: Se modifica la tabla de candidatos: se agrega un id de candidato, se elimina la columna partido político pues con el id de partido basta. Se modifica la tabla de electores: se agregan los campos de contraseña y acceso administrador. Se eliminan las columnas de la tabla partido político eliminar estado, municipio, distrito y circunscripción. Se modificó la tabla de tipo de cargo: se propuso un solo id de cargo y el nombre del cargo. Se cambia la tabla de elecciones: se requieren los siguientes datos: clave id de la elección, id del tipo de elección, id del cargo, fecha, hora de inicio, hora del fin y si la elección registrada está activa. Activar una elección. Jair Iván Piñones García Página 43 Sistema Administrativo De Elecciones “SADE” Con los cambios realizados en la base de datos y estructura de la página, se diseña la página de jornada electoral, que activa una elección, en la misma página esta la consulta de todas las jornadas existentes en la base de datos. Al crear el registro de la elección en la base de datos, automáticamente esta pasa a ser activa. Para la automatización se creó una página de elecciones activas. Esta página mostrará todas las elecciones que se tienen activas en la base de datos. Para ellos se crea una consulta a la base de datos que recupere todos los registros de la tabla elecciones que estén activas con los campos de id del cargo público y de la tabla de tipo de cargo recuperar el nombre de ese id de cargo. Se hace un ciclo para recorrer la tabla completa y muestre solo los registros de las elecciones que se tengan activas y se muestran los nombres de los cargos que están a votación en esa fecha. Votación. Al elegir un cargo por el cual votar, se llega a una página que muestra una tabla con los logotipos de los partidos, los acrónimos de los partidos y el nombre de los candidatos de cada partido al que representan. Al final un botón para enviar la información a la base de datos. Esta página es sumamente importante pues aquí se deben mostrar los datos del candidato de la región a la que le corresponde el usuario, para que el voto vaya dirigido a solamente a ese candidato. Para solucionar este inconveniente se creó una consulta a la base de datos por cada partido político existente, que recupere solo el/los candidatos que pertenezcan a ese partido y al cargo por el que se está votando, así se llegó a la conclusión de que por cada cargo debe haber una página con consultas de cada partido participante en las elecciones. Un inconveniente más fue que la página permitía realizar múltiples votos. Así que se decidió cambiar la tabla de electores en la base de datos y agregar unas columnas bandera que indiquen que el usuario ya voto o no ha votado dependiendo si la bandera esta o no levantada. Así que se modifico la página de elecciones activas colocando una consulta que recuperara esta bandera y verificara si esta levantada o no, en caso de no estar levantada permitir el acceso, de lo contrario denegarlo y enviar a las páginas correspondientes. Resultados y páginas de consultas. Los resultados se muestran realizando una consulta a la base de datos que recupere los nombres de los partidos, los candidatos de cierto cargo público y la región a la que pertenecen. Se grafican y se muestran al público en general. Se decide agregar una página de consultas que tampoco estaba considerada en la propuesta de diseño para verificar las claves de los estados, municipios, tipo de cargo, candidatos y partidos. Por esta razón una vez más cambia el diagrama de flujo y el mapa de sitio. Jair Iván Piñones García Página 44 5. DESCRIPCIÓN DEL SISTEMA SADE 5.1. Objetivos. El sistema SADE tiene como objetivo principal administrar una jornada electoral mediante el uso de una interfaz grafica, práctica, simple y modular que permita a los usuarios efectuar su voto certificando su libertad y confidencialidad mediante el uso de las tecnologías descritas en capítulos anteriores para lograr una automatización en el proceso electoral que realice el escrutinio de estos sufragios y muestre los resultados en tiempo real. 5.1.1. Mapa de Sitio. Como se menciono anteriormente, el mapa de sitio propuesto cambio y el resultado fue el siguiente: Inicio. o Usuario: elector común. Tipo de Usuario. Elecciones Activas. o Presidente de la Republica. o Diputados por mayoría relativa. o Diputados por representación proporcional o Senadores por mayoría relativa. o Senadores por representación proporcional. Votar. Voto realizado. Voto registrado. o Usuario: Administrador. Tipo de Usuario. Elecciones Activas. o Presidente de la Republica. o Diputados por mayoría relativa. o Diputados por representación proporcional o Senadores por mayoría relativa. o Senadores por representación proporcional. Votar. Voto realizado. Voto registrado. Menú del administrador. o Candidatos. o Partidos Políticos. o Electores. o Consultas. Jair Iván Piñones García Página 45 Sistema Administrativo De Elecciones “SADE” o Estados. Municipios. Circunscripciones. Partidos. Tipos de elecciones. Tipo de cargo público. Jornada electoral. Diagrama de flujo. Figura 18. Diagrama de flujo del SADE Jair Iván Piñones García Página 46 Descripción de los casos. Nombre. Usuario. Función. Descripción. Inicio o INDEX Elector común, administrador Página principal e inicio de sesión. Muestra información general del sistema SADE, en la barra lateral se muestra un inicio de sesión y debajo de este, enlaces varios. Nombre. Usuario. Función. Descripción. Tipo de usuario. Elector común, administrador Mostrar los enlaces correspondientes a los niveles de usuario. Filtrar enlaces según los diferentes tipos de usuarios. Dependiendo si el usuario es administrador o elector, se muestran los enlaces para votación o para administración. Nombre. Usuario. Función. Elecciones Activas Elector común, administrador Mostrar los enlaces hacia las elecciones activas y filtrar a los usuarios que ya hayan votado. Descripción. Mostrar automáticamente todos los enlaces hacia las páginas de votación del cargo que estén activas. Dependiendo el cargo es a la pagina que se va a dirigir. Además tiene la función de re – direccionar a los usuarios que ya hayan votado hacia una página informativa de voto registrado. Nombre. Usuario. Función. Votación Presidente de la República Elector común, administrador Mostrar los logotipos y nombres de los partidos así como los nombres de los candidatos a presidente. Manda el voto al candidato correspondiente. Descripción. En una tabla dinámica, se muestran el logotipo del partido, el nombre de dicho partido y el nombre de su candidato. Cuando el usuario haya elegido a su candidato y al hacer clic en el botón de votar, se envía el voto al candidato elegido y se levanta una bandera de que ese usuario ya realizó su voto. Nombre. Usuario. Función. Votación Diputados por mayoría relativa. Elector común, administrador Mostrar los logotipos y nombres de los partidos así como los nombres de los candidatos a diputados. Manda el voto al candidato correspondiente. Descripción. En una tabla dinámica, se muestran el logotipo del partido, el nombre de dicho partido y el nombre de su candidato de todos los candidatos de esa elección con el cargo de diputado. Cuando el usuario haya elegido a su candidato y al hacer clic en el botón de votar, se envía el voto al candidato elegido y se levanta una bandera de que ese usuario ya realizó su voto. Jair Iván Piñones García Página 47 Sistema Administrativo De Elecciones “SADE” Nombre. Usuario. Función. Votación Diputados por representación proporcional Elector común, administrador Mostrar los logotipos y nombres de los partidos así como los nombres de los candidatos a diputados. Manda el voto al candidato correspondiente. Descripción. En una tabla dinámica, se muestran el logotipo del partido, el nombre de dicho partido y el nombre de su candidato de todos los candidatos de esa elección con el cargo de diputado. Cuando el usuario haya elegido a su candidato y al hacer clic en el botón de votar, se envía el voto al candidato elegido y se levanta una bandera de que ese usuario ya realizó su voto. Nombre. Usuario. Función. Votación Senadores por mayoría relativa. Elector común, administrador Mostrar los logotipos y nombres de los partidos así como los nombres de los candidatos a senadores. Manda el voto al candidato correspondiente. Descripción. En una tabla dinámica, se muestran el logotipo del partido, el nombre de dicho partido y el nombre de su candidato de todos los candidatos de esa elección con el cargo de senador. Cuando el usuario haya elegido a su candidato y al hacer clic en el botón de votar, se envía el voto al candidato elegido y se levanta una bandera de que ese usuario ya realizó su voto. Nombre. Usuario. Función. Votación Senadores por representación proporcional. Elector común, administrador. Mostrar los logotipos y nombres de los partidos así como los nombres de los candidatos a senadores. Manda el voto al candidato correspondiente. Descripción. En una tabla dinámica, se muestran el logotipo del partido, el nombre de dicho partido y el nombre de su candidato de todos los candidatos de esa elección con el cargo de senador. Cuando el usuario haya elegido a su candidato y al hacer clic en el botón de votar, se envía el voto al candidato elegido y se levanta una bandera de que ese usuario ya realizó su voto. Nombre. Usuario. Función. Descripción. Voto realizado Elector común, administrador Mostrar un mensaje al usuario de que su voto ya fue realizado. Página informativa acerca de la realización exitosa del voto. Nombre. Usuario. Función. Descripción. Voto registrado Elector común, administrador Mostrar un mensaje al usuario de que el voto ya fue registrado. Página informativa informando al usuario de que su voto ya fue registrado. A esta página los usuarios son re – direccionados cuando quieren votar de nuevo. Jair Iván Piñones García Página 48 Nombre. Usuario. Función. Menú de Administrador. Administrador Mostrar los enlaces hacia las páginas de altas y actualizaciones, consultas y activación de elecciones. Descripción. Envía a los administradores a las páginas para dar de alta y/o actualizar los registros de electores, partidos y candidatos. Envía a la página de consultas de claves y finalmente direcciona a la página donde se activa una jornada electoral. Nombre. Usuario. Función. Administrar Candidatos. Administrador Ingresar un nuevo registro en la base de datos de un candidato nuevo, y/o la actualización de los registros de candidatos existentes. Descripción. Muestra una consulta general de los candidatos en una tabla dinámica. Además cuenta con el formulario para ingresar los datos a actualizar o a ingresar. Nombre. Usuario. Función. Administrar Partidos Politicos. Administrador Ingresar un nuevo registro en la base de datos de un partido político nuevo, y/o la actualización de los registros de partidos existentes. Descripción. Muestra una consulta general de los partidos en una tabla dinámica. Además cuenta con el formulario para ingresar los datos a actualizar o a ingresar. Nombre. Usuario. Función. Administrar Electores. Administrador Ingresar un nuevo registro en la base de datos de un elector nuevo, y/o la actualización de los registros de candidatos existentes. Descripción. Muestra una consulta general de los electores en una tabla dinámica. Además cuenta con el formulario para ingresar los datos a actualizar o a ingresar. Nombre. Usuario. Función. Administrar Candidatos. Administrador Ingresar un nuevo registro en la base de datos de un candidato nuevo, y/o la actualización de los registros de candidatos existentes. Descripción. Muestra una consulta general de los candidatos en una tabla dinámica. Además cuenta con el formulario para ingresar los datos a actualizar o a ingresar. Nombre. Usuario. Función. Descripción. Consultas Administrador Mostrar Muestra una consulta general de los candidatos en una tabla dinámica. Además cuenta con el formulario para ingresar los datos a actualizar o a ingresar. Jair Iván Piñones García Página 49 Sistema Administrativo De Elecciones “SADE” Nombre. Usuario. Función. Descripción. Estados. Administrador Consulta de las claves para los estados. Consulta de las claves, nombre y circunscripción a la que pertenecen los estados mediante una tabla dinámica. Nombre. Usuario. Función. Descripción. Municipios Administrador Consulta de las claves de los municipios. Consulta de las claves, nombre, estado y circunscripción a la que pertenecen los municipios mediante una tabla dinámica. Nombre. Usuario. Función. Descripción. Circunscripciones. Administrador Consulta de las claves para las circunscripciones. Consulta de las claves, nombre y estados que pertenecen a esta circunscripción mediante una tabla dinámica. Nombre. Usuario. Función. Descripción. Partidos Políticos Administrador Consultar las claves de los partidos Consulta de las claves, nombres, y acrónimos de los partidos mediante el uso de una tabla dinámica. Nombre. Usuario. Función. Descripción. Tipo de elección. Administrador Consultar las claves de los tipos de elección Consulta de las claves y nombres los tipos de elección mediante el uso de una tabla dinámica. Nombre. Usuario. Función. Descripción. Partidos Políticos Administrador Consultar las claves de los partidos Consulta de las claves, nombres, y acrónimos de los partidos mediante el uso de una tabla dinámica. Nombre. Usuario. Función. Descripción. Tipo de cargo público Administrador Consultar las claves de los tipos de cargo público Consulta de las claves y nombres-de los tipos de cargo público mediante el uso de una tabla dinámica. Jair Iván Piñones García Página 50 Nombre. Usuario. Función. Descripción. Jornada electoral Administrador Activar una jornada electoral Realiza la activación de una jornada electoral activando una elección introduciendo los datos de dicha jornada. Tipos de Usuarios. a) Elector común. El elector común al iniciar sesión solo puede acceder al enlace de elecciones activas. Dentro de esta página podrá elegir entre las elecciones que estén disponibles para votar. Al elegir uno de los enlaces, será enviado a la planilla correspondiente para que haga valido su voto de manera libre y secreta. b) Administradores. Los administradores también pueden juegan el rol de electores. Ellos pueden decidir si dirigirse a su página de elecciones activas o a administrar la jornada electoral. Dentro de su rol como elector cuenta con los mismos accesos y formas de hacer valido su voto que cualquier otro elector. En esta área del sistema no cuenta con privilegios para realizar acciones diferentes a los demás electores. Sin embargo el puede tener acceso a otras áreas que los electores comunes no. Como a las consultas de claves, las altas y actualizaciones de candidatos, electores y partidos y sobre todo a activar una elección c) Usuarios no identificados. Ellos solo pueden tener acceso a la página principal y observar los resultados desde el enlace de la barra lateral. Pero no pueden acceder a ninguna de las otras páginas pues todas tienen el acceso restringido para usuarios no registrados. d) Webmaster. Es el programador, diseñador y administrador principal de la página web. Tiene acceso a todo y puede modificar todo el sistema si así se le requiere. Por el momento SADE en su etapa prototipo depende mucho de un Webmaster pues es el que puede depurar errores y/o cambiar el código o diseño tanto de la página como de la base de datos según las necesidades de los clientes. Jair Iván Piñones García Página 51 Sistema Administrativo De Elecciones “SADE” 5.2. Servicios que ofrece SADE. E – voto. Los electores registrados pueden hacer efectivo su voto mediante el SADE mediante una interfaz grafica, fácil de utilizar certificando la libertad de elección y confidencialidad del sufragio. Cada elector cuenta con un inicio de sesión único, gracias a este el SADE puede mostrar solo la información correspondiente al usuario identificado. No permite el voto múltiple y realiza el escrutinio automáticamente. Consulta de resultados. SADE cuenta con una página de resultados que contiene una búsqueda para filtrar los resultados y mostrar así la consulta los nombres de candidato, partido al que pertenece, estado, municipio, distrito y el número total de votos que obtuvo en la elección. Administración de la Jornada Electoral. Altas de candidatos, partidos, electores y actualización de los ya existentes. SADE permite a los administradores dar de alta partidos, electores, y candidatos cada uno en su correspondiente página y además permite actualizar los datos de los que ya existan en la base de datos por si llegasen a cambiar en cualquier momento. Consultas. Ya que SADE maneja diferentes claves, los administradores pueden consultar estas claves identificadoras en cualquier momento. Existen claves para los estados, municipios, distritos, circunscripciones, partidos políticos, candidatos, tipos de cargo, elecciones activas o inactivas y tipos de elección. Activar elección. SADE permite a los administradores activar una o varias elecciones durante una jornada electoral determinando el tipo de cargo y el tipo de elección así como la fecha. Jair Iván Piñones García Página 52 6. BASES DE DATOS 6.1. Manejador de Bases de Datos. Una base de datos es una colección de datos organizados y estructurados, que siguen un determinado modelo de información que indica los datos y la relación que existe entre ellos. Una base de datos tiene que ser diseñada siguiendo un propósito específico, el diseño debe tener una lógica coherente, los datos pueden ser compartidos mediante la interacción de usuarios con aplicaciones, pero éstos deben conservar su integridad, y seguridad. Para evitar la redundancia, la definición y descripción de los datos tiene que ser muy clara y única. Una base de datos esta conformada por tablas, donde se almacenan un conjunto de datos, las tablas están formadas por columnas y filas, en las columnas se almacena una parte de la información, acerca de un elemento que se desea guardar en la tabla, las filas conforman los registros. Características de una Base de Datos Independencia física y lógica de los datos Redundancia mínima Integridad de los datos Seguridad de acceso Consultas complejas optimizadas Respaldo y recuperación Acceso a través de diversos lenguajes de programación Acceso concurrente por parte de múltiples usuarios Para el diseño de SADE se eligió MySQL como manejador de la base de datos, este se encuentra dentro del sistema gestor de bases de datos WAMP que proporciona los servicios de un Servidor web Apache, lenguaje PHP y bases de datos en MySQL. 6.2. Modelo entidad Relación. Una base de datos es una colección de datos organizados y estructurados, que siguen un determinado modelo de información que indica los datos y la relación que existe entre ellos. Una base de datos tiene que ser diseñada siguiendo un propósito específico, el diseño debe tener una lógica coherente, los datos pueden ser compartidos mediante la interacción de usuarios con aplicaciones, pero éstos deben conservar su integridad, y seguridad. Para evitar la redundancia, la definición y descripción de los datos tiene que ser muy clara y única. Una base de datos esta conformada por tablas, donde se almacenan un conjunto de datos, las tablas están formadas por columnas y filas, en las columnas se almacena una parte de la información, acerca de un elemento que se desea guardar en la tabla, las filas conforman los registros. Características de una Base de Datos Independencia física y lógica de los datos Jair Iván Piñones García Página 53 Sistema Administrativo De Elecciones “SADE” Redundancia mínima Integridad de los datos Seguridad de acceso Consultas complejas optimizadas Respaldo y recuperación Acceso a través de diversos lenguajes de programación Acceso concurrente por parte de múltiples usuarios 6.3. Diagrama Entidad Relación. Figura 19. Diagrama de Entidad Relación Jair Iván Piñones García Página 54 6.4. Diccionario de Datos. Electores. Jair Iván Piñones García Página 55 Sistema Administrativo De Elecciones “SADE” Candidatos. Circunscripciones. Elecciones. Jair Iván Piñones García Página 56 Estados. Municipios. Partido Político. Tipo de cargo. Tipo de elección Jair Iván Piñones García Página 57 Sistema Administrativo De Elecciones “SADE” 6.5. Consultas a la Base de datos. En capítulos anteriores se menciono mucho sobre las consultas realizadas a la base de datos para tener acceso a la información. En este capítulo se indicara en qué forma se realizaron las consultas y para que se utilizaron. 6.5.1. Ejemplo de consulta a la base de datos. Para hacer una consulta en la base de datos en Dreamweaver, primero que nada debe existir una conexión con la base de datos que se va a consultar. Teniendo establecida esta conexión, ingresamos a la opción enlaces y consulta de registros o juego de registros. La ventana emergente tiene 2 modalidades: simple y avanzada. En modo simple se elije el nombre de la consulta, la conexión a utilizar, la tabla de donde extraerá los datos, que datos se van a seleccionar, si se requiere algún tipo de filtro y el orden de aparición de la consulta. Figure 20. Muestra la ventana de juego de registros en su modo simple. En el modo avanzado se elije el nombre y la conexión a la base de datos a utilizar. Pero se debe editar, es decir, escribir la consulta que se va a realizar, por ejemplo: SELECT * FROM electores WHERE curp = colname. Esto indica que vamos a seleccionar todos los campos de la tabla electores con la condición de que el campo curp sea igual a la variable de inicio de sesión. Por esta razón las sesiones de los usuarios son únicas y por eso mismo se pueden realizar los filtros necesarios para que la información llegue solo a los usuarios que les corresponda dicha información. Jair Iván Piñones García Página 58 Figura. 21 Muestra la ventana de juego de registros en su modo avanzado. Cada página cuenta con diferentes tipos de consultas para filtrar la información que se requiere que llegue a un lugar en el sistema específicamente y que esta información solo llegue a los usuarios que estén autorizados. El código generado para esta consulta es el siguiente: <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": Jair Iván Piñones García Página 59 Sistema Administrativo De Elecciones “SADE” $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $colname_REelector = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_REelector = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_REelector = sprintf("SELECT * FROM electores WHERE curp GetSQLValueString($colname_REelector, "text")); $REelector = mysql_query($query_REelector, $coneccion1) or die(mysql_error()); $row_REelector = mysql_fetch_assoc($REelector); $totalRows_REelector = mysql_num_rows($REelector); ?> = %s", 6.5.2. Consulta de inicio de sesión mediante comportamiento de servidor. En este caso la consulta se hace mediante un comportamiento de servidor. Dreamweaver ayuda a formar el código para la consulta mediante ventanas de requerimiento de datos. Para crear esta consulta, necesitamos agregar un comportamiento de servidor nuevo y se elige la opción de identificación de usuario (LOG IN USER). En la ventana emergente se eligen los campos del formulario previamente hecho para indicar la donde el usuario escribirá su CURP y su contraseña, la conexión a la base de datos que va a utilizar, la tabla de consulta, los campos referidos a su CURP y su contraseña, el re – direccionamiento si la identificación fue exitosa o si falló y la restricción del acceso basado en usuario, contraseña y nivel de acceso. Jair Iván Piñones García Página 60 Figura. 22. Creación de Inicio de sesión. Existen diferentes tipos de comportamientos de servidor, entre ellos están: Ingresar un registro nuevo a la base de datos. Eliminar un registro. Actualizar un registro. Restringir el acceso a la página por nombre de usuario, contraseña y nivel de acceso. Ingresar textos, cajas, tablas, botones, etc. dinámicos. Ingresar controles para desplazarse a través de las consultas y tablas dinámicas. El código generado para el sistema de identificación de usuario es el siguiente: <?php require_once('Connections/coneccion1.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": Jair Iván Piñones García Página 61 Sistema Administrativo De Elecciones “SADE” $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } ?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) { session_start(); } $loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) { $_SESSION['PrevUrl'] = $_GET['accesscheck']; } if (isset($_POST['orc'])) { $loginUsername=$_POST['orc']; $password=$_POST['contrase']; $MM_fldUserAuthorization = "accesoadmon"; $MM_redirectLoginSuccess = "/SADEPrueba/Electores/tipodeusuario.php"; $MM_redirectLoginFailed = "/SADEPrueba/datosincorrectos.php"; $MM_redirecttoReferrer = false; mysql_select_db($database_coneccion1, $coneccion1); $LoginRS__query=sprintf("SELECT curp, contrase, accesoadmon FROM electores WHERE curp=%s AND contrase=%s", GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); $LoginRS = mysql_query($LoginRS__query, $coneccion1) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS); Jair Iván Piñones García Página 62 if ($loginFoundUser) { $loginStrGroup = mysql_result($LoginRS,0,'accesoadmon'); if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();} //declare two session variables and assign them $_SESSION['MM_Username'] = $loginUsername; $_SESSION['MM_UserGroup'] = $loginStrGroup; if (isset($_SESSION['PrevUrl']) && false) { $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; } header("Location: " . $MM_redirectLoginSuccess ); } else { header("Location: ". $MM_redirectLoginFailed ); } } ?> El código indica los controles, variables y la conexión y consulta a la base de datos que se van a utilizar, también indica los caminos a dirigirse si el usuario ingresa mal su información o si el acceso es permitido. Jair Iván Piñones García Página 63 Sistema Administrativo De Elecciones “SADE” 7. SEGURIDAD POR VPN. Ya que aun no es posible certificar la confidencialidad, integridad y autentificación de los datos por sistemas de seguridad vía software, se utiliza hardware cubrir estas necesidades que se tienen de proteger al sistema y a los usuarios de ataques externos. Se propone el uso de redes privadas virtuales (VPN) que pueden hacer posible proporcionar los medios para garantizar lo que el Software por sí solo no puede. Autentificación y autorización: ¿Quién está del otro lado? Usuario/equipo y qué nivel de acceso debe tener. Integridad: de que los datos enviados no han sido alterados. Para ello se utiliza funciones de Hash. Los algoritmos de hash más comunes son los Message Digest (MD2 y MD5) y el Secure Hash Algorithm (SHA). Confidencialidad: Dado que sólo puede ser interpretada por los destinatarios de la misma. Se hace uso de algoritmos de cifrado como Data Encryption Standard (DES), Triple DES (3DES) y Advanced Encryption Standard (AES). No repudio: es decir, un mensaje tiene que ir firmado, y el que lo firma no puede negar que el mensaje lo envió él o ella. Para lograr esto se requiere del uso de un certificado digital. Certificado Digital Un certificado digital es un documento digital mediante el cual un tercero confiable (una autoridad de certificación) garantiza la vinculación entre la identidad de un sujeto o entidad y su clave pública. El certificado contiene usualmente el nombre de la entidad certificada, número de serie, fecha de expiración, una copia de la clave pública del titular del certificado (utilizada para la verificación de su firma digital) y la firma digital de la autoridad emisora del certificado de forma que el receptor pueda verificar que esta última ha establecido realmente la asociación. Un certificado emitido por una entidad de certificación autorizada, además de estar firmado digitalmente por ésta, debe contener por lo menos lo siguiente: Nombre, dirección y domicilio del suscriptor. Identificación del suscriptor nombrado en el certificado. El nombre, la dirección y el lugar donde realiza actividades la entidad de certificación. La clave pública del usuario. La metodología para verificar la firma digital del suscriptor impuesta en el mensaje de datos. El número de serie del certificado. Fecha de emisión y expiración del certificado. Jair Iván Piñones García Página 64 Cualquier individuo o institución puede generar un certificado digital, pero si éste emisor no es reconocido por quienes interactúen con el propietario del certificado, el valor del mismo es prácticamente nulo. Por ello los emisores deben acreditarse: así se denomina al proceso por el cual entidades reconocidas, generalmente públicas, otorgan validez a la institución certificadora, de forma que su firma pueda ser reconocida como fiable, transmitiendo esa fiabilidad a los certificados emitidos por la citada institución. Para que un certificado digital tenga validez legal, el prestador de Servicios de Certificación debe acreditarse en cada país de acuerdo a la normativa que cada uno defina. En el caso especifico de México, está regido por la Secretaria de Economía. Red Privada Virtual para el SADE. Requerimientos básicos. Identificación de usuario: las VPN deben verificar la identidad de los usuarios y restringir su acceso a aquellos que no se encuentren autorizados. Codificación de datos: los datos que se van a transmitir a través de la red pública (Internet), antes deben ser cifrados, para que así no puedan ser leídos. Esta tarea se realiza con algoritmos de cifrado como DES o 3DES que sólo pueden ser leídos por el emisor y receptor. Administración de claves: las VPN deben actualizar las claves de cifrado para los usuarios. Tipo de conexión. Para establecer la conexión en las terminales remotas se utiliza una técnica llamada entunelamiento (tunneling), los paquetes de datos son enrutados por la red pública, tal como Internet o alguna otra red comercial, en un túnel privado que simula una conexión punto a punto. Este recurso hace que por la misma red puedan crearse muchos enlaces por diferentes túneles virtuales a través de la misma infraestructura. También hace universales para su transporte los diferentes protocolos LAN entre los que se encuentran IP, IPX, Appletalk y Netbeui, de allí la característica de multiprotocolo que hace sumamente universal la tecnología de las redes virtuales privadas. Adicionalmente y para completar una solución VPN deben existir uno o más dispositivos o paquetes de software que brinden cifrado, autenticación y autorización a los usuarios del túnel. Además muchos de estos equipos brindan información sobre el ancho de banda, el estado del canal y muchos más datos de gestión y de servicio. Las VPNs se caracterizan también por su flexibilidad. Pueden ser conexiones punto-punto o puntomultipunto. Reemplazando una red privada con muchos y costosos enlaces dedicados, por un solo enlace a una ISP que brinde un punto de presencia en la red (POP por sus siglas en inglés), una compañía puede tener fácilmente toda una infraestructura de acceso remoto, sin la necesidad de Jair Iván Piñones García Página 65 Sistema Administrativo De Elecciones “SADE” tener una gran cantidad de líneas telefónicas análogas o digitales, y de tener costosos pools de módems o servidores de acceso, o de pagar costosas facturas por llamadas de larga distancia. En algunos casos las ISP se hacen cargo del costo que les genera a los usuarios remotos su conexión a Internet local, pues ven en este tipo de negocio un mayor interés por los dividendos del acceso. El objetivo final de una VPN es brindarle una conexión al usuario remoto como si este estuviera disfrutando directamente de su red privada y de los beneficios y servicios que dentro de ella dispone, aunque esta conexión se realice sobre una infraestructura pública. Equipos necesarios. En una jornada electoral se instalan alrededor de 140 mil 239 casillas en todo el país. Para cubrir este número de casillas necesitamos enrutadores que soporten un gran número de VPN’S pues se requiere por lo menos una VPN por cada casilla instalada. La solución se encuentra en adquirir equipos cisco que cubran el número total de casillas y que además soporten ese gran número de sesiones en línea simultáneamente. El equipo cisco que cumple con estos requerimientos es el Cisco ASA 5585-S60 que permite el uso simultaneo de 10 mil VPN’S. Con 14 equipos como este no se alcanza a cubrir el número total de VPN’S que se necesitan pues faltan por cubrir 239 sitios remotos. Sin embargo se puede adquirir un equipo de la misma serie pero que soporte un número menor de VPN’S. El equipo Cisco ASA 5510 soporta 250 sesiones de red VPN simultáneamente. Por lo tanto se requieren adquirir 15 equipos Cisco, 14 Cisco ASA 5585-S60 y 1 Cisco ASA 5510 para cubrir el número de redes virtuales privadas que se requieren para garantizar la seguridad del sistema y los datos transmitidos. Figura. 23. Equipos Cisco de la serie ASA 5500 Jair Iván Piñones García Página 66 Diagrama para VPN Figura 24. Muestra el diagrama mínimo de la propuesta de uso de VPN. Las subredes están determinadas por cada una de las casillas instaladas a lo largo del país. Los ROUTERS dentro de la red de cada casilla son los que distribuyen las principales empresas de Internet, el ROUTER correspondiente a las oficinas del IFE, establecen la conexión “tunneling” con los routers de las redes de las casillas. Jair Iván Piñones García Página 67 Sistema Administrativo De Elecciones “SADE” 8. ANEXOS 8.1. Pantallas y código. 8.1.1. Código de la hoja de estilos. Código de la hoja de estilos CSS. @charset "utf-8"; /* CSS Document */ body,td,th { font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; font-size: 100%; color: #600; } body { background-color: #FFF; } a:link { color: #00F; } a:visited { color: #06F; } a:hover { color: #09C; } a:active { color: #0FF; } h1 { font-size: 150%; color: #003; } h2 { font-size: 125%; color: #006; } h3 { font-size: 112%; color: #009; } .contenedor{ width:100%; max-width:1260px; max-height:720px; background: } .sidebar1 { float: left; width: 20%; background: #93A5C4; padding-bottom: 10px; } .contenido { padding:10px 0; width:79%; float:right; #FFF; margin: 0 auto; } .contenido ul, contenido ol{ Jair Iván Piñones García Página 68 padding: 0 15px 15px 40px; } ul.nav{ list-style:none; border-top:1px solid #666; margin-bottom:15px; } ul.nav li{ border-bottom:1px solid #666; } ul.nav a, ul.nav a:visited{ padding: 5px 5px 5px 15px; display:block; text-decoration:none; background:#8090AB; color:#000; } ul.nav a:hover, ul.nav a:active, ul.nav a:focus{ background:#6F7D94; color:#FFF; } .piedepagina { padding: 10px 0; background:#6F7D94; position:relative; clear:both; text-align: center; } Jair Iván Piñones García Página 69 Sistema Administrativo De Elecciones “SADE” 8.1.2. INICIO (INDEX) Figura. 25 Página de Inicio Código: <?php require_once('Connections/coneccion1.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } ?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) { session_start(); Jair Iván Piñones García Página 70 } $loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) { $_SESSION['PrevUrl'] = $_GET['accesscheck']; } if (isset($_POST['orc'])) { $loginUsername=$_POST['orc']; $password=$_POST['contrase']; $MM_fldUserAuthorization = "accesoadmon"; $MM_redirectLoginSuccess = "/SADEPrueba/Electores/tipodeusuario.php"; $MM_redirectLoginFailed = "/SADEPrueba/datosincorrectos.php"; $MM_redirecttoReferrer = false; mysql_select_db($database_coneccion1, $coneccion1); $LoginRS__query=sprintf("SELECT curp, contrase, accesoadmon FROM electores WHERE curp=%s AND contrase=%s", GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); $LoginRS = mysql_query($LoginRS__query, $coneccion1) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS); if ($loginFoundUser) { $loginStrGroup = mysql_result($LoginRS,0,'accesoadmon'); if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();} //declare two session variables and assign them $_SESSION['MM_Username'] = $loginUsername; $_SESSION['MM_UserGroup'] = $loginStrGroup; if (isset($_SESSION['PrevUrl']) && false) { $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; } header("Location: " . $MM_redirectLoginSuccess ); } else { header("Location: ". $MM_redirectLoginFailed ); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <link href="estiloforms.css" rel="stylesheet" type="text/css" /> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="100%" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <form id="form1" name="form1" method="POST" action="<?php echo $loginFormAction; ?>"> <p>Inicio de Sesión</p> <p>ORC: <label for="orc2"><br /> </label> <input type="text" name="orc" id="orc2" /> </p> <p>Contraseña: Jair Iván Piñones García Página 71 Sistema Administrativo De Elecciones “SADE” <label for="contrase"><br /> </label> <input type="password" name="contrase" id="contrase" /> </p> <p> <input type="submit" name="iniciar" id="iniciar" value="Ingresar" /> </p> </form> <p> <li> <a href="Segura/paneadmon.php"> Entrada Provisional</a></li> <li> <a href="ResultadosPresidente.php"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1> BIENVENIDO A SADE </h1> <p>SADE (Sistema Administrativo De Elecciones) es un sistema donde usted podrá realizar su voto de una manera rápida y segura. SADE proporcionara los elementos necesarios para que usted pueda ver la boleta electoral así como el nombre de los Partidos Políticos y sus respectivos candidatos. </p> <p> Adem�s desde la pagina de SADE usted podr� checar los resultados de la elección desde el primer minuto de esta.</p> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados �, Jair Iv�n Pi�ones Garc�a 2010 Oficinas Centrales: Cerrada 28 A No. 5 Col. Santiago Atepetlac, Delegaci�n Gustavo A. Madero, C.P. 07640, M�xico,D.F. </p> <p>Este sitio se ve mejor en una resoluci�n de 1024X768 p�xeles o superior<!--fin del pie de pagina---></p> </div> <!--fin del contenedor--></div> </body> </html> Jair Iván Piñones García Página 72 8.1.3. TIPO DE USUARIO Figura. 26 Diseño de la página del Tipo de usuario. Esta página varía dependiendo del tipo de usuario que inicie sesión. Código: <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } ?> <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = "s,n"; $MM_donotCheckaccess = "false"; // *** Restrict Access To Page: Grant or deny access to this page Jair Iván Piñones García Página 73 Sistema Administrativo De Elecciones “SADE” function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $_SESSION['MM_Username'], $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": Jair Iván Piñones García Página 74 $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $colname_REelector = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_REelector = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_REelector = sprintf("SELECT * FROM electores WHERE curp = %s", GetSQLValueString($colname_REelector, "text")); $REelector = mysql_query($query_REelector, $coneccion1) or die(mysql_error()); $row_REelector = mysql_fetch_assoc($REelector); $totalRows_REelector = mysql_num_rows($REelector); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ansi" /> <title>Untitled Document</title> <link href="/SADEPrueba/Segura/estiloforms.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="contenedor"> <div class="encabezado"><a><img src="/SADEPrueba/Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="1209" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <form action="" method="post" name="form1" class="nav" id="form1"> <p>Bienvenido, <?php echo $row_REelector['nombre']; ?></p> <p><a href="<?php echo $logoutAction ?>">Log out</a></p> </form> <li> <a href="#"> ?Que es SADE? </a></li> <li> <a href="#"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1> BIENVENIDO <?php echo $row_REelector['nombre']; ?></h1> <h1> <?php if($_SESSION['MM_UserGroup']=='s') {?> </h1> <h3><a href="/SADEPrueba/Segura/paneadmon.php">Menu de Administrador.</a></h3> <h3><a href="/SADEPrueba/Electores/eleccionesactivas.php">Ir a Votar.</a></h3><?php } else {?><h3><a href="/SADEPrueba/Electores/eleccionesactivas.php">Realizar Voto</a></h3> <?php }?> <h3><a href="/SADEPrueba/index.php">Regresar a la pagina principal</a></h3> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados ?, Jair Iv?n Pi?ones Garc?a 2010 Oficinas Centrales: Cerrada 28 A No. 5 Col. Santiago Atepetlac, Delegaci?n Gustavo A. Madero, C.P. 07640, M?xico,D.F. </p> <p>Este sitio se ve mejor en una resoluci?n de 1024X768 p?xeles o superior<!--fin del pie de pagina---></p> Jair Iván Piñones García Página 75 Sistema Administrativo De Elecciones “SADE” </div> <!--fin del contenedor--></div> </body> </html> <?php mysql_free_result($REelector); ?> Jair Iván Piñones García Página 76 8.1.4. ELECCIONES ACTIVAS. Figura. 27. Diseño de la página de elecciones activas Código. <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } ?> <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = "s,n"; $MM_donotCheckaccess = "false"; Jair Iván Piñones García Página 77 Sistema Administrativo De Elecciones “SADE” // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $_SESSION['MM_Username'], $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; Jair Iván Piñones García Página 78 break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } mysql_select_db($database_coneccion1, $coneccion1); $query_RSeleccion = "SELECT * FROM elecciones WHERE elecciones.activo=1"; $RSeleccion = mysql_query($query_RSeleccion, $coneccion1) or die(mysql_error()); $row_RSeleccion = mysql_fetch_assoc($RSeleccion); $totalRows_RSeleccion = mysql_num_rows($RSeleccion); mysql_select_db($database_coneccion1, $coneccion1); $query_RStipodecargo = "SELECT * FROM tipo_cargo"; $RStipodecargo = mysql_query($query_RStipodecargo, $coneccion1) or die(mysql_error()); $row_RStipodecargo = mysql_fetch_assoc($RStipodecargo); $totalRows_RStipodecargo = mysql_num_rows($RStipodecargo); $colname_RSelector = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_RSelector = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSelector = sprintf("SELECT * FROM electores WHERE curp = %s", GetSQLValueString($colname_RSelector, "text")); $RSelector = mysql_query($query_RSelector, $coneccion1) or die(mysql_error()); $row_RSelector = mysql_fetch_assoc($RSelector); $totalRows_RSelector = mysql_num_rows($RSelector); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <link href="/SADEPrueba/Segura/estiloforms.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="../Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="1209" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <p>Bienvenido, <?php echo $row_RSelector['nombre']; ?></p> <p><a href="<?php echo $logoutAction ?>">Log out</a></p> <li><a href="Segura/paneadmon.php">Entrada Provisional</a></li> <li> <a href="#"> �Que es SADE? </a></li> <li> <a href="#"> Consulta de Resultados</a></li> <P><?php date_default_timezone_set('America/Tegucigalpa'); echo date ("Y-m-d H:i"); ?></P> Jair Iván Piñones García Página 79 Sistema Administrativo De Elecciones “SADE” <p><!--fin de la barra---></div> <div class="contenido"> <h1>ELECCIONES ACTIVAS</h1> <p>Selecciona la opci�n deseada.</p> <form id="form2" name="form2" method="post" action=""> <?php do { if ($row_RSeleccion['activo']==1) { $posicion=$row_RSeleccion['idcargo']; switch($posicion){ case '1': if($row_RSelector['yavotop']==0){ ?> <a href="/SADEPrueba/Electores/vota.php"> <?php } else { ?> <a href="/SADEPrueba/Electores/votoregistrado.php"> <?php } echo "Presidente de la Republica"; ?> </a><p>&nbsp;</p> <?php break; case '2': ?> <a href="/SADEPrueba/Electores/votadiputados1.php"> <?php echo "Diputados por Mayoria Relativa"; ?> </a><p>&nbsp;</p> <?php break; case '3': ?> <a href="/SADEPrueba/Electores/votadiputados2.php"> <?php echo "Diputados por Representaci�n Proporcional"; ?> </a><p>&nbsp;</p> <?php break; case '4': ?> <a href="/SADEPrueba/Electores/votasenadores1.php"> <?php echo "Senadores por Mayoria Relativa"; ?> </a><p>&nbsp;</p> <?php break; case '5': ?> <a href="/SADEPrueba/Electores/votasenadores1.php"> <?php Jair Iván Piñones García Página 80 echo "Senadores por Represaentaci�n Proporcional"; ?> </a><p>&nbsp;</p> <?php break;} } else { echo" NO HAY ELECCIONES ACTIVAS"; } } while ($row_RSeleccion = mysql_fetch_assoc($RSeleccion)); ?> </form> <p><a href="/SADEPrueba/Electores/tipodeusuario.php">Regresar</a></p> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados �, Jair Iv�n Pi�ones Garc�a 2010 Oficinas Centrales: Cerrada 28 A No. 5 Col. Santiago Atepetlac, Delegaci�n Gustavo A. Madero, C.P. 07640, M�xico,D.F. </p> <p>Este sitio se ve mejor en una resoluci�n de 1024X768 p�xeles o superior<!--fin del pie de pagina---></p> </div> <!--fin del contenedor--></div> </body> </html> <?php mysql_free_result($RSeleccion); mysql_free_result($RSelector); ?> Jair Iván Piñones García Página 81 Sistema Administrativo De Elecciones “SADE” 8.1.5. VOTACIONES Figura. 28 Diseño de la página de emisión de voto Código: <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } Jair Iván Piñones García Página 82 if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } ?> <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = "s,n"; $MM_donotCheckaccess = "false"; // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); Jair Iván Piñones García $_SESSION['MM_Username'], Página 83 Sistema Administrativo De Elecciones “SADE” header("Location: ". $MM_restrictGoTo); exit; } ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; Jair Iván Piñones García Página 84 case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $colname_RSelectores = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_RSelectores = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSelectores = sprintf("SELECT * FROM electores WHERE curp = %s", GetSQLValueString($colname_RSelectores, "text")); $RSelectores = mysql_query($query_RSelectores, $coneccion1) or die(mysql_error()); $row_RSelectores = mysql_fetch_assoc($RSelectores); $totalRows_RSelectores = mysql_num_rows($RSelectores); mysql_select_db($database_coneccion1, $coneccion1); $query_RScandidatos = "SELECT * FROM candidatos WHERE idcargo = 1"; $RScandidatos = mysql_query($query_RScandidatos, $coneccion1) or die(mysql_error()); $row_RScandidatos = mysql_fetch_assoc($RScandidatos); $totalRows_RScandidatos = mysql_num_rows($RScandidatos); $colname_RSpartido = "-1"; if (isset($_SESSION['candpartido'])) { $colname_RSpartido = $_SESSION['candpartido']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSpartido = sprintf("SELECT * FROM partidopolitico WHERE idpartido = %s", GetSQLValueString($colname_RSpartido, "int")); $RSpartido = mysql_query($query_RSpartido, $coneccion1) or die(mysql_error()); $row_RSpartido = mysql_fetch_assoc($RSpartido); $totalRows_RSpartido = mysql_num_rows($RSpartido); mysql_select_db($database_coneccion1, $coneccion1); $query_RSPAN = "SELECT nombre FROM candidatos WHERE candidatos.idcargo=1 AND candidatos.idpartido=1"; $RSPAN = mysql_query($query_RSPAN, $coneccion1) or die(mysql_error()); $row_RSPAN = mysql_fetch_assoc($RSPAN); $totalRows_RSPAN = mysql_num_rows($RSPAN); mysql_select_db($database_coneccion1, $coneccion1); $query_RSPRI = "SELECT nombre FROM candidatos WHERE candidatos.idcargo=1 AND candidatos.idpartido=2"; $RSPRI = mysql_query($query_RSPRI, $coneccion1) or die(mysql_error()); $row_RSPRI = mysql_fetch_assoc($RSPRI); $totalRows_RSPRI = mysql_num_rows($RSPRI); mysql_select_db($database_coneccion1, $coneccion1); $query_RSPRD = "SELECT nombre FROM candidatos WHERE candidatos.idcargo=1 AND candidatos.idpartido=3"; $RSPRD = mysql_query($query_RSPRD, $coneccion1) or die(mysql_error()); $row_RSPRD = mysql_fetch_assoc($RSPRD); $totalRows_RSPRD = mysql_num_rows($RSPRD); mysql_select_db($database_coneccion1, $coneccion1); $query_RSPT = "SELECT nombre FROM candidatos WHERE candidatos.idcargo=1 AND candidatos.idpartido=4"; $RSPT = mysql_query($query_RSPT, $coneccion1) or die(mysql_error()); $row_RSPT = mysql_fetch_assoc($RSPT); $totalRows_RSPT = mysql_num_rows($RSPT); mysql_select_db($database_coneccion1, $coneccion1); $query_RSPVEM = "SELECT nombre FROM candidatos WHERE candidatos.idcargo=1 AND candidatos.idpartido=5"; Jair Iván Piñones García Página 85 Sistema Administrativo De Elecciones “SADE” $RSPVEM = mysql_query($query_RSPVEM, $coneccion1) or die(mysql_error()); $row_RSPVEM = mysql_fetch_assoc($RSPVEM); $totalRows_RSPVEM = mysql_num_rows($RSPVEM); mysql_select_db($database_coneccion1, $coneccion1); $query_Recordset1 = "SELECT nombre FROM candidatos WHERE candidatos.idcargo=1 AND candidatos.idpartido=6"; $Recordset1 = mysql_query($query_Recordset1, $coneccion1) or die(mysql_error()); $row_Recordset1 = mysql_fetch_assoc($Recordset1); $totalRows_Recordset1 = mysql_num_rows($Recordset1); mysql_select_db($database_coneccion1, $coneccion1); $query_RSPANAL = "SELECT nombre FROM candidatos WHERE candidatos.idcargo=1 AND candidatos.idpartido=7"; $RSPANAL = mysql_query($query_RSPANAL, $coneccion1) or die(mysql_error()); $row_RSPANAL = mysql_fetch_assoc($RSPANAL); $totalRows_RSPANAL = mysql_num_rows($RSPANAL); $_SESSION['usercircuns']=$row_RSelectores['circunscripcion']; $_SESSION['userestado']=$row_RSelectores['estado']; $_SESSION['usermunicipio']=$row_RSelectores['municipio']; $_SESSION['userdistrito']=$row_RSelectores['distrito']; $candicargo=$row_RScandidatos['idcargo']; $candipartido=$row_RScandidatos['idpartido']; $candicircun=$row_RScandidatos['circunscripcion']; $candiestado=$row_RScandidatos['estado']; $candimunicipio=$row_RScandidatos['municipio']; $candistrito=$row_RScandidatos['distrito']; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ansi" /> <title>Untitled Document</title> <link href="/SADEPrueba/Segura/estiloforms.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="/SADEPrueba/Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="1209" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <ul class="nav"> <form id="form1" name="form1" method="post" action=""> <p><?php echo $row_RSelectores['nombre']; ?></p> <p>&nbsp;<a href="<?php echo $logoutAction ?>">Log out</a></p> </form> </ul> <li> <a href="Segura/paneadmon.php"> Entrada Provisional</a></li> <li> <a href="#"> ¿Que es SADE? </a></li> <li> <a href="#"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1> VOTA </h1> <p>Vota por el candidato de tu preferencia.</p> <form id="form2" name="form2" method="post" action=""> <table width="100"> Jair Iván Piñones García Página 86 <tr> <td><label> <input type="radio" name="RadioGroup1" value="radio" id="RadioGroup1_0" /> PAN</label></td> <td align="center" valign="middle"> PARTIDO ACCION NACIONAL <input name="pan" type="image" id="pan" src="/SADEPrueba/Imagenes/SADE/logoPAN.jpg" align="middle" width="121" height="120" a /></td> <td align="center" valign="middle"><?php echo $row_RSPAN['nombre']; ?> </td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle"><label> <input type="radio" name="RadioGroup1" value="radio" id="RadioGroup1_1" /> PRI </label></td> <td align="center" valign="middle">PARTIDO REVOLUCIONARIO INSTITUCIONAL <input type="image" name="pri" id="pri" src="/SADEPrueba/Imagenes/SADE/PRI2_N.jpg" width="121" height="120" /></td> <td align="center" valign="middle"><?php echo $row_RSPRI['nombre']; ?></td> </tr> <tr> <td>&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> </tr> <tr> <td><label> <input type="radio" name="RadioGroup1" value="radio" id="RadioGroup1_2" /> PRD</label></td> <td align="center" valign="middle"> PARTIDO DE LA REVOLUCION DEMOCRATICA <input type="image" name="prd" id="prd" src="/SADEPrueba/Imagenes/SADE/logo_prd.jpg" width="121" height="120" /></td> <td align="center" valign="middle"><?php echo $row_RSPRD['nombre']; ?></td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle"><input type="radio" name="RadioGroup1" value="radio" id="RadioGroup1_3" /> PT</td> <td align="center" valign="middle">PARTIDO DEL TRABAJO <input type="image" name="pt" id="pt" src="/SADEPrueba/Imagenes/SADE/PT20Logo3.jpg" width="121" height="120" /></td> <td align="center" valign="middle"><?php echo $row_RSPT['nombre']; ?></td> </tr> <tr> <td>&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> </tr> <tr> <td><label> <input type="radio" name="RadioGroup1" value="radio" id="RadioGroup1_4" /> Jair Iván Piñones García Página 87 Sistema Administrativo De Elecciones “SADE” PVEM</label></td> <td align="center" valign="middle"> PARTIDO VERDE ECOLOGISTA DE MEXICO <input type="image" name="PVEM" id="PVEM" src="/SADEPrueba/Imagenes/SADE/yucatannews-logo-PVEM.jpg" width="121" height="120" /></td> <td align="center" valign="middle"><?php echo $row_RSPVEM['nombre']; ?></td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle"><input type="radio" name="RadioGroup1" value="radio" id="RadioGroup1_5" /> Convergencia </td> <td align="center" valign="middle">CONVERGENCIA <input type="image" name="convergencia" id="convergencia" src="/SADEPrueba/Imagenes/SADE/logo-convergencia370x2703.jpg" width="121" height="120" /></td> <td align="center" valign="middle"><?php echo $row_Recordset1['nombre']; ?></td> </tr> <tr> <td>&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> </tr> <tr> <td><label> <input type="radio" name="RadioGroup1" value="radio" id="RadioGroup1_6" /> PANAL</label></td> <td align="center" valign="middle"> PARTIDO NUEVA ALIANZA <input type="image" name="PANAL" id="PANAL" src="/SADEPrueba/Imagenes/SADE/Nueva_Alianza_logo.png" width="121" height="120" /></td> <td align="center" valign="middle"><?php echo $row_RSPANAL['nombre']; ?></td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> <td align="center" valign="middle">&nbsp;</td> </tr> </table> </form> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados ©, Jair Iván Piñones García 2010 Oficinas Centrales: Cerrada 28 A No. 5 Col. Santiago Atepetlac, Delegación Gustavo A. Madero, C.P. 07640, México,D.F. </p> <p>Este sitio se ve mejor en una resolución de 1024X768 píxeles o superior<!--fin del pie de pagina---></p> </div> <!--fin del contenedor--></div> </body> </html> <?php mysql_free_result($RSelectores); mysql_free_result($RScandidatos); mysql_free_result($RSpartido); mysql_free_result($RSPAN); Jair Iván Piñones García Página 88 mysql_free_result($RSPRI); mysql_free_result($RSPRD); mysql_free_result($RSPT); mysql_free_result($RSPVEM); mysql_free_result($Recordset1); mysql_free_result($RSPANAL); ?> Jair Iván Piñones García Página 89 Sistema Administrativo De Elecciones “SADE” 8.1.6. VOTO REALIZADO Figura. 29 Diseño de la página de Voto realizado Código. <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } ?> <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = "s,n"; $MM_donotCheckaccess = "false"; Jair Iván Piñones García Página 90 // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $_SESSION['MM_Username'], $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; Jair Iván Piñones García Página 91 Sistema Administrativo De Elecciones “SADE” case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $colname_RSelectores = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_RSelectores = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSelectores = sprintf("SELECT nombre FROM electores WHERE curp = %s", GetSQLValueString($colname_RSelectores, "text")); $RSelectores = mysql_query($query_RSelectores, $coneccion1) or die(mysql_error()); $row_RSelectores = mysql_fetch_assoc($RSelectores); $totalRows_RSelectores = mysql_num_rows($RSelectores); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <link href="/SADEPrueba/Segura/estiloforms.css" rel="stylesheet" type="text/css" /> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="../Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="1209" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <ul class="nav"> <form id="form1" name="form1" method="post" action=""> <p>Bienvenido, <?php echo $row_RSelectores['nombre']; ?> <p><a href="<?php echo $logoutAction ?>">Log out</a> </form> </ul> <li> <a href="#"> Entrada Provisional</a></li> <li> <a href="#"> ¿Qué es SADE?</a></li> <li> <a href="#"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1><img src="/SADEPrueba/Imagenes/SADE/votorealizado.gif" width="551" height="74" align="middle" /></h1> <p><a href="/SADEPrueba/Electores/eleccionesactivas.php">Regresar</a></p> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados ©, Jair Iván Piñones García 2010 Oficinas Centrales: Cerrada 28 A No. 5 Delegación Gustavo A. Madero, C.P. 07640, México,D.F. </p> Jair Iván Piñones García Col. Santiago Atepetlac, Página 92 <p>Este sitio se ve mejor en una resolución de 1024X768 píxeles o superior</p> <!--fin del pie de pagina---></div> <!--fin del contenedor--></div> </body> </html> <?php mysql_free_result($RSelectores); ?> Jair Iván Piñones García Página 93 Sistema Administrativo De Elecciones “SADE” 8.1.7. VOTO REGISTRADO. Figura 30. Diseño de la página de Voto Registrado Código. <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } ?> <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = "s,n"; $MM_donotCheckaccess = "false"; Jair Iván Piñones García Página 94 // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $_SESSION['MM_Username'], $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; Jair Iván Piñones García Página 95 Sistema Administrativo De Elecciones “SADE” case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $colname_RSelectores = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_RSelectores = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSelectores = sprintf("SELECT * FROM electores WHERE curp = %s", GetSQLValueString($colname_RSelectores, "text")); $RSelectores = mysql_query($query_RSelectores, $coneccion1) or die(mysql_error()); $row_RSelectores = mysql_fetch_assoc($RSelectores); $totalRows_RSelectores = mysql_num_rows($RSelectores); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <link href="/SADEPrueba/Segura/estiloforms.css" rel="stylesheet" type="text/css" /> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="../Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="1209" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <ul class="nav"> <form action="" method="post" name="form1" class="nav" id="form1"> <p>Bienvenido,<?php echo $row_RSelectores['nombre']; ?> </p> <p><a href="<?php echo $logoutAction ?>">Log out</a> </form> </ul> <li> <a href="#"> Entrada Provisional</a></li> <li> <a href="#"> ¿Qué es SADE?</a></li> <li> <a href="#"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1>SU VOTO YA FUE REGISTRADO<img src="/SADEPrueba/Imagenes/SADE/VotoRegistrado.gif" width="1021" height="173" align="middle" class="contenido" /></h1> <p>&nbsp;</p> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados ©, Jair Iván Piñones García 2010 Oficinas Centrales: Cerrada 28 A No. 5 Delegación Gustavo A. Madero, C.P. 07640, México,D.F. </p> Jair Iván Piñones García Col. Santiago Atepetlac, Página 96 <p>Este sitio se ve mejor en una resolución de 1024X768 píxeles o superior</p> <!--fin del pie de pagina---></div> <!--fin del contenedor--></div> </body> </html> <?php mysql_free_result($RSelectores); ?> </body> </html> Jair Iván Piñones García Página 97 Sistema Administrativo De Elecciones “SADE” 8.1.8. MENU ADMINISTRADORES. Figura 31. Diseño de la página del Menú de Administradores Código. <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } ?> <?php if (!isset($_SESSION)) { session_start(); } Jair Iván Piñones García Página 98 $MM_authorizedUsers = "s"; $MM_donotCheckaccess = "false"; // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $_SESSION['MM_Username'], $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": Jair Iván Piñones García Página 99 Sistema Administrativo De Elecciones “SADE” $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $colname_RSelectores = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_RSelectores = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSelectores = sprintf("SELECT * FROM electores WHERE curp = %s", GetSQLValueString($colname_RSelectores, "text")); $RSelectores = mysql_query($query_RSelectores, $coneccion1) or die(mysql_error()); $row_RSelectores = mysql_fetch_assoc($RSelectores); $totalRows_RSelectores = mysql_num_rows($RSelectores); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <link href="estiloforms.css" rel="stylesheet" type="text/css" /> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="/SADEPrueba/Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="100%" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <ul class="nav"> <form id="form1" name="form1" method="post" action=""> <p>Bienvenido,<?php echo $row_RSelectores['nombre']; ?> </p> <p><a href="<?php echo $logoutAction ?>">Log out</a> </form> </ul> <li> <a href="#"> Entrada Provisional</a></li> <li> <a href="#"> ¿Que es SADE¿</a></li> <li> <a href="#"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1> ADMINISTRADORES </h1> <p>Este es el menú de Administradores. Aquí podrás seleccionar alguna opcion de las siguientes que se muestran a continuación para atas o bajas de o manejo de una jornada electoral. </p> <h3><a href="/SADEPrueba/Segura/admoncandi.php">Candidatos.</a></h3> <h3><a href="/SADEPrueba/Segura/admonpartido.php">Partidos Políticos.</a></h3> Jair Iván Piñones García Página 100 <h3><a href="/SADEPrueba/Segura/admonelector.php">Electores.</a></h3> <h3><a href="/SADEPrueba/Segura/consultas.php">Consultas.</a></h3> <h3><a href="/SADEPrueba/Segura/Jornada.php">Jornada Electoral.</a></h3> <h3><a href="/SADEPrueba/Electores/tipodeusuario.php">Regresar al menú de usuario.</a> <!--fin del contenido---> </h3> </div> <div class="piedepagina"> <p>Derechos Reservados ©, Jair Iván Piñones García 2010 Oficinas Centrales: Cerrada 28 A No. 5 Delegación Gustavo A. Madero, C.P. 07640, México,D.F. </p> <p>Este sitio se ve mejor en una resolución de 1024X768 píxeles o superior</p> <!--fin del pie de pagina---></div> <!--fin del contenedor--></div> </body> </html> <?php mysql_free_result($RSelectores); ?> Jair Iván Piñones García Col. Santiago Atepetlac, Página 101 Sistema Administrativo De Elecciones “SADE” 8.1.9. INGRESAR CANDIDATO. Figura 32. Formulario para ingresar un candidato nuevo Código. <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } Jair Iván Piñones García Página 102 // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } ?> <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = "s"; $MM_donotCheckaccess = "false"; // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_UserGroup'])))) { Jair Iván Piñones García $_SESSION['MM_Username'], Página 103 Sistema Administrativo De Elecciones “SADE” $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) { $insertSQL = sprintf("INSERT INTO candidatos (nombre, edad, sexo, idpartido, idcargo, circunscripcion, municipio, estado) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", GetSQLValueString($_POST['nombre'], "text"), GetSQLValueString($_POST['edad'], "int"), GetSQLValueString($_POST['sexo'], "text"), GetSQLValueString($_POST['id_partido'], "int"), GetSQLValueString($_POST['idcargo'], "int"), GetSQLValueString($_POST['circunscripcion'], "int"), GetSQLValueString($_POST['municipio'], "int"), Jair Iván Piñones García Página 104 GetSQLValueString($_POST['estado'], "int")); mysql_select_db($database_coneccion1, $coneccion1); $Result1 = mysql_query($insertSQL, $coneccion1) or die(mysql_error()); $insertGoTo = "/SADEPrueba/Segura/admoncandi.php"; if (isset($_SERVER['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form3")) { $updateSQL = sprintf("UPDATE candidatos SET nombre=%s, edad=%s, sexo=%s, idpartido=%s, idcargo=%s, circunscripcion=%s, municipio=%s, estado=%s WHERE idcandidato=%s", GetSQLValueString($_POST['nombre2'], "text"), GetSQLValueString($_POST['edad2'], "int"), GetSQLValueString($_POST['sexo2'], "text"), GetSQLValueString($_POST['id_partido2'], "int"), GetSQLValueString($_POST['idcargo2'], "int"), GetSQLValueString($_POST['circunscripcion2'], "int"), GetSQLValueString($_POST['municipio2'], "int"), GetSQLValueString($_POST['estado2'], "int"), GetSQLValueString($_POST['idcandidato'], "int")); mysql_select_db($database_coneccion1, $coneccion1); $Result1 = mysql_query($updateSQL, $coneccion1) or die(mysql_error()); $updateGoTo = "/SADEPrueba/Segura/admoncandi.php"; if (isset($_SERVER['QUERY_STRING'])) { $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; $updateGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $updateGoTo)); } $currentPage = $_SERVER["PHP_SELF"]; $maxRows_RScandidatos = 10; $pageNum_RScandidatos = 0; if (isset($_GET['pageNum_RScandidatos'])) { $pageNum_RScandidatos = $_GET['pageNum_RScandidatos']; } $startRow_RScandidatos = $pageNum_RScandidatos * $maxRows_RScandidatos; mysql_select_db($database_coneccion1, $coneccion1); $query_RScandidatos = "SELECT * FROM candidatos"; $query_limit_RScandidatos = sprintf("%s LIMIT %d, %d", $query_RScandidatos, $startRow_RScandidatos, $maxRows_RScandidatos); $RScandidatos = mysql_query($query_limit_RScandidatos, $coneccion1) or die(mysql_error()); $row_RScandidatos = mysql_fetch_assoc($RScandidatos); if (isset($_GET['totalRows_RScandidatos'])) { $totalRows_RScandidatos = $_GET['totalRows_RScandidatos']; } else { $all_RScandidatos = mysql_query($query_RScandidatos); $totalRows_RScandidatos = mysql_num_rows($all_RScandidatos); } Jair Iván Piñones García Página 105 Sistema Administrativo De Elecciones “SADE” $totalPages_RScandidatos = ceil($totalRows_RScandidatos/$maxRows_RScandidatos)-1; $colname_RSelectores = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_RSelectores = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSelectores = sprintf("SELECT * FROM electores WHERE curp = %s", GetSQLValueString($colname_RSelectores, "text")); $RSelectores = mysql_query($query_RSelectores, $coneccion1) or die(mysql_error()); $row_RSelectores = mysql_fetch_assoc($RSelectores); $totalRows_RSelectores = mysql_num_rows($RSelectores); $queryString_RScandidatos = ""; if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum_RScandidatos") == false && stristr($param, "totalRows_RScandidatos") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString_RScandidatos = "&" . htmlentities(implode("&", $newParams)); } } $queryString_RScandidatos = sprintf("&totalRows_RScandidatos=%d%s", $totalRows_RScandidatos, $queryString_RScandidatos); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <style type="text/css"> body,td,th { font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; font-size: 100%; color: #600; } body { background-color: #FFF; } a:link { color: #00F; } a:visited { color: #06F; } a:hover { color: #09C; } a:active { color: #0FF; } h1 { font-size: 150%; color: #003; Jair Iván Piñones García Página 106 } h2 { font-size: 125%; color: #006; } h3 { font-size: 112%; color: #009; } .contenedor{ width:100%; max-width:1260px; max-height:720px; background: position:relative } .sidebar1 { float: left; width: 20%; background: #93A5C4; padding-bottom: 10px; } .contenido { padding:10px 0; width:79%; float:right; #FFF; margin: 0 auto; } .contenido ul, contenido ol{ padding: 0 15px 15px 40px; } ul.nav{ list-style:none; border-top:1px solid #666; margin-bottom:15px; } ul.nav li{ border-bottom:1px solid #666; } ul.nav a, ul.nav a:visited{ padding: 5px 5px 5px 15px; display:block; text-decoration:none; background:#8090AB; color:#000; } ul.nav a:hover, ul.nav a:active, ul.nav a:focus{ background:#6F7D94; color:#FFF; } .piedepagina { padding: 10px 0; background:#6F7D94; position:relative; clear:both; } </style> <link href="/SADEPrueba/Segura/estiloforms.css" rel="stylesheet" type="text/css" /> <script src="/SADEPrueba/SpryAssets/SpryValidationTextField.js" type="text/javascript"></script><script type="text/javascript"> function MM_validateForm() { //v4.0 if (document.getElementById){ var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments; for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]); if (val) { nm=val.name; if ((val=val.value)!="") { Jair Iván Piñones García Página 107 Sistema Administrativo De Elecciones “SADE” if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@'); if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n'; } else if (test!='R') { num = parseFloat(val); if (isNaN(val)) errors+='- '+nm+' must contain a number.\n'; if (test.indexOf('inRange') != -1) { p=test.indexOf(':'); min=test.substring(8,p); max=test.substring(p+1); if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n'; } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; } } if (errors) alert('The following error(s) occurred:\n'+errors); document.MM_returnValue = (errors == ''); }} </script> <link href="/SADEPrueba/SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="/SADEPrueba/Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <ul class="nav"> <form id="form1" name="form1" method="post" action=""> <p>Bienvenido, <?php echo $row_RSelectores['nombre']; ?></p> <p><a href="<?php echo $logoutAction ?>">Log out</a> </form> </ul> <li> <a href="#"> Entrada Provisional</a></li> <li> <a href="#"> ¿Que es SADE?</a></li> <li> <a href="#"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1>INGRESAR CANDIDATO</h1> <form action="<?php echo $editFormAction; ?>" method="POST" name="form2" id="form2" > <p>&nbsp; Records <?php echo ($startRow_RScandidatos + 1) ?> to <?php echo min($startRow_RScandidatos + $maxRows_RScandidatos, $totalRows_RScandidatos) ?> of <?php echo $totalRows_RScandidatos ?> </p> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>idcandidato</td> <td>nombre</td> <td>edad</td> <td>sexo</td> <td>idpartido</td> <td>idcargo</td> <td>circunscripcion</td> <td>municipio</td> <td>estado</td> </tr> <?php do { ?> <tr> <td><?php echo $row_RScandidatos['idcandidato']; ?></td> <td><?php echo $row_RScandidatos['nombre']; ?></td> <td><?php echo $row_RScandidatos['edad']; ?></td> <td><?php echo $row_RScandidatos['sexo']; ?></td> <td><?php echo $row_RScandidatos['idpartido']; ?></td> <td><?php echo $row_RScandidatos['idcargo']; ?></td> <td><?php echo $row_RScandidatos['circunscripcion']; ?></td> Jair Iván Piñones García Página 108 <td><?php echo $row_RScandidatos['municipio']; ?></td> <td><?php echo $row_RScandidatos['estado']; ?></td> </tr> <?php } while ($row_RScandidatos = mysql_fetch_assoc($RScandidatos)); ?> </table><table border="0"> <tr> <td><?php if ($pageNum_RScandidatos > 0) { // Show if not first page ?> <a href="<?php printf("%s?pageNum_RScandidatos=%d%s", $currentPage, 0, $queryString_RScandidatos); ?>">First</a> <?php } // Show if not first page ?></td> <td><?php if ($pageNum_RScandidatos > 0) { // Show if not first page ?> <a href="<?php printf("%s?pageNum_RScandidatos=%d%s", $currentPage, max(0, $pageNum_RScandidatos - 1), $queryString_RScandidatos); ?>">Previous</a> <?php } // Show if not first page ?></td> <td><?php if ($pageNum_RScandidatos < $totalPages_RScandidatos) { // Show if not last page ?> <a href="<?php printf("%s?pageNum_RScandidatos=%d%s", $currentPage, min($totalPages_RScandidatos, $pageNum_RScandidatos + 1), $queryString_RScandidatos); ?>">Next</a> <?php } // Show if not last page ?></td> <td><?php if ($pageNum_RScandidatos < $totalPages_RScandidatos) { // Show if not last page ?> <a href="<?php printf("%s?pageNum_RScandidatos=%d%s", $currentPage, $totalPages_RScandidatos, $queryString_RScandidatos); ?>">Last</a> <?php } // Show if not last page ?></td> </tr> </table> </p> <table width="200" border="1"> <tr> <td><label for="nombre">Nombre:</label></td> <td><span id="sprytextfield2"> <input type="text" name="nombre" id="nombre" /> <span class="textfieldRequiredMsg">Obligatorio.</span><span class="textfieldMaxCharsMsg">Sobrepasó el número máximo de caracteres permitidos.</span></span></td> </tr> <tr> <td><label for="edad2">Edad:</label></td> <td><span id="sprytextfield3"> <input type="text" name="edad" id="edad" /> <span class="textfieldRequiredMsg">Obligatorio.</span><span class="textfieldInvalidFormatMsg">Formato Invalido.</span><span class="textfieldMinCharsMsg">Número minimo de caracteres es 2.</span><span class="textfieldMaxCharsMsg">El número maximo de caracteres es 3.</span><span class="textfieldMinValueMsg">El valor introducido es menor a 18.</span></span></td> </tr> <tr> <td>Sexo: </td> <td><span id="sprytextfield4"> <input type="text" name="sexo" id="sexo" /> <span class="textfieldRequiredMsg">Obligatorio.</span><span class="textfieldMinCharsMsg">El número minimo de caracteres es 1.</span><span class="textfieldMaxCharsMsg">Excedio el número maximo de caracteres.</span></span></td> </tr> <tr> <td><label for="id_partido2">ID Partido: </label></td> <td><span id="sprytextfield6"> <input type="text" name="id_partido" id="id_partido" /> <span class="textfieldRequiredMsg">Obligatorio.</span><span class="textfieldInvalidFormatMsg">Formato Invalido.</span><span class="textfieldMinCharsMsg">El número minimo de caracteres es 1.</span><span class="textfieldMaxCharsMsg">Excedio el número maximo de caracteres.</span><span class="textfieldMinValueMsg">No puede introducir valores menores a 1.</span><span class="textfieldMaxValueMsg">Valor no valido.</span></span></td> </tr> <tr> <td>ID Cargo:</td> Jair Iván Piñones García Página 109 Sistema Administrativo De Elecciones “SADE” <td><span id="sprytextfield7"> <label for="idcargo2"></label> <input type="text" name="idcargo" id="idcargo2" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span><span class="textfieldMinValueMsg">The entered value is less than the minimum required.</span><span class="textfieldMaxValueMsg">The entered value is greater than the maximum allowed.</span></span></td> </tr> <tr> <td><label for="circunscripcion6">Circunscripción: </label></td> <td><span id="sprytextfield10"> <label for="circunscripcion5"></label> <input type="text" name="circunscripcion" id="circunscripcion5" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span><span class="textfieldMinValueMsg">The entered value is less than the minimum required.</span><span class="textfieldMaxValueMsg">The entered value is greater than the maximum allowed.</span></span></td> </tr> <tr> <td>Municipio: </td> <td><span id="sprytextfield11"> <label for="municipio2"></label> <input type="text" name="municipio" id="municipio2" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span></span></td> </tr> <tr> <td>Estado: </td> <td><span id="sprytextfield12"> <label for="estado3"></label> <input type="text" name="estado" id="estado3" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span><span class="textfieldMinValueMsg">The entered value is less than the minimum required.</span><span class="textfieldMaxValueMsg">The entered value is greater than the maximum allowed.</span></span></td> </tr> <tr> <td><input type="submit" name="Insertar" id="Insertar" value="Insertar Registro" /></td> <td>&nbsp;</td> </tr> </table> <p> <input type="hidden" name="MM_insert" value="form2" /> </p> <input type="hidden" name="MM_insert" value="form2" /> </form> <form action="<?php echo $editFormAction; ?>" method="POST" name="form3" id="form3"> <table width="200" border="1"> <tr> <td>ID Candidato</td> <td><label for="idcandidato"></label> Jair Iván Piñones García Página 110 <input type="text" name="idcandidato" id="idcandidato" /></td> </tr> <tr> <td><label for="nombre">Nombre:</label></td> <td><span id="sprytextfield"> <input type="text" name="nombre2" id="nombre" /> <span class="textfieldRequiredMsg">Obligatorio.</span><span class="textfieldMaxCharsMsg">Sobrepasó el número máximo de caracteres permitidos.</span></span></td> </tr> <tr> <td><label for="edad4">Edad:</label></td> <td><span id="sprytextfield5"> <input type="text" name="edad2" id="edad2" /> <span class="textfieldRequiredMsg">Obligatorio.</span><span class="textfieldInvalidFormatMsg">Formato Invalido.</span><span class="textfieldMinCharsMsg">Número minimo de caracteres es 2.</span><span class="textfieldMaxCharsMsg">El número maximo de caracteres es 3.</span><span class="textfieldMinValueMsg">El valor introducido es menor a 18.</span></span></td> </tr> <tr> <td>Sexo: </td> <td><span id="sprytextfield8"> <input type="text" name="sexo2" id="sexo2" /> <span class="textfieldRequiredMsg">Obligatorio.</span><span class="textfieldMinCharsMsg">El número minimo de caracteres es 1.</span><span class="textfieldMaxCharsMsg">Excedio el número maximo de caracteres.</span></span></td> </tr> <tr> <td><label for="id_partido4">ID Partido: </label></td> <td><span id="sprytextfield9"> <input type="text" name="id_partido2" id="id_partido2" /> <span class="textfieldRequiredMsg">Obligatorio.</span><span class="textfieldInvalidFormatMsg">Formato Invalido.</span><span class="textfieldMinCharsMsg">El número minimo de caracteres es 1.</span><span class="textfieldMaxCharsMsg">Excedio el número maximo de caracteres.</span><span class="textfieldMinValueMsg">No puede introducir valores menores a 1.</span><span class="textfieldMaxValueMsg">Valor no valido.</span></span></td> </tr> <tr> <td>ID Cargo:</td> <td><span id="sprytextfield13"> <label for="idcargo4"></label> <input type="text" name="idcargo2" id="idcargo4" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span><span class="textfieldMinValueMsg">The entered value is less than the minimum required.</span><span class="textfieldMaxValueMsg">The entered value is greater than the maximum allowed.</span></span></td> </tr> <tr> <td><label for="circunscripcion9">Circunscripción: </label></td> <td><span id="sprytextfield14"> <label for="circunscripcion10"></label> <input type="text" name="circunscripcion2" id="circunscripcion10" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span><span class="textfieldMinValueMsg">The entered value is less than the minimum required.</span><span class="textfieldMaxValueMsg">The entered value is greater than the maximum allowed.</span></span></td> </tr> <tr> <td>Municipio: </td> <td><span id="sprytextfield15"> Jair Iván Piñones García Página 111 Sistema Administrativo De Elecciones “SADE” <label for="municipio4"></label> <input type="text" name="municipio2" id="municipio4" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span></span></td> </tr> <tr> <td>Estado: </td> <td><span id="sprytextfield16"> <label for="estado5"></label> <input type="text" name="estado2" id="estado5" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span><span class="textfieldMinValueMsg">The entered value is less than the minimum required.</span><span class="textfieldMaxValueMsg">The entered value is greater than the maximum allowed.</span></span></td> </tr> <tr> <td><input type="submit" name="Insertar2" id="Insertar2" value="Insertar Registro" /></td> <td>&nbsp;</td> </tr> <tr> </tr> <tr> </tr> <tr> </tr> <tr> </tr> <tr> </tr> <tr> </tr> <tr> </tr> <tr> </tr> </table> <p>&nbsp;</p> <p><a href="/SADEPrueba/Segura/paneadmon.php">Regresar al menú principal.</a></p> <input type="hidden" name="MM_update" value="form3" /> </form> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados ©, Jair Iván Piñones García 2010 Oficinas Centrales: Cerrada 28 A No. 5 Col. Santiago Atepetlac, Delegación Gustavo A. Madero, C.P. 07640, México,D.F. </p> <p>Este sitio se ve mejor en una resolución de 1024X768 píxeles o superior</p> <!--fin del pie de pagina---></div> <!--fin del contenedor--></div> <script type="text/javascript"> var sprytextfield2 = new Spry.Widget.ValidationTextField("sprytextfield2", "none", {validateOn:["blur"], maxChars:50, hint:"Escriba el Nombre Completo del Elector "}); var sprytextfield3 = new Spry.Widget.ValidationTextField("sprytextfield3", "integer", {validateOn:["blur"], hint:"Escribe la Edad del Elector", minChars:2, maxChars:3, minValue:18}); var sprytextfield4 = new Spry.Widget.ValidationTextField("sprytextfield4", "none", {validateOn:["blur"], minChars:1, maxChars:1, hint:"Escribe H para hombre y M para mujer."}); var sprytextfield6 = new Spry.Widget.ValidationTextField("sprytextfield6", "integer", {hint:"Clave del partido politico", minChars:1, maxChars:2, minValue:1, maxValue:99, validateOn:["blur"]}); var sprytextfield7 = new Spry.Widget.ValidationTextField("sprytextfield7", "integer", {hint:"Escribe los 2 digitos del Partido", minChars:2, maxChars:2, minValue:1, maxValue:99, validateOn:["blur"]}); var sprytextfield10 = new Spry.Widget.ValidationTextField("sprytextfield10", "integer", {hint:"Escribe el digito de la circunscripcion", minChars:1, maxChars:1, minValue:1, maxValue:5, validateOn:["blur"]}); Jair Iván Piñones García Página 112 var sprytextfield11 = new Spry.Widget.ValidationTextField("sprytextfield11", "integer", {hint:"Escribe los digitos para el municipio", minChars:1, maxChars:3, validateOn:["blur"]}); var sprytextfield12 = new Spry.Widget.ValidationTextField("sprytextfield12", "integer", {hint:"Escribe los digitos del estado", minChars:1, maxChars:2, minValue:1, maxValue:32, validateOn:["blur"]}); var sprytextfield16 = new Spry.Widget.ValidationTextField("sprytextfield16", "integer", {hint:"Escribe los digitos del estado", minChars:1, maxChars:2, minValue:1, maxValue:32, validateOn:["blur"]}); var sprytextfield15 = new Spry.Widget.ValidationTextField("sprytextfield15", "integer", {hint:"Escribe los digitos para el municipio", minChars:1, maxChars:3, validateOn:["blur"]}); var sprytextfield14 = new Spry.Widget.ValidationTextField("sprytextfield14", "integer", {hint:"Escribe el digito de la circunscripcion", minChars:1, maxChars:1, minValue:1, maxValue:5, validateOn:["blur"]}); var sprytextfield13 = new Spry.Widget.ValidationTextField("sprytextfield13", "integer", {hint:"Escribe los 2 digitos del Partido", minChars:2, maxChars:2, minValue:1, maxValue:99, validateOn:["blur"]}); var sprytextfield9 = new Spry.Widget.ValidationTextField("sprytextfield9", "integer", {hint:"Clave del partido politico", minChars:1, maxChars:2, minValue:1, maxValue:99, validateOn:["blur"]}); var sprytextfield8 = new Spry.Widget.ValidationTextField("sprytextfield8", "none", {validateOn:["blur"], minChars:1, maxChars:1, hint:"Escribe H para hombre y M para mujer."}); var sprytextfield = new Spry.Widget.ValidationTextField("sprytextfield", "none", {validateOn:["blur"], maxChars:50, hint:"Escriba el Nombre Completo del Elector "}); var sprytextfield5 = new Spry.Widget.ValidationTextField("sprytextfield5", "integer", {validateOn:["blur"], hint:"Escribe la Edad del Elector", minChars:2, maxChars:3, minValue:18}); </script> </body> </html> <?php mysql_free_result($RScandidatos); mysql_free_result($RSelectores); ?> Jair Iván Piñones García Página 113 Sistema Administrativo De Elecciones “SADE” 8.1.10. CONSULTAS DE ESTADOS. Figura 33. Diseño de la página de la consulta de los estados por clave Código. <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; Jair Iván Piñones García Página 114 } } ?> <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = "s"; $MM_donotCheckaccess = "false"; // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); Jair Iván Piñones García Página 115 Sistema Administrativo De Elecciones “SADE” switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $currentPage = $_SERVER["PHP_SELF"]; $maxRows_RSEstados = 10; $pageNum_RSEstados = 0; if (isset($_GET['pageNum_RSEstados'])) { $pageNum_RSEstados = $_GET['pageNum_RSEstados']; } $startRow_RSEstados = $pageNum_RSEstados * $maxRows_RSEstados; mysql_select_db($database_coneccion1, $coneccion1); $query_RSEstados = "SELECT * FROM estados"; $query_limit_RSEstados = sprintf("%s LIMIT %d, %d", $query_RSEstados, $startRow_RSEstados, $maxRows_RSEstados); $RSEstados = mysql_query($query_limit_RSEstados, $coneccion1) or die(mysql_error()); $row_RSEstados = mysql_fetch_assoc($RSEstados); if (isset($_GET['totalRows_RSEstados'])) { $totalRows_RSEstados = $_GET['totalRows_RSEstados']; } else { $all_RSEstados = mysql_query($query_RSEstados); $totalRows_RSEstados = mysql_num_rows($all_RSEstados); } $totalPages_RSEstados = ceil($totalRows_RSEstados/$maxRows_RSEstados)-1; $colname_RSelectores = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_RSelectores = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSelectores = sprintf("SELECT nombre FROM electores WHERE curp = %s", GetSQLValueString($colname_RSelectores, "text")); $RSelectores = mysql_query($query_RSelectores, $coneccion1) or die(mysql_error()); $row_RSelectores = mysql_fetch_assoc($RSelectores); $totalRows_RSelectores = mysql_num_rows($RSelectores); $queryString_RSEstados = ""; Jair Iván Piñones García Página 116 if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum_RSEstados") == false && stristr($param, "totalRows_RSEstados") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString_RSEstados = "&" . htmlentities(implode("&", $newParams)); } } $queryString_RSEstados = sprintf("&totalRows_RSEstados=%d%s", $totalRows_RSEstados, $queryString_RSEstados); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <link href="estiloforms.css" rel="stylesheet" type="text/css" /> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="/SADEPrueba/Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="100%" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <ul class="nav"> <form id="form1" name="form1" method="post" action=""> <p>Bienvenido, <?php echo $row_RSelectores['nombre']; ?> </p> <p><a href="<?php echo $logoutAction ?>">Log out</a> </form> </ul> <li> <a href="#"> Entrada Provisional</a></li> <li> <a href="#"> ¿Que es SADE¿</a></li> <li> <a href="#"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1> ESTADOS </h1> <form id="form2" name="form2" method="post" action=""> <p>&nbsp; Mostrando registro <?php echo ($startRow_RSEstados + 1) ?>hasta <?php echo min($startRow_RSEstados + $maxRows_RSEstados, $totalRows_RSEstados) ?> de <?php echo $totalRows_RSEstados ?> </p> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>estado</td> <td>nombre</td> <td>circunscripcion</td> </tr> <?php do { ?> <tr> <td><?php echo $row_RSEstados['estado']; ?></td> <td><?php echo $row_RSEstados['nombre']; ?></td> <td><?php echo $row_RSEstados['circunscripcion']; ?></td> </tr> Jair Iván Piñones García Página 117 Sistema Administrativo De Elecciones “SADE” <?php } while ($row_RSEstados = mysql_fetch_assoc($RSEstados)); ?> </table> <table border="0"> <tr> <td><?php if ($pageNum_RSEstados > 0) { // Show if not first page ?> <a href="<?php printf("%s?pageNum_RSEstados=%d%s", $currentPage, 0, $queryString_RSEstados); ?>">First</a> <?php } // Show if not first page ?></td> <td><?php if ($pageNum_RSEstados > 0) { // Show if not first page ?> <a href="<?php printf("%s?pageNum_RSEstados=%d%s", $currentPage, max(0, $pageNum_RSEstados - 1), $queryString_RSEstados); ?>">Previous</a> <?php } // Show if not first page ?></td> <td><?php if ($pageNum_RSEstados < $totalPages_RSEstados) { // Show if not last page ?> <a href="<?php printf("%s?pageNum_RSEstados=%d%s", $currentPage, min($totalPages_RSEstados, $pageNum_RSEstados + 1), $queryString_RSEstados); ?>">Next</a> <?php } // Show if not last page ?></td> <td><?php if ($pageNum_RSEstados < $totalPages_RSEstados) { // Show if not last page ?> <a href="<?php printf("%s?pageNum_RSEstados=%d%s", $currentPage, $totalPages_RSEstados, $queryString_RSEstados); ?>">Last</a> <?php } // Show if not last page ?></td> </tr> </table> <a href="/SADEPrueba/Segura/consultas.php"> </p> Regresar a consultas.</a> </form> </div> <div class="piedepagina"> <p>Derechos Reservados ©, Jair Iván Piñones García 2010 Oficinas Centrales: Cerrada 28 A No. 5 Delegación Gustavo A. Madero, C.P. 07640, México,D.F. </p> <p>Este sitio se ve mejor en una resolución de 1024X768 píxeles o superior</p> <!--fin del pie de pagina---></div> <!--fin del contenedor--></div> </body> </html> <?php mysql_free_result($RSEstados); Col. Santiago Atepetlac, mysql_free_result($RSelectores); ?> Jair Iván Piñones García Página 118 8.1.11. JORNADA ELECTORAL. Figura 34. Diseño de la página para ingresar una jornada electoral Código. <?php require_once('../Connections/coneccion1.php'); ?> <?php //initialize the session if (!isset($_SESSION)) { session_start(); } // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles $_SESSION['MM_Username'] = NULL; $_SESSION['MM_UserGroup'] = NULL; $_SESSION['PrevUrl'] = NULL; unset($_SESSION['MM_Username']); unset($_SESSION['MM_UserGroup']); unset($_SESSION['PrevUrl']); $logoutGoTo = "/SADEPrueba/index.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } Jair Iván Piñones García Página 119 Sistema Administrativo De Elecciones “SADE” ?> <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = "s"; $MM_donotCheckaccess = "false"; // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "/SADEPrueba/accesorestringido.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $MM_referrer .= "?" . $_SERVER['QUERY_STRING']; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php virtual('/SADEPrueba/Connections/coneccion1.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $_SESSION['MM_Username'], $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); Jair Iván Piñones García Página 120 switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $currentPage = $_SERVER["PHP_SELF"]; $editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) { Jair Iván Piñones García Página 121 Sistema Administrativo De Elecciones “SADE” $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) { $insertSQL = sprintf("INSERT INTO elecciones (idtipoeleccion, idcargo, fecha) VALUES (%s, %s, %s)", GetSQLValueString($_POST['tipoeleccion'], "int"), GetSQLValueString($_POST['tipocargo'], "int"), GetSQLValueString($_POST['fecha'], "date")); mysql_select_db($database_coneccion1, $coneccion1); $Result1 = mysql_query($insertSQL, $coneccion1) or die(mysql_error()); } $maxRows_RSEleccion = 10; $pageNum_RSEleccion = 0; if (isset($_GET['pageNum_RSEleccion'])) { $pageNum_RSEleccion = $_GET['pageNum_RSEleccion']; } $startRow_RSEleccion = $pageNum_RSEleccion * $maxRows_RSEleccion; mysql_select_db($database_coneccion1, $coneccion1); $query_RSEleccion = "SELECT * FROM elecciones"; $query_limit_RSEleccion = sprintf("%s LIMIT %d, %d", $query_RSEleccion, $startRow_RSEleccion, $maxRows_RSEleccion); $RSEleccion = mysql_query($query_limit_RSEleccion, $coneccion1) or die(mysql_error()); $row_RSEleccion = mysql_fetch_assoc($RSEleccion); if (isset($_GET['totalRows_RSEleccion'])) { $totalRows_RSEleccion = $_GET['totalRows_RSEleccion']; } else { $all_RSEleccion = mysql_query($query_RSEleccion); $totalRows_RSEleccion = mysql_num_rows($all_RSEleccion); } $totalPages_RSEleccion = ceil($totalRows_RSEleccion/$maxRows_RSEleccion)-1; mysql_select_db($database_coneccion1, $coneccion1); $query_RStipoeleccion = "SELECT * FROM tipo_eleccion"; $RStipoeleccion = mysql_query($query_RStipoeleccion, $coneccion1) or die(mysql_error()); $row_RStipoeleccion = mysql_fetch_assoc($RStipoeleccion); $totalRows_RStipoeleccion = mysql_num_rows($RStipoeleccion); mysql_select_db($database_coneccion1, $coneccion1); $query_RScargo = "SELECT * FROM tipo_cargo"; $RScargo = mysql_query($query_RScargo, $coneccion1) or die(mysql_error()); $row_RScargo = mysql_fetch_assoc($RScargo); $totalRows_RScargo = mysql_num_rows($RScargo); $colname_RSelectores = "-1"; if (isset($_SESSION['MM_Username'])) { $colname_RSelectores = $_SESSION['MM_Username']; } mysql_select_db($database_coneccion1, $coneccion1); $query_RSelectores = sprintf("SELECT nombre FROM electores WHERE curp = %s", GetSQLValueString($colname_RSelectores, "text")); $RSelectores = mysql_query($query_RSelectores, $coneccion1) or die(mysql_error()); $row_RSelectores = mysql_fetch_assoc($RSelectores); $totalRows_RSelectores = mysql_num_rows($RSelectores); $queryString_RSEleccion = ""; Jair Iván Piñones García Página 122 if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum_RSEleccion") == false && stristr($param, "totalRows_RSEleccion") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString_RSEleccion = "&" . htmlentities(implode("&", $newParams)); } } $queryString_RSEleccion = sprintf("&totalRows_RSEleccion=%d%s", $totalRows_RSEleccion, $queryString_RSEleccion); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <link href="/SADEPrueba/Segura/estiloforms.css" rel="stylesheet" type="text/css" /> <script src="/SADEPrueba/SpryAssets/SpryValidationTextField.js" type="text/javascript"></script> <link href="/SADEPrueba/SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="../Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="1209" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <ul class="nav"> <form id="form1" name="form1" method="post" action=""> <p>Bienvenido, <?php echo $row_RSelectores['nombre']; ?> </p> <p><a href="<?php echo $logoutAction ?>">Log out</a> </form> </ul> <li> <a href="Segura/paneadmon.php"> Entrada Provisional</a></li> <li> <a href="#"> ¿Que es SADE? </a></li> <li> <a href="#"> Consulta de Resultados</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1>JORNADA ELECTORAL</h1> <h3>En esta seccion se crea y administra una jornada electoral</h3> <form id="fecha" name="form2" method="POST" action="<?php echo $editFormAction; ?>"> <p> <label for="tipocargo"></label> <label for="tipoeleccion"></label> Tipo de Elección <select name="tipoeleccion" id="tipoeleccion"> <?php do { ?> <option value="<?php echo $row_RStipoeleccion['idtipoeleccion']?>"<?php if (!(strcmp($row_RStipoeleccion['idtipoeleccion'], $row_RStipoeleccion['idtipoeleccion']))) {echo "selected=\"selected\"";} ?>><?php echo $row_RStipoeleccion['descripcion']?></option> <?php } while ($row_RStipoeleccion = mysql_fetch_assoc($RStipoeleccion)); $rows = mysql_num_rows($RStipoeleccion); Jair Iván Piñones García Página 123 Sistema Administrativo De Elecciones “SADE” if($rows > 0) { mysql_data_seek($RStipoeleccion, 0); $row_RStipoeleccion = mysql_fetch_assoc($RStipoeleccion); } ?> </select> Tipo de cargo: <select name="tipocargo" size="1" id="tipocargo"> <?php do { ?> <option value="<?php echo $row_RScargo['idcargo']?>"<?php if (!(strcmp($row_RScargo['idcargo'], $row_RScargo['idcargo']))) {echo "selected=\"selected\"";} ?>><?php echo $row_RScargo['nombrecargo']?></option> <?php } while ($row_RScargo = mysql_fetch_assoc($RScargo)); $rows = mysql_num_rows($RScargo); if($rows > 0) { mysql_data_seek($RScargo, 0); $row_RScargo = mysql_fetch_assoc($RScargo); } ?> </select> Fecha: <label for="fecha"></label> <label for="fecha"></label> <span id="sprytextfield1"> <label for="fecha"></label> <input name="fecha" type="text" id="fecha" value="<?php echo $row_RSEleccion['fecha']; ?>" /> <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span></span> </p> <p> <input type="submit" name="registrar" id="registrar" value="Registrar" /> </p> <p>Jornadas </p> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>claveideleccion</td> <td>idtipoeleccion</td> <td>idcargo</td> <td>fecha</td> </tr> <?php do { ?> <tr> <td><?php echo $row_RSEleccion['claveideleccion']; ?></td> <td><?php echo $row_RSEleccion['idtipoeleccion']; ?></td> <td><?php echo $row_RSEleccion['idcargo']; ?></td> <td><?php echo $row_RSEleccion['fecha']; ?></td> </tr> <?php } while ($row_RSEleccion = mysql_fetch_assoc($RSEleccion)); ?> </table> <table border="0"> <tr> <td><?php if ($pageNum_RSEleccion > 0) { // Show if not first page ?> <a href="<?php printf("%s?pageNum_RSEleccion=%d%s", $currentPage, 0, $queryString_RSEleccion); ?>"><img src="/SADEPrueba/Imagenes/SADE/First.gif" /></a> <?php } // Show if not first page ?></td> <td><?php if ($pageNum_RSEleccion > 0) { // Show if not first page ?> Jair Iván Piñones García Página 124 <a href="<?php printf("%s?pageNum_RSEleccion=%d%s", $currentPage, max(0, $pageNum_RSEleccion 1), $queryString_RSEleccion); ?>"><img src="/SADEPrueba/Imagenes/SADE/Previous.gif" /></a> <?php } // Show if not first page ?></td> <td><?php if ($pageNum_RSEleccion < $totalPages_RSEleccion) { // Show if not last page ?> <a href="<?php printf("%s?pageNum_RSEleccion=%d%s", $currentPage, min($totalPages_RSEleccion, $pageNum_RSEleccion + 1), $queryString_RSEleccion); ?>"><img src="/SADEPrueba/Imagenes/SADE/Next.gif" /></a> <?php } // Show if not last page ?></td> <td><?php if ($pageNum_RSEleccion < $totalPages_RSEleccion) { // Show if not last page ?> <a href="<?php printf("%s?pageNum_RSEleccion=%d%s", $currentPage, $totalPages_RSEleccion, $queryString_RSEleccion); ?>"><img src="/SADEPrueba/Imagenes/SADE/Last.gif" /></a> <?php } // Show if not last page ?></td> </tr> </table> </p> <p><a href="/SADEPrueba/Segura/paneadmon.php">Regresar al menú Principal</a></p> <p> <input type="hidden" name="MM_insert" value="form2" /> </p> </form> <p>&nbsp;</p> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados ©, Jair Iván Piñones García 2010 Oficinas Centrales: Cerrada 28 A No. 5 Col. Santiago Atepetlac, Delegación Gustavo A. Madero, C.P. 07640, México,D.F. </p> <p>Este sitio se ve mejor en una resolución de 1024X768 píxeles o superior<!--fin del pie de pagina---></p> </div> <!--fin del contenedor--></div> <script type="text/javascript"> var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1", "date", {format:"yyyy-mm-dd", hint:"AAAA-MM-DD", validateOn:["blur"]}); </script> </body> </html> <?php mysql_free_result($RSEleccion); mysql_free_result($RStipoeleccion); mysql_free_result($RScargo); mysql_free_result($RSelectores); ?> Jair Iván Piñones García Página 125 Sistema Administrativo De Elecciones “SADE” 8.1.12. RESULTADOS. Figura 35. Diseño de la Página de Resultados Código. <?php virtual('/SADEPrueba/Connections/coneccion1.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; Jair Iván Piñones García Página 126 break; } return $theValue; } } mysql_select_db($database_coneccion1, $coneccion1); $query_RScandidatos = "SELECT candidatos.nombre, partidopolitico.Acronimo, candidatos.votos FROM candidatos, partidopolitico WHERE partidopolitico.idpartido=candidatos.idpartido AND candidatos.idcargo=1"; $RScandidatos = mysql_query($query_RScandidatos, $coneccion1) or die(mysql_error()); $row_RScandidatos = mysql_fetch_assoc($RScandidatos); $totalRows_RScandidatos = mysql_num_rows($RScandidatos); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <link href="/SADEPrueba/Segura/estiloforms.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="contenedor"> <div class="encabezado"><a href="#"><img src="Imagenes/SADE/SADE.gif" alt="Inserrta logo" name="logotipo" width="100%" height="151" style="background:#FFF; display:block;" /></a> <!--Fin del encabezado---> </div> <div class="sidebar1"> <p> <li><a href="index.php">Regresar</a></li> <p><!--fin de la barra---></div> <div class="contenido"> <h1>Resultados de Eleccion de Presidente de la Republica</h1> <p><img src="resultados.php"/>.</p> <p>Candidatos:</p> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td><strong><em>Nombre del Candidato</em></strong></td> <td><strong><em>Partido Politico</em></strong></td> <td><strong><em>No. Total de Votos</em></strong></td> </tr> <?php do { ?> <tr> <td><?php echo $row_RScandidatos['nombre']; ?></td> <td><?php echo $row_RScandidatos['Acronimo']; ?></td> <td><?php echo $row_RScandidatos['votos']; ?></td> </tr> <?php } while ($row_RScandidatos = mysql_fetch_assoc($RScandidatos)); ?> </table> <!--fin del contenido---></div> <div class="piedepagina"> <p>Derechos Reservados �, Jair Iv�n Pi�ones Garc�a 2010 Oficinas Centrales: Cerrada 28 A No. 5 Col. Santiago Atepetlac, Delegaci�n Gustavo A. Madero, C.P. 07640, M�xico,D.F. </p> <p>Este sitio se ve mejor en una resoluci�n de 1024X768 p�xeles o superior<!--fin del pie de pagina---></p> </div> <!--fin del contenedor--></div> </body> Jair Iván Piñones García Página 127 Sistema Administrativo De Elecciones “SADE” </html> <?php mysql_free_result($RScandidatos); ?> Jair Iván Piñones García Página 128 9. Referencias “Información Básica Sistema electoral Mexicano” en IFE Instituto Federal Electoral [En Línea]. México, disponible en: http://www.ife.org.mx/portal/site/ifev2/Informacion_Electoral/#1 “Elecciones Federales de México” en Wikipedia La enciclopedia Libre [En Línea]. México, disponible en: http://es.wikipedia.org/wiki/Elecciones_federales_de_M%C3%A9xico Lauraprats “Elecciones: ¿Cuánto cuesta un voto en México?” en Pateando Piedras [En Línea]. México, disponible en: http://www.pateandopiedras.com/?p=24751 Bruce Schneier (2001) “Sistemas de Votación Electrónicos” en Red de conocimientos electorales” [En línea] Disponible en: http://aceproject.org/ace-es/topics/et/eth/eth02/eth02b/onePage (2010) “¿Qué es Dreamweaver” en Adobe Dreamweaver CS5 [En línea] Disponible en: http://www.adobe.com/es/products/dreamweaver/whatisdreamweaver/ “Cascading Style Sheets” en W3C [En línea] Disponible en: http://www.w3.org/Style/CSS “What is PHP?” en PHP [En línea] Disponible en: http://www.php.net/ Jair Iván Piñones García Página 129