PHP - Validación de fechas

 
Vista:
sin imagen de perfil
Val: 18
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Validación de fechas

Publicado por David (9 intervenciones) el 02/05/2019 14:06:15
Tengo un problema al momento de valida unas fechas. El objetivo es conseguir enviar fecha de ida si se elige la opción "solo ida" y enviar fecha de ida y fecha de vuelta si se elige la opción "ida y vuelta". El problema es que al momento de validar siempre pasa por el filtro de validación como si se escogiese siempre ida y vuelta. Muchas gracias por la atención. Soy nuevo y perdonenme si hay algún fallo al subir el código, etc.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
	/* elimina notice. */
	error_reporting(0);
	/* inicia sesión. */
	session_start();
?>
<!DOCTYPE html>
<html lang="es-ES">
<head>
	<meta charset="utf-8">
	<!-- declaración para código javascript -->
	<script type="text/javascript">
		/* función que habilita o deshabilita. */
		function habilitar(value) {
			/* si el valor es ida y vuelta. */
			if (value == "Ida y vuelta") {
				/* queda habilitado el elemento con id campovuelta. */
				document.getElementById("campoVuelta").disabled = false;
			/* si el valor es solo ida */
			} else if(value == "Solo ida") {
				/* deshabilita el elemento con id campovuelta. */
				document.getElementById("campoVuelta").disabled = true;
			}
		}
	</script>
	<title></title>
</head>
<body>
	<?php
	/* variables para errores inicialmente vacías. */
	$fechaErr = "";
	/* variable con valor booleano que determinará el envío del formulario. */
	$correcto = true;
	if ($_SERVER["REQUEST_METHOD"] == "POST") {
		/* comprueba si la opción del trayecto elegido tiene como valor ida y vuelta. */
		if ($_POST["trayecto"] = "Ida y vuelta") {
			/* comprueba si el campo ida o el campo vuelta esta vacío. */
/* AQUÍ ESTARÍA EL PROBLEMA, AUNQUE ELIGA LA OPCIÓN DE TRAYECTO "SOLO IDA" TOMA ESTE CAMINO Y NO VALIDA CUANDO DEBERÍA TOMAR EL ELSE DE ABAJO. */
			if (empty($_POST["ida"]) || empty($_POST["vuelta"])) {
				$fechaErr = "Los campos de fecha de ida y vuelta no pueden quedar vacíos.";
				$correcto = false;
			} else {
				/* comprueba si el los campos de ida y vuelta cumplen los criterios de validación definidos en la función. */
				if (!comprobarFechas($_POST["ida"], $_POST["vuelta"])) {
					$fechaErr = "La fecha de ida debe ser superior a la fecha actual e inferior a la fecha de vuelta.";
					$correcto = false;
				}
			}
		/* comprueba si la opción del trayecto elegido tiene como valor solo ida. */
		} elseif ($_POST["trayecto"] = "Solo ida") {
			/* comprueba si el campo ida esta vacío. */
			if (empty($_POST["ida"])) {
				$fechaErr = "El campo de fecha de ida no puede quedar vacío.";
				$correcto = false;
			/* si no se cumple lo anterior no esta vacío el campo de la fecha de ida. */
			} else {
				/* comprueba si la fecha de ida seleccionada es inferior o igual a la fecha actual, en cuyo caso no valida. */
				if (strtotime($_POST["ida"]) <= strtotime(date("Y-m-d"))) {
					$fechaErr = "La fecha de ida debe ser superior a la fecha actual.";
					$correcto = false;
				}
			}
		/* en cualquier otro caso no se valida. */
		} else {
			$correcto = false;
		}
	}
	/* si no se cumplen las condiciones no se valida el formulario y no se envía */
	if(!isset($_POST["botonEnvio"]) || !$correcto) {
	?>
	<h3>Fechas</h3>
	<form method="post" action="<?php htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
		<label>Trayecto:</label>
		<input type="radio" name="trayecto" value="Ida y vuelta" onchange="habilitar(this.value);">Ida y vuelta
		<input type="radio" name="trayecto" value="Solo ida" onchange="habilitar(this.value);">Solo ida
		<br><br>
		<label>Fecha de ida:</label>
		<input type="date" name="ida" min=<?php $hoy=date("Y-m-d"); echo $hoy; ?> max=<?php $anno=date("Y-m-d", strtotime("+ 1 year")); echo $anno; ?> >
		<br><br>
		<label>Fecha de vuelta:</label>
		<input type="date" name="vuelta" id="campoVuelta">
		<span><?php echo $fechaErr; ?></span>
		<br><br>
		<input type="submit" name="botonEnvio" value="enviar">
	</form>
	<?php
	} else {
		$_SESSION["ida"] = $_POST["ida"];
		$_SESSION["vuelta"] = $_POST["vuelta"];
		header("Location: ./pruebas2.php");
	}
	?>
</body>
</html>
<?php
/* función para comparar fechas de ida y vuelta y validar. */
function comprobarFechas ($ida, $vuelta) {
	/* si la fecha de ida es mayor que la fecha actual y menor que la fecha de vuelta es válido */
	if (strtotime($ida) > strtotime(date("Y-m-d")) && strtotime($ida) < strtotime($vuelta)) {
		return true;
	} else {
		return false;
	}
}
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Validación de fechas

Publicado por Alejandro (840 intervenciones) el 02/05/2019 16:02:48
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
En los if (linea 36 y 50) estas haciendo asignación = en lugar de comparación ==
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 18
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Validación de fechas

Publicado por David (9 intervenciones) el 02/05/2019 16:35:02
Gracias Alejandro. Efectivamente era ese el fallo y se solucionó perfectamente usando los operadores de comparación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar