David 11 years ago
parent
commit
0a142f20a6
4 changed files with 232 additions and 2 deletions
  1. 1 2
      css/especificos.css
  2. 143 0
      mails.html
  3. 59 0
      mails_code_validator.php
  4. 29 0
      update_mail_data.php

+ 1 - 2
css/especificos.css

@@ -693,8 +693,7 @@ b { font-weight: bold; }
     margin: 0px auto;
     text-align: center;
     background-color: #324875;
-    height: 60px;
-    padding-top: 19px;
+    padding: 25px;
     color: white;
     font-family: Open Sans;
     font-size: 25px;

+ 143 - 0
mails.html

@@ -0,0 +1,143 @@
+<html>
+	<head>
+	<style>
+			label{display:block; width:70%; max-width:500px}
+			label input:not([type="checkbox"]) { float:right; clear:both;}
+			label input:after { clear:both; }
+			#parte2,#validar { display: none; }
+	</style>
+	<script>
+		function $(element) {
+			var el = document.querySelectorAll(element);
+			if(el.length==1)
+				return el[0];
+			return el;
+		}
+		function post(url,data,ok,error) {
+			var request = new XMLHttpRequest();
+			request.open('POST', url, true);
+
+			request.onload = function() {
+				if(this.status>=200 && this.status < 400)
+					ok(this.responseText);
+				else
+					error(this.responseText);
+			}
+			request.onerror = error;
+
+			request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
+			if ( typeof data === 'string')
+				request.send(data);
+			else
+				request.send(JSON.stringify(data));
+		}
+		window.onload  = function() {
+			$("#validar").onclick = function() {
+				post("mails_code_validator.php",
+						{ mail: $("#pedirmail").value, codigo: $("#pedircodigo").value }, 
+						populateForm,
+						function(data) { alert(data); }
+					);
+			};
+			$("#pedircodigo").onclick = inputUpdated;
+			$("#pedircodigo").onfocus = inputUpdated;
+			$("#pedircodigo").onkeyup = inputUpdated;
+			$("#pedircodigo").onpaste = inputUpdated;
+
+			
+			function inputUpdated() {
+				if( $("#pedircodigo").value.length == 0 )
+					$("#pedir").style.display="block";
+				else
+					$("#pedir").style.display="none";
+
+				if( $("#pedircodigo").value.length == 10 )
+					$("#validar").style.display="block";
+				else
+					$("#validar").style.display="none";
+
+			};
+			$("#enviar").onclick = function() {
+				var obj = {};
+				Array.prototype.forEach.call($("#parte2 input"),function(item) {
+					if(item.type=="checkbox")
+						obj[item.id]=item.checked ? 1 : 0;
+					else
+						obj[item.id]=item.value;
+				});
+				obj.codigo=$("#pedircodigo").value; //Lo tomo del form, total ya esta validado
+				post("update_mail_data.php",
+					obj,
+					function(data) { alert(data); },
+					function (data) { alert(data+"err"); }
+					);
+			};
+			function populateForm(obj) {
+				if ( typeof obj === 'string')
+					obj=JSON.parse(obj);
+				$("#email").value=obj.mail;
+				$("#nombre").value=obj.nombre;
+				$("#apellido").value=obj.apellido;
+				$("#zona").value=obj.zona;
+				$("#provincia").value=obj.provincia;
+				$("#pais").value=obj.pais;
+				$("#telefono").value=obj.telefono;
+				$("#baja").checked=obj.baja;
+
+				$("#parte1").style.display="none";
+				$("#parte2").style.display="block";
+			}
+		};
+	</script>
+	</head>
+	<div id="parte1">
+		<label>
+			Email:
+			<input type="email" id="pedirmail" placeholder="Su email" >
+		</label>
+		<label>
+			Codigo:
+			<input id="pedircodigo" type="text" placeholder="Su codigo" maxlength="10">
+		</label>
+		<input type="submit" id="pedir" value="Pedir codigo">
+		<input type="submit" id="validar" value="Validar codigo">
+		<label id="resultCodigo"></label>
+	</div>
+	<div id="parte2">
+		<label value="email">
+			Email:
+			<input id="email" type="email" placeholder="" disabled readonly>
+		</label>
+		<label>
+			Nombre:
+			<input id="nombre" type="text" placeholder="">
+		</label>
+		<label>
+			Apellido:
+			<input id="apellido" type="text">
+		</label>
+		<label>
+			Zona:
+			<input id="zona" type="text">
+		</label>
+		<label>
+			Provincia:
+			<input id="provincia" type="text">
+		</label>
+		<label>
+			Pais:
+			<input id="pais" type="text">
+		</label>
+		<label>
+			Darse de baja:
+			<input id="baja" type="checkbox">
+		</label>
+		<label>
+			Telefono:
+			<input id="telefono" type="text">
+		</label>
+		<input type="submit" value="Enviar" id="enviar">
+		<label id="resultCodigo"></label>
+	<body>
+	</body>
+</html>

+ 59 - 0
mails_code_validator.php

@@ -0,0 +1,59 @@
+<?php
+include("db.php");
+$db->select_db("mailing");
+$postdata 	= file_get_contents("php://input");
+$r		 	= json_decode($postdata);
+
+
+if (isset($r->request)) { #Genero un codigo para que actualicen y se lo mando por mail.
+	#El mail existe en la base?
+	$stmt=$db->prepare("SELECT 1 FROM mails_datos where mail = ?");
+	$stmt->bind_param("s",$r->mail);
+	$stmt->execute();
+	$stmt->store_result(); #para que el count funcione
+	if ($stmt->num_rows ==0) {
+		http_response_code(400);
+		die("Mail inexistente");
+	}
+
+	$codigo=sha1($r->mail.rand(300,50000));
+	$codigo=substr($codigo, rand(0,10), 10);
+
+	#Actualizo en la base el codigo y le pongo vencimiento de 24h
+	$stmt=$db->prepare("UPDATE mails_datos set codigo = ?, fecha=NOW() where mail = ?");
+	$stmt->bind_param("ss",$codigo,$r->mail);
+	$stmt->execute();
+	http_response_code(200);
+	die("Codigo enviado por mail");
+} else { #Valido el codigo
+	if(!isset($r->codigo) || !isset($r->mail)) {
+		http_response_code(400);
+		die("Mail o codigo invalido.");
+	}
+	$stmt=$db->prepare("SELECT mail,nombre,apellido,zona,provincia,pais,telefono,baja,TIMESTAMPDIFF(HOUR,fecha,NOW()) > 24 FROM mails_datos where codigo=? and mail=?");
+	$stmt->bind_param("ss",$r->codigo,$r->mail);
+	$stmt->execute();
+	$stmt->bind_result($mail,$nombre,$apellido,$zona,$provincia,$pais,$telefono,$baja,$vencido);
+	$stmt->store_result(); #para que el count funcione
+	if ($stmt->num_rows ==0) {
+		http_response_code(400);
+		die("Mail o codigo invalido");
+	}
+	while ($stmt->fetch()) { 
+		if($vencido) {
+			http_response_code(400);
+			die("Codigo vencido. Pida otro");
+		}
+		$persona= new stdClass();
+		$persona->mail=$mail;
+		$persona->nombre=$nombre;
+		$persona->apellido=$apellido;
+		$persona->zona=$zona;
+		$persona->provincia=$provincia;
+		$persona->pais=$pais;
+		$persona->baja=$baja;
+		$persona->telefono=$telefono;
+		echo json_encode($persona);
+	}
+}
+?>

+ 29 - 0
update_mail_data.php

@@ -0,0 +1,29 @@
+<?php
+include("db.php");
+$db->select_db("mailing");
+$postdata 	= file_get_contents("php://input");
+$d		 	= json_decode($postdata);
+
+if(!isset($d->email) || strlen($d->email) < 4 ) {
+	http_response_code(400);
+	die("Mail invalido");
+}
+$stmt=$db->prepare("SELECT 1 FROM mails_datos WHERE mail=? AND codigo=?");
+$stmt->bind_param("ss",$d->email,$d->codigo);
+$stmt->execute();
+$stmt->store_result();
+
+if($stmt->num_rows!=1){
+	http_response_code(400);
+	die("Su mail o codigo no son validos");
+}
+
+$stmt=$db->prepare("UPDATE mails_datos set nombre = ?, apellido=?,zona=?,provincia=?,pais=?,telefono=?,baja=? where
+					mail=? and codigo=?");
+$stmt->bind_param("ssssssiss",$d->nombre,$d->apellido,$d->zona,$d->provincia,$d->pais,$d->telefono,$d->baja,$d->email,$d->codigo);
+if(!$stmt->execute()) {
+	http_response_code(400);
+	die("Hubo un problema actualizando los datos". $stmt->error);
+}
+http_response_code(200);
+echo "Datos actualizados correctamente";