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


0