0

Buenas noches, actualmente estoy trabajando en un sistema de reservación y necesito validar que la fecha de inicio no sea mayor a la fecha fin pero no tengo claro como debe ser el codigo, aquí les dejo el codigo fuente, soy rookie en esto de la programación así que pido disculpas por los posibles errores en mi código.

<?php
session_start();
require 'funcs/conexion.php';
include 'funcs/funcs.php';

if(!isset($_SESSION["id_usuario"])){ //Si no ha iniciado sesión redirecciona a index.php
 header("Location: index.php");
}

$idUsuario = $_SESSION['id_usuario'];
//Consulta tabla usuarios
//$sql="SELECT usuarios.`id`, usuarios.`nombre`, usuarios.`usuario`, usuarios.`correo`, datos_usuarios.`apellido`, datos_usuarios.`telefono` FROM `usuarios`, `datos_usuarios` WHERE usuarios.id=datos_usuarios.id AND usuarios.id='$idUsuario'";
$sql = "SELECT usuarios.`id`, usuarios.`usuario`, solicitudes.`idminiauditorios`, solicitudes.`id`, solicitudes.`idequipos`, solicitudes.`nombre_sala`, solicitudes.`nombre_equipo`, solicitudes.`hora_inicio_evento`, solicitudes.`fecha_evento_inicio`, solicitudes.`fecha_evento_fin`, solicitudes.`hora_fin_evento`, solicitudes.`detalles_actividad` FROM  `usuarios`, `solicitudes` WHERE usuarios.`id` = '$idUsuario'";
$result = $mysqli->query($sql);

$row = $result->fetch_assoc();
//insertar tabla datos_usuario variables
$fecha_reservacion = $_POST['finicio'];
$fecha_cierre = $_POST['fcierre'];
$hora_inicio = $_POST['hinicio'];
$hora_cierre=$_POST['hfin'];
$comentario = $_POST['comentario'];
$idmini = $_POST['sala'];
$idequipo = $_POST['equipo'];
 

//consulta tabla datos_usuario
//$sql2="SELECT usuarios.`id`, usuarios.`nombre`, usuarios.`usuario`, usuarios.`correo`, datos_usuarios.`apellido`, datos_usuarios.`telefono` FROM `usuarios`, `datos_usuarios` WHERE usuarios.id=datos_usuarios.id";
//$result2 = $mysqli2->query($sql2);
//$row2 = $result2->fetch_assoc();
 
?>

<form action="updatereserva.php" class="form-horizontal" method="post">
   
    
  <div class="form-group">
      <label class="col-sm-2 control-label">Fecha-Inicio del Evento</label>
      <div class="col-sm-10">
        <input class="form-control" id="datepicker" name="finicio" type="text">
      </div>
    </div>
  <div class="form-group">
      <label class="col-sm-2 control-label">Fecha-Cierre del Evento</label>
      <div class="col-sm-10">
        <input class="form-control" id="fecha" name="fcierre" type="text">
      </div>
    </div>
  <div class="form-group">
      <label class="col-sm-2 control-label">Hora de Inicio</label>
      <div class="col-sm-10">
        <input class="form-control" id="basicExample" name="hinicio" type="text" value="<?php echo ''.utf8_decode($row['']); ?>" value="8:00 AM"/>
      </div>
    </div>
 
  <div class="form-group">
      <label class="col-sm-2 control-label">Hora de Cierre</label>
      <div class="col-sm-10">
        <input class="form-control" id="basicExample2" name="hfin" type="text" value="<?php echo ''.utf8_decode($row['']); ?>" value="8:00 AM"/>
      </div>
    </div>
 <div class="form-group">
        <label for="disabledSelect" class="col-sm-2 control-label">Miniauditorio</label>


<img id="myImg" class="img2" src="/login/images/minis.png" alt="Miniauditorios" >

<!-- The Modal -->
<div id="myModal" class="modal">
  <span class="close">&times;</span>
  <img class="modal-content" id="img01">
  <div id="caption"></div>
</div>

<script>
// Get the modal
var modal = document.getElementById('myModal');

// Get the image and insert it inside the modal - use its "alt" text as a caption
var img = document.getElementById('myImg');
var modalImg = document.getElementById("img01");
var captionText = document.getElementById("caption");
img.onclick = function(){
    modal.style.display = "block";
    modalImg.src = this.src;
    captionText.innerHTML = this.alt;
}

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];

// When the user clicks on <span> (x), close the modal
span.onclick = function() { 
    modal.style.display = "none";
}
</script>
  
  
        <div class="col-sm-10">
   

          <select id="disabledSelect" name="sala"  style="WIDTH: 228px; HEIGHT: 48px"  class="form-control">
     
   <option>Elige</option>
   <option>Ayacucho</option>
            <option>Boyaca</option>
   <option>Carabobo</option>
   <option>Simon Bolivar</option>
   </select>
  
        </div>
      </div>
   <div class="form-group">
        <label for="disabledSelect" class="col-sm-2 control-label">Servicio Audio Visual</label>
        <div class="col-sm-10">
          <select id="disabledSelect" name="equipo"  style="WIDTH: 228px; HEIGHT: 48px"  class="form-control">
   <option>No</option>
   <option>Si</option>
   
   </select>
        </div>
      </div>
   <div class="form-group">
      <label class="col-sm-2 control-label">Comentarios</label>
      <div class="col-sm-10">
   <textarea class="form-control" id="focusedimput" name="comentario" onkeyup="countChar(this)"></textarea>
   <div id="charNum"></div>
      </div>
    </div>
                
   <form class="form-inline">

         <!--<a class="btn" type="submit">Reservar</a>--> <a border="1"><input border="1" type = "submit" class="btn btn-success" value="Enviar" onclick="document.getElementById('loading_oculto').style.visibility='visible';" /></a>
  
 </form>
 <div id="loading_oculto"><img src="images/loading.gif" /></div>

Este formulario llama al siguiente código que es donde hago el insert a la base de datos:

<?php
session_start();
include ("funcs/conexion3.php");
include ("reservar.php");


if(!isset($_SESSION["id_usuario"])){ //Si no ha iniciado sesión redirecciona a index.php
  header("Location: index.php");
 }
 
$idUsuario = $_SESSION['id_usuario'];


$con=mysql_connect('localhost', 'root', '')or die
("problemas al conectar");

mysql_select_db('login') or die
("problemas al conectar");

//Aqui realizo la consulta para insertar los datos en la tabla datos usarios, me traigo la variable $idUsuario del archivo perfil.php para no dejar el campo datos_usuarops.'id' vacio ya que de dejarlo vacio no inserta

//Condicional para el insert

$consulta = "SELECT id FROM solicitudes WHERE id='".$idUsuario."'";
$result = $mysqli->query($consulta);
$filaid = mysql_num_rows($result);

 if ($filaid == 0){
 
  $insert= mysql_query ("INSERT INTO `solicitudes`(`idminiauditorios`, `id`, `idequipos`, `nombre_sala`, `nombre_equipo`, `hora_inicio_evento`, `fecha_evento_inicio`, `fecha_evento_fin`, `hora_fin_evento`, `detalles_actividad`, `status`) VALUES ('$idmini','$idUsuario','2','$idmini','$idequipo','$hora_inicio','$fecha_reservacion','$fecha_cierre','$hora_cierre','$comentario','Informa tu pago')", $con) or die
  (mysql_error('error'));
      echo '<script>
        setTimeout(function() {
         swal({
          title: "Buen trabajo!",
          text: "Para ver el estatus de tú reservación lo puede hacer a través de: Mi Perfil / Mi reservación !",
          type: "success"
         }, function() {
          window.location = "http://extensionipcaracas.sytes.net/login/misreservaciones.php";
         });
        }, 1000);
       </script>';
  
  
 }
?>

Nuevamente pido disculpas a los profesionales del codigo si ven errores o algo desordenada mi información estoy comenzando, muchas gracias.

  • Te recomiendo que leas sobre [inyección SQL](https://es.stackoverflow.com/q/10518/250) y [cómo evitarla en PHP](https://es.stackoverflow.com/q/18232/250) y [por qué no deberían usarse los métodos mysql_*](https://es.stackoverflow.com/q/75123/250). El código que compartes presenta vulnerabilidades graves de seguridad, puede sufrir ese tipo de ataques y no debería usarse en un entorno de producción. – Alvaro Montoro Nov 05 '17 at 15:37

1 Answers1

1

Podría hacerlo de muchas maneras, voy a enumerar las posibles soluciones (que conozco) y ud decide cual utilizar:

javascript

1. Realizar la validación por medio de javascript nativo. Aquí está la información necesaria para poder controlar fechas.

var startDate1 = new Date("05/11/2017");
var startDate2 = new Date("06/11/2017");
console.log(Number(startDate1) == Number(startDate2)); // false

var startDate1 = new Date("05/11/2017");
var startDate2 = new Date("05/11/2017");
console.log(Number(startDate1) == Number(startDate2)); // true

De esta manera es más rápida(y creo que debe usar esta opción), pues es la más sencilla. tomado de

2. utilizar una librería especializada en fechas como moment ó datejs. Creo que es la mejor opción, pues así estandariza las fechas. con moment, debe usar diff

var diffTime = moment('2016-06-13T00:00:01')
  .diff('2016-06-13T00:00:00'); // 1000 = 1 segundo, la primera es mayor.

console.log(diffTime);
<script src="https://momentjs.com/downloads/moment.js"></script>

PHP

3. Realizar validación por comparación.

$fecha1=strtotime("27-10-2008");
$fecha2=strtotime("2008-10-28");
if($fecha1 > $fecha2)
echo "Fecha1 > Fecha2";
Ruslan López
  • 10,060
  • 11
  • 35
  • 68
  • Pero quiero que valide las fechas que coloque el usuario, digamos que el reservara para una fecha que es imposible para mi saber, quiero que esas dos fechas la incial sea menor que la final sin importar cuales sean las fechas. – Luis Alfredo Serrano Díaz Nov 05 '17 at 14:01
  • por eso, ud por medio de la opciones que le dí, debe organizar el algoritmo para poder validar las fechas. La información que le proporcioné es para que ud realice las validaciones. por ejemplo con moment puede realizar todo tipo de calculo para tiempo. – Cristian Agudelo Nov 06 '17 at 01:37
  • Le recomiento para la parte externa agregar algo como [Bootstrap-Datepicker](https://eonasdan.github.io/bootstrap-datetimepicker/) ó [Jquery-Datepicker](https://jqueryui.com/datepicker/), para que el usuario no tenga forma de perderse y sea guiado por componentes html. – Cristian Agudelo Nov 06 '17 at 01:38
  • Gracias Critian justamente eso estoy usando, pero ahora tengo otro problema tengo 5 miniauditorios que reservar y los almaceno en un campo sql de nombre idminiauditorios que contiene el nombre del miniauditorio y necesito validar que la fecha este ocupada con el respectivo miniauditorio pero que si reservan esa fecha con otro miniauditorio esté libre. – Luis Alfredo Serrano Díaz Nov 06 '17 at 02:29
  • Pero eso ya es por medio de la consulta que debe filtrar la información, Mysql tiene muchos queries para filtrar información desde la consulta o hacer un [procedimiento almacenado](https://www.codejobs.biz/es/blog/2014/07/09/como-hacer-un-procedimiento-almacenado-en-mysql-sin-morir-en-el-intento). Aunque también lo puede hacer por medio de una consulta completa(no es recomendable, pero se puede hacer) y filtrar la información con moment(), después de eso la muestra en el html, es decir, consutla, filtra con moment y finalmente muestra en el html. – Cristian Agudelo Nov 06 '17 at 05:13