Skip to content

Instantly share code, notes, and snippets.

@c3r38r170
Last active June 9, 2019 05:10
Show Gist options
  • Save c3r38r170/01418428c499dac05c4b14c78c1e6161 to your computer and use it in GitHub Desktop.
Save c3r38r170/01418428c499dac05c4b14c78c1e6161 to your computer and use it in GitHub Desktop.
A little website for university professors' information we were told to ask. Written by hand the 4 days before the first class just by me. You can see the result in the free website 2019isi.dx.am until taken down. It's unfinished as I stopped developing it when I was told the information was already online. :P Totally free, take as you want.
<!DOCTYPE html>
<html style="background:lightblue">
<head>
<style>
body{
text-align: center;
width: 70%;
position: absolute;
left: 10%;
background: cornflowerblue;
border-radius: 50px;
padding: 5%;
font-size: large
}
<?php
if(!empty($_POST)){
$conexion=mysqli_connect('XXXXX.XXXXXXXXXX.XXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
if(!$conexion){
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "errno de depuración: " . mysqli_connect_errno().PHP_EOL;
echo "error de depuración: " . mysqli_connect_error().PHP_EOL;
exit;
}
switch($_POST['tipoDeFormulario']){
case 0: //entrar
$sentencia=$conexion->prepare('SELECT `id` FROM `2019_isi_alumnos` WHERE `email` = ? ;');
if(!$sentencia){
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error;
exit;
}
$sentencia->bind_param('s',$email);
$email=$_POST['usuario'];
if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error;
exit;
}
$sentencia->store_result();
$error=array(false);
if(!$sentencia->num_rows){
$error=array(true,0);
}
if(!$error[0]){
$sentencia->bind_result($id);
$sentencia->data_seek(0);
$sentencia->fetch();
$sentencia->close();
$datos=$conexion->query("SELECT `contra`,`verified` FROM `2019_isi_alumnos` WHERE `id` = $id ;");
$datos=$datos->fetch_row();
if(password_verify($_POST['contraseña'],$datos[0])){
if($datos[1]){
mostrarInformacion($id);
}else{
$error=array(true,2);
}
}else{
$error=array(true,1);
}
}
if($error[0]){
?>
table{
border-collapse: collapse; /* Para que no haya espacios entre celdas que puedan apretarse por error. */
border: 2px solid black;
width:100%;
background:cornsilk;
background: lightgray;
}
td{
padding: 10px;
}
input{
margin:5px
}
#inicioDeSesionContenedor{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
text-align: left
}
</style>
</head>
<body>
<div id=inicioDeSesionContenedor>
<form method=post style="text-align:-webkit-center">
<table>
<tr><td><label for=usuario>Correo:</label><td></td><input type=email placeholder="Dirección de correo" name=usuario required></td></tr>
<tr><td><label for=contraseña>Contraseña:</label><td></td><input type=password placeholder="Contraseña" name=contraseña required></td></tr>
</table>
<span style="font-weight:bold;color:red;padding:5px;border-radius:5px">
<?php switch($error[1]){
case 0:
echo'Este correo no se encuentra registrado.';
break;
case 1:
echo'Contrase&ntilde;a incorrecta.';
break;
case 2:
echo'Esta cuenta necesita ser verificada.';
break;
}
?>
</span><br>
<input type=hidden name=tipoDeFormulario value=0>
<input type=submit value=Entrar><button onclick="window.location=''">Registrarme</button><button style="margin-left:5px" onclick="window.location=''">Volver</button>
</form>
</div>
<?php
exit;
}
break;
case 1: //registrar
$sentencia=$conexion->prepare('INSERT INTO `2019_isi_alumnos` (`nombreYapellido`,`email`,`contra`,`comision`,`verified`,`token`) VALUES (?,?,?,?,?,?);');
if(!$sentencia){
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error;
exit;
}
$sentencia->bind_param('sssiis',$_POST['nombreRegistro'],$_POST['usuarioRegistro'],$contraseña,$_POST['comisionRegistro'],$v,$mdcinco);
$contraseña=password_hash($_POST['contraseñaRegistro'],PASSWORD_BCRYPT);
$v=0;
$mdcinco=md5(rand());
if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error;
exit;
}
$gracias=true;
mail($email,'Verificación de Correo',"Entrá al siguiente link para validar tu cuenta:\n2019isi.dx.am/index.php?token=$mdcinco\nSi no reconocés este mensaje, mientras no apretes el link no tenés nada de qué preocuparte.",'From: verificacion@2019isi.dx.am');
$sentencia->close();
$mensaje='Usuario registrado exitosamente.<br>Confirme la cuenta de correo electrónico a partir del correo enviado a su cuenta (recordá revisar la carpeta de SPAM).<br>En caso de que no llegue, contactar a <a href=mailto:c3r38r170@gmail.com color:#0f0;background:#338170;padding:5px;border-radius:5px>c3r38r170@gmail.com</a>.';
break;
case 2: //subirInformacion
$sentencia=$conexion->prepare('INSERT INTO `2019_isi_infoProfesores` (`nombreYapellido`,`contacto`,`materias`,`comisiones`,`horariosConsultas`,`lugarConsultas`,`color`) VALUES (?,?,?,?,?,?,SUBSTRING(MD5(RAND()),1,6));');
if(!$sentencia){
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error;
exit;
}
$sentencia->bind_param('ssssss',$nombreYapellido,$contacto,$materias,$comisiones,$horariosConsultas,$lugarConsultas);
$nombreYapellido="{$_POST['nombre']} {$_POST['apellido']}";
$contacto='';
$indice=1;
while(isset($_POST["email$indice"])){
$contacto.=$_POST["email$indice"].',';
$indice++;
}
$indice=1;
while(isset($_POST["telefono$indice"])){
$contacto.=$_POST["telefono$indice"].',';
$indice++;
}
$contacto=substr($contacto,0,strlen($contacto)-1);
$materias='';
$indice=1;
while(isset($_POST["materia$indice"])){
$materias.=$_POST["materia$indice"].',';
$indice++;
}
$materias=substr($materias,0,strlen($materias)-1);
$comisiones='';
$indice=1;
while(isset($_POST["comision$indice"])){
$comisiones.=$_POST["comision$indice"].',';
$indice++;
}
$comisiones=substr($comisiones,0,strlen($materias)-1);
$horariosConsultas=$_POST['datosHorario'];
$lugarConsultas=$_POST['consultaLugar'];
if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error;
exit;
}
$sentencia->close();
$gracias=true;
$mensaje='Datos cargados exitosamente.';
break;
default;
break;
}
if($gracias){
?>
</style>
</head>
<body>
<h1>¡Muchísimas gracias!</h1>
<p><?=$mensaje?></p>
<a href=/>Volver a la pantalla principal.</a>
<?php
}
$conexion->close();
}elseif(empty($_GET)){
?>
input, select{
margin:5px
}
table{
border-collapse: collapse; /* Para que no haya espacios entre celdas que puedan apretarse por error. */
border: 2px solid black;
width:100%;
background:cornsilk;
}
table:not(.paraProfes){
background: lightgray;
}
table:not(.paraProfes) > tbody > tr > td{
padding: 10px;
}
.paraProfes > tbody > tr > td{
border: 0.5px solid black;
text-align:center;
}
form{
text-align:-webkit-center
}
#porQue{
/* La idea es que parezca un link. */
}
#en{
border:3px solid black /* Para ver bien que celda se esta por editar. */
}
.paginaDiferente{
position:fixed;
width:100%;
height:100%;
top:0;
left:0;
background:lightblue;
font-size:larger
}
.paginaDiferenteContenedor{
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
text-align: left;
background: cornflowerblue;
border-radius: 50px;
padding: 5%;
}
.volver{
}
.seleccionada{
background:green /* Para visualizar el cambio de las celdas. */
}
.obligatorio{
}
.obligatorio:before{
content:"*";
color:red
/* Manera dinámica de agregar contenido repetitivo. */
}
.comision{
}
.paraProfes > tbody > tr > td:nth-child(1){
font-weight: bold;
width: 30%;
background: lightgray;
}
.paraProfes > tbody > tr > td:nth-child(2){
border-left: 2px solid black;
}
</style>
</head>
<body>
<!--
Información necesaria:
Según mensaje de Nico de Brito:
Nombre, Apellido
Forma de contacto, puede ser:
E-mail
Teléfono (fijo o celular?)
Facebook (?)
Cada opción tiene que tener un botón de +
Días, Horarios y Lugar de consulta
Según yo:
Materia
Comisión
Horarios de clase //Estan subidos en la pagina oficial.
Sistema discreto de logueo (en /login o desde aplicacion?)
Log In
Sing In
Nombre y Apellido
E-mail
Contraseña
Carrera
Comisión
-->
<button style="float:right" onclick="mostrarPagina('inicioDeSesion')">Iniciar Sesión</button>
<div class=paginaDiferente id=inicioDeSesion hidden>
<div class=paginaDiferenteContenedor>
<form method=post>
<table>
<tr><td><label for=usuario>Correo:</label></td><td><input type=email placeholder="Dirección de correo" name=usuario required></td></tr>
<tr><td><label for=contraseña>Contraseña:</label></td><td><input type=password placeholder="Contraseña" name=contraseña required></td></tr>
</table>
<input type=hidden name=tipoDeFormulario value=0>
<input type=submit value=Entrar><button type=button onclick="mostrarPagina('registro')">Registrarme</button><button type=button class=volver onclick="volverDe('inicioDeSesion')" style="margin-left:5px">Volver</button>
</form>
</div>
</div>
<div class=paginaDiferente id=registro hidden>
<div class=paginaDiferenteContenedor>
<form method=post>
<table>
<tr><td><label id=etiquetaNombreRegistro for=nombreRegistro>Nombre y Apellido:</label></td><td><input type=text placeholder="Nombre y Apellido" name=nombreRegistro></td></tr>
<tr><td><label id=etiquetaUsuarioRegistro for=usuarioRegistro>Correo:</label></td><td><input type=email placeholder="Dirección de correo" name=usuarioRegistro required></td></tr>
<tr><td><label id=etiquetaContraseñaRegistro for=contraseñaRegistro>Contraseña:</label></td><td><input type=password placeholder="Contraseña" name=contraseñaRegistro required></td></tr>
<tr><td>Comisión: </td><td><select name=comisionRegistro >
<option selected="selected">101</option>
<option>102</option>
<option>103</option>
<option>104</option>
<option>105</option>
<option>106</option>
<option>107</option>
<option>108</option>
<option>109</option>
<option>110</option>
<option>111</option>
<option>113</option>
<option>114</option>
</select></td></tr>
</table>
<input type=hidden name=tipoDeFormulario value=1>
<input type=submit id=registrar value=Registrarme><button type=button class=volver onclick="volverDe('registro')">Volver</button>
</form>
</div>
</div>
<h1 id=titulo>Bienvenido, profesor.</h1>
<p id=introduccion>Este sitio está hecho por ingresantes a Ingeniería en Sistemas de Información en un esfuerzo por mejorar la comunicación de los datos necesarios sobre los diferentes profesores a los nuevos alumnos.</p>
<p><span style="color:blue;text-decoration:underline;cursor:pointer" onclick="mostrarPagina('porQueDiv')">¿Por qué decidimos hacer este sitio?</span></p>
<div class=paginaDiferente id=porQueDiv hidden>
<div class=paginaDiferenteContenedor width="70%">
<p>Nos recomendaron que a cada profesor le pidieramos una serie de datos y que los anotemos, porque con 8 materias y mínimo 2 profesores por materia no nos íbamos a acordar.</p>
<p>Pero... ¿acaso no sería un problema anotarlo también? Cada uno tendría que usar una buena cantidad de tiempo dictando los horarios de consulta, su email y teléfono y blah blah blah, estoy seguro de que llevaría aproximadamente media hora. Media hora por cada profesor de cada materia. Un lujo.</p>
<p>Y no solo eso, cada comisión tiene su puñado de alumnos que seguro van a escribir algo mal y después 1) la información se va a cruzar y 2) van a estar pidiéndoles al resto los datos.</p>
<p>¿No sería más práctico tener una base de datos donde los alumnos pudieran, por comisión, ver los datos de los profesores que les tocan tal cual como ellos los dieron?</p>
<p>Para eso estamos aquí.</p>
<button class=volver style="float:right" onclick="volverDe('porQueDiv')">Volver</button>
</div>
</div>
<p>A continuación, le pedimos que llene el siguiente formulario:</p>
<form method="post">
<table class=paraProfes>
<tr><td><label for=nombre>Nombre</label> </td><td class=obligatorio><input type=text placeholder="Nombre" id=nombre name=nombre required> </td></tr>
<tr><td><label for=apellido>Apellido</label> </td><td class=obligatorio><input type=text placeholder="Apellido" id=apellido name=apellido required> </td></tr>
<tr><td><label for=email1>Forma de contacto preferida:</label> </td><td id=contacto class=obligatorio>
<input class=email type=email placeholder="Correo Electrónico" id=email1 name=email1 required><button id=otroEmail type=button>+</button><br>
<br>
<input class=telefono type=tel placeholder="Número de teléfono" id=telefono1 name=telefono1 hidden><button id=otroTelefono name=otroTelefono type=button>Añadir número de teléfono</button>
</td></tr>
<tr><td><label for=materia1>Materias:</label> </td><td id=materias class=obligatorio>
<select class=materia id=materia1 name=materia1 required>
<option selected=selected>Álgebra y Geometría Analítica</option>
<option>Algoritmos y Estructura de Datos</option>
<option>Análisis Matemático I</option>
<option>Arquitectura de Computadoras</option>
<option>Física 1</option>
<option>Ingeniería y Sociedad</option>
<option>Matemática Discreta</option>
<option>Sistemas y Organizaciones</option>
</select>
<button id=otraMateria type=button>+</button> </td></tr>
<tr><td><label for=comision1>Comisiones:</label> </td><td class=obligatorio id=comisiones> <select id=comision1 name=comision1 class=comision>
<option selected="selected">101</option>
<option>102</option>
<option>103</option>
<option>104</option>
<option>105</option>
<option>106</option>
<option>107</option>
<option>108</option>
<option>109</option>
<option>110</option>
<option>111</option>
<option>113</option>
<option>114</option>
</select><button id=otraComision type=button>+</button> </td></tr>
</table>
<br>
<table id=consultaSemana style="table-layout:fixed;" class=paraProfes>
<tr><td colspan=6 class=obligatorio style="padding:5px"><big> Días y horarios de consulta:</big> (clickear / tocar las casillas para seleccionarlas) </td></tr>
<tr style="border: 2px solid black;background:lightgray"><th>Horarios </th><th>Lunes </th><th>Martes </th><th>Miércoles </th><th>Jueves </th><th>Viernes </th></tr>
<tr><td>8:00 </td><td id=en> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>9:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>9:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>10:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>10:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>11:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>11:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>12:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>12:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>13:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>13:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>14:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>14:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>15:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>15:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>16:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>16:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>17:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>17:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>18:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>18:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>19:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>19:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>20:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>20:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>21:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>21:30 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>22:00 </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
</table><br>
<input type=hidden id=datosHorario name=datosHorario>
<label for=consultaLugar>Lugar de consulta:<div class=obligatorio><input type=text placeholder="Domicilio / Referencia" name=consultaLugar></div></label>
<p><span style="color:red">*</span> = obligatorio</p>
<input type=hidden name=tipoDeFormulario value=2>
<input type=submit value="Subir Información" id=subirInformacion>
</form>
<script>
const IZQUIERDA=37;
const ARRIBA=38;
const DERECHA=39;
const ABAJO=40;
const ENTER=13;
var shiftApretado=false;
var mouseApretado=0;
function q(selector){
return document.querySelector(selector);
}
function g(id){
return document.getElementById(id);
}
q('body').onkeydown=function(evento){
var horarioActual=g('en');
shiftApretado=evento.shiftKey;
switch(evento.which){
case ENTER:
evento.preventDefault();
cambiarSeleccionado(horarioActual);
break;
case IZQUIERDA:
if(horarioActual.previousElementSibling.previousElementSibling!=null)cambiarHorarioActual(horarioActual,horarioActual.previousElementSibling);
break;
case ARRIBA:
evento.preventDefault();
var nodoPadre=horarioActual.parentNode;
if(nodoPadre.previousElementSibling.previousElementSibling.previousElementSibling!=null){
var i=-1;
do{
i++;
}while(nodoPadre.children[i]!=horarioActual&&i<10)
if(i==10){
console.log('No lo encuentra.');
}else{
cambiarHorarioActual(horarioActual,nodoPadre.previousElementSibling.children[i]);
}
}
break;
case DERECHA:
cambiarHorarioActual(horarioActual,horarioActual.nextElementSibling);
break;
case ABAJO:
evento.preventDefault();
var nodoPadre=horarioActual.parentNode;
var i=-1;
do{
i++;
}while(nodoPadre.children[i]!=horarioActual&&i<10)
if(i==10){
console.log('No lo encuentra.');
}else{
cambiarHorarioActual(horarioActual,nodoPadre.nextElementSibling.children[i]);
}
break;
}
};
function cambiarHorarioActual(actual,nuevo){
if(nuevo!=null){
actual.id="";
nuevo.id='en';
if(shiftApretado){
if(nuevo.classList.contains('seleccionada')){
var temp=actual.classList
if(temp.contains('seleccionada'))temp.remove('seleccionada');
nuevo.classList=temp;
}else{
var temp=actual.classList
if(!temp.contains('seleccionada'))temp.add('seleccionada');
nuevo.classList=temp;
}
}
}
}
function cambiarSeleccionado(horario){
var clases=horario.classList;
if(clases.contains('seleccionada')){
clases.remove('seleccionada');
}else{
clases.add('seleccionada');
}
}
q('body').onmousedown=function(evento){responderAlMouse(evento);mouseApretado++;}
q('body').onmouseup=function(){mouseApretado=0;}
q('body').onmouseover=function(evento){
if(mouseApretado)responderAlMouse(evento);
}
function responderAlMouse(evento){
if(esUnaCeldaEditable(evento.path)){
evento.preventDefault();
cambiarSeleccionado(evento.path[0]);
}
}
function esUnaCeldaEditable(arrayDeElementos){
return arrayDeElementos[3].id==="consultaSemana"&&![arrayDeElementos[2].children[0],arrayDeElementos[2].children[1]].includes(arrayDeElementos[1])&&arrayDeElementos[1].children[0]!==arrayDeElementos[0];
}
g('subirInformacion').onmouseover=function(){
if(!q('.seleccionada')){
alert('Falta información. Por favor, complete todo lo requerido.');
}else{
var campoDeDatos=g('datosHorario');
campoDeDatos.value="";
for(var i=2;i<=6;i++){
for(var j=3;j<=31;j++){
if(q('#consultaSemana > tbody > tr:nth-child('+j+') > td:nth-child('+i+')').classList.contains('seleccionada')){
campoDeDatos.value+=j+";"+i+"-";
}
}
}
campoDeDatos.value=campoDeDatos.value.substring(0,campoDeDatos.value.length-1);
}
}
function mostrarPagina(idDePagina){
g(idDePagina).removeAttribute('hidden');
}
function volverDe(idDePagina){
g(idDePagina).setAttribute('hidden','');
}
var numeroDelProximoEmail=2;
g('otroEmail').onclick=function(){
var nodoTemporal=g('email1').cloneNode();
nodoTemporal.value='';
nodoTemporal.removeAttribute('id');
nodoTemporal.name='email'+numeroDelProximoEmail;
g('contacto').insertBefore(nodoTemporal,g('otroEmail'));
numeroDelProximoEmail++;
}
var numeroDelProximoTelefono=2;
g('otroTelefono').onclick=function(){
if(g('otroTelefono').innerHTML!=='+'){
g('telefono1').removeAttribute('hidden');
g('otroTelefono').innerHTML='+';
}else{
var nodoTemporal=g('telefono1').cloneNode();
nodoTemporal.value='';
nodoTemporal.removeAttribute('id');
nodoTemporal.name='telefono'+numeroDelProximoTelefono;
g('contacto').insertBefore(nodoTemporal,g('otroTelefono'));
numeroDelProximoTelefono++;
}
}
var numeroDeLaProximaMateria=2;
g('otraMateria').onclick=function(){
var nodoTemporal=g('materia1').cloneNode(true);
nodoTemporal.selectedIndex=0;
nodoTemporal.removeAttribute('id');
nodoTemporal.name='materia'+numeroDeLaProximaMateria;
g('materias').insertBefore(nodoTemporal,g('otraMateria'));
numeroDeLaProximaMateria++;
}
var numeroDeLaProximaComision=2;
g('otraComision').onclick=function(){
var nodoTemporal=g('comision1').cloneNode(true);
nodoTemporal.selectedIndex=0;
nodoTemporal.removeAttribute('id');
nodoTemporal.name='comision'+numeroDeLaProximaComision;
g('comisiones').insertBefore(nodoTemporal,g('otraComision'));
numeroDeLaProximaComision++;
}
function iniciarSesion(){
g('inicioDeSesion').removeAttribute('hidden');
}
</script>
<?php
}else{
if(isset($_GET['token'])){
$conexion=mysqli_connect('XXXXX.XXXXXXXXXX.XXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
$sentencia=$conexion->prepare('UPDATE `2019_isi_alumnos` SET `verified` = 1 WHERE `token` = ? ;');
if(!$sentencia){
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error;
exit;
}
$sentencia->bind_param('s',$_GET['token']);
if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error;
exit;
}
?>
h1{
}
p{
}
a{
}
</style>
</head>
<body>
<h1>¡Usuario verificado!</h1>
<p>Ya podés entrar haciento click <a href=/>aquí</a>.</p>
<?php
exit;
}elseif(isset($_GET['celuuid'])){
$conexion=mysqli_connect('XXXXX.XXXXXXXXXX.XXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
$sentencia=$conexion->prepare('SELECT `id` FROM `2019_isi_alumnos` WHERE `cel1` = ? OR `cel2` = ?;');
if(!$sentencia){
echo "Error: No se pudo crear la sentencia preparada. Error: ".$sentencia->error;
exit;
}
$sentencia->bind_param('ss',$_GET['celuuid'],$_GET['celuuid']);
if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia->errno . ") " . $sentencia->error;
exit;
}
$sentencia->store_result();
if(!$sentencia->num_rows){
echo('95% probabilidad de fraude, reubicando...');
sleep(5);
header('http://2019isi.dx.am');
exit;
}
$sentencia->bind_result($id);
$sentencia->data_seek(0);
$sentencia->fetch();
mostrarInformacion($id);
$sentencia->close();
}else{
echo('95% probabilidad de fraude, reubicando...');
sleep(5);
header('http://2019isi.dx.am');
exit;
}
}
function mostrarInformacion($id){
global $conexion;
$datosDelAlumno=$conexion->query("SELECT `nombreYapellido`,`comision` FROM `2019_isi_alumnos` WHERE `id` = $id ;");
$infoDeProfesCruda=$conexion->query('SELECT * FROM `2019_isi_infoProfesores`;');
$informacionDeLasClasesDeConsulta=array();
$informacionDeLosProfesores=array();
$datosDelAlumno=$datosDelAlumno->fetch_row();
while($infoDeProfes=$infoDeProfesCruda->fetch_row()){
if(in_array($datosDelAlumno[1],explode(',',$infoDeProfes[4]))){
$informacionDeLasClasesDeConsulta[]=array($infoDeProfes[1],explode(',',$infoDeProfes[3]),explode('-',$infoDeProfes[5]),$infoDeProfes[7]);
$informacionDeLosProfesores[$infoDeProfes[1]]=array(explode(',',$infoDeProfes[2]),$infoDeProfes[6]);
//key: num 0: 1=nombreYapellido 1: 3=materias 2: 5=horariosConsulta 3: 7=color
//key: 1=nombreYapellido 0: 2=contacto 1: 6=lugarConsulta
}
}
$materiasSubidas=array();
foreach($informacionDeLasClasesDeConsulta as $profe){
foreach($profe[1] as $materia){
if($materiasSubidas[$materia]==null){
$materiasSubidas[$materia]=array();
}
foreach($materiasSubidas[$materia] as $celda){
if(in_array($celda[0],$profe[2])){
$celda[1].="<br>{$profe[0]}";
$celda[2]=((hexdec(substr($celda[2],0,2))+hexdec(substr($profe[3],0,2)))/2).((hexdec(substr($celda[2],2,2))+hexdec(substr($profe[3],2,2)))/2).((hexdec(substr($celda[2],4,2))+hexdec(substr($profe[6],4,2)))/2);
break;
unset($profe[2][array_search($celda[0],$profe[2])]);
}
}
foreach($profe[2] as $horario){
$materiasSubidas[$materia][]=array($horario,$profe[0],$profe[3]);
}
}
}
?>
<script>
var infoDeTabla=JSON.parse(<?=json_encode($materiasSubidas)?>);
var infoDeProfes=JSON.parse(<?json_encode($informacionDeLosProfesores)?>);
</script>
<style>
#materias{
}
#horarios{
}
#horariosTitulo{
}
#lunes{
}
#martes{
}
#miercoles{
}
#jueves{
}
#viernes{
}
#profes{
}
#informacion{
}
#lugarContenedor{
}
#tituloLugar{
}
#contacto-sContenedor{
}
#contacto-s{
}
.dia{
}
.vacia{
content="";
background=white;
}
.mail{
}
.numeroDeTelefono{
}
</style>
<head>
</body>
<h1>Bienvenid@, <?=$datosDelAlumno[0]?></h1>
<select onchange="actualizarTabla()" id=materias>
<?php
foreach(array_keys($materiasSubidas) as $materia){
echo "<option>$materia</option>";
}
?>
</select>
<table id=horarios>
<tr><th id=horariosTitulo>Horarios </th><th id=lunes class=dia>Lunes </th><th id=martes class=dia>Martes </th><th id=miercoles class=dia>Mi&eacute;rcoles </th><th id=jueves class=dia>Jueves </th><th id=viernes class=dia>Viernes </th></tr>
<tr><th>8:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>8:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>9:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>9:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>10:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>10:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>11:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>11:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>12:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>12:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>13:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>13:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>14:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>14:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>15:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>15:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>16:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>16:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>17:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>17:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>18:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>18:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>19:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>19:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>20:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>20:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>21:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>21:30 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><th>22:00 </th><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
</table>
<select onchange="actualizarDatos()" id=profes>
<?php
foreach(array_keys($informacionDeLosProfesores) as $nombreYapellido){
echo "<option>$nombreYapellido</option>";
}
?>
</select>
<table id=informacion>
<tr id=lugarContenedor><td>Lugar de Consulta: </td> <td id=lugar> </td></tr>
<tr id=contacto-sContenedor><td>Contacto/s: </td> <td id=contacto-s> </td></tr>
</table>
<script>
function g(id){
return document.getElementById(id);
}
function actualizarTabla(){
document.querySelectorAll('#horarios > tbody > tr > td:not(.vacia)').forEach(function(elemento){
elemento.removeAttribute('style');
elemento.classList.add('vacia');
});
infoDeTabla[g('materias').value].forEach(function(elemento){
var celdaActual=document.querySelector('#horario > tbody > tr:nth-child('+elemento[0].split(';')[0]-2+') > td:nth-child('+elemento[0].split(';')[1]-1+')')
celdaActual.classList.remove('vacia');
celdaActual.innerHTML=elemento[1];
celdaActual.background='#'+elemento[2];
});
}
function actualizarDatos(){
var profeElegido=infoDeProfes[g('profes').value];
g('lugar').innerHTML=profeElegido[1];
contactoContenedor=g('contacto-s');
contactoContenedor.innerHTML=formatearContacto(profeElegido[0][0]);
profeElegido[0].forEach(function(elemento){
contactoContenedor.innerHTML+='<br>'+formatearContacto(elemento);
});
}
function formatearContacto(contacto){
var resultado='';
if(contacto.includes('@')){
resultado='<a class=mail href:mailto:'+contacto+'>'+contacto+'</a>';
}else{
resultado='<span class=numeroDeTelefono>'+contacto+'</span>';
}
return resultado;
}
document.querySelectorAll('#horarios > tbody > tr > td').forEach(function(elemento){
elemento.classList.add('vacia');
});
</script>
<?php
}
?>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment