Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Impedir datos duplicados entre dos fechas

Estas en el tema de Impedir datos duplicados entre dos fechas en el foro de PHP en Foros del Web. Hola, ¿Alguien sabe cómo puedo impedir que una persona reserve habitación los días comprendidos entre dos fechas si estas ya están ocupadas? Me explico: Tengo ...
  #1 (permalink)  
Antiguo 05/03/2014, 07:10
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 0
Impedir datos duplicados entre dos fechas

Hola,
¿Alguien sabe cómo puedo impedir que una persona reserve habitación los días comprendidos entre dos fechas si estas ya están ocupadas?

Me explico:

Tengo dos calendarios para elegir fecha, uno fecha de entrada y otro fecha de salida, cada calendario envía su contenido a su campo de una db llamada disponibilidad (dia_entrada y dia_salida). Si la fecha de cada campo está ocupada, no deja reservar para ese día pero, cómo hago para evitar que reserven los días entre dichas fechas ya que son dos campos diferentes.

¿Hay que enlazar la consulta de alguna forma?:

Código PHP:
$buscarmysql_query("SELECT dia_entrada, dia_salida FROM disponibilidad WHERE dia_entrada='$dia_entrada' AND  dia_salida='$dia_salida'"); 

if(
mysql_num_rows($buscar)>0) {
    
      echo 
"Esta  fecha no está disponible. Por favor elija otra.<br>"
      echo 
"<a href=\"javascript:history.back()\">Regresar</a>"
} else { 

      
mysql_query("INSERT INTO disponibilidad(dia_entrada, dia_salida) VALUES ('$dia_entrada', '$dia_salida')"); 
      echo 
"Registro correcto."

?> 
Saloduss.

Última edición por Polu; 05/03/2014 a las 07:12 Razón: fallo
  #2 (permalink)  
Antiguo 05/03/2014, 10:32
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Impedir datos duplicados entre dos fechas

Que tal Polu, es evidente que estas restringiendo la consulta al comparar unicamente los dias iguales de entrada y salida en tu base de datos, lo que debes hacer es sencillo de acuerdo a lo que estas planteando. Solo bastaría con modificar tu consulta de esta manera:

Código PHP:
$buscarmysql_query("SELECT dia_entrada, dia_salida FROM disponibilidad WHERE dia_entrada >= '$dia_entrada' AND  dia_salida <= '$dia_salida'"); 

if(
mysql_num_rows($buscar)>0) {
    
      echo 
"Esta  fecha no está disponible. Por favor elija otra.<br>"
      echo 
"<a href=\"javascript:history.back()\">Regresar</a>"
} else { 

      
mysql_query("INSERT INTO disponibilidad(dia_entrada, dia_salida) VALUES ('$dia_entrada', '$dia_salida')"); 
      echo 
"Registro correcto."

?> 
Ten en cuenta que antes de pasar los datos a tu consulta, debes validar que $dia_entrada sea menor que $dia_salida. Supongo que esto ya lo tienes.


Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #3 (permalink)  
Antiguo 05/03/2014, 10:57
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Impedir datos duplicados entre dos fechas

Código PHP:
Ver original
  1. $buscar= mysql_query("SELECT dia_entrada, dia_salida FROM disponibilidad WHERE (dia_entrada BETWEEN '$dia_entrada' AND '$dia_salida') OR  (dia_salida BETWEEN '$dia_entrada' AND '$dia_salida')");
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 05/03/2014, 10:59
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Impedir datos duplicados entre dos fechas

Carlojas

Fijate que tu consulta falla en ciertos casos, si estn esta reserva:
2014-03-04 - 2014-03-08
y quiere reservar esta:
2014-03-03 - 2014-03-05

se lo permitiria, saludos
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 05/03/2014, 11:18
Avatar de andresgarciadev  
Fecha de Ingreso: junio-2013
Mensajes: 218
Antigüedad: 10 años, 10 meses
Puntos: 32
Respuesta: Impedir datos duplicados entre dos fechas

NSD pero tu consulta tambien fallaria .. si te das cuenta
si tiene un registro de
2014-03-04 - 2014-03-08
y queire reservar
2014-03-05 - 2014-03-05

entonces 2014-03-04 y 2014-03-08 no estarian entre 2014-03-05 - 2014-03-05
porlo tanto.... esta bien tu consulta pero falto agregar validacion... es decir

Código PHP:
Ver original
  1. $buscar= mysql_query("SELECT dia_entrada, dia_salida FROM disponibilidad WHERE (dia_entrada BETWEEN '$dia_entrada' AND '$dia_salida') OR  (dia_salida BETWEEN '$dia_entrada' AND '$dia_salida') OR (dia_entrada <= '$dia_entrada'  AND dia_salida >= '$dia_salida')");
  #6 (permalink)  
Antiguo 05/03/2014, 12:25
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Impedir datos duplicados entre dos fechas

Cita:
Iniciado por NSD Ver Mensaje
Carlojas

Fijate que tu consulta falla en ciertos casos, si estn esta reserva:
2014-03-04 - 2014-03-08
y quiere reservar esta:
2014-03-03 - 2014-03-05

se lo permitiria, saludos

Tienes razón NSD , saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #7 (permalink)  
Antiguo 05/03/2014, 12:32
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: Impedir datos duplicados entre dos fechas

Hola A todos,

Ante todo, gracias por vuestro interés.

Bueno andresgarciadev, la verdad que lo he probado como dice NSD, añadiendo
BETWEEN, que permite la selección de un rango entre las dos fechas, pero la verdad es que si yo tengo ocupada esta fecha:

2014-03-04 - 2014-03-08
y quiero elegir esta:
2014-03-05 - 2014-03-10

me dice que está ocupado pero, en realidad del 09 al 10 no están ocupados. ¿te refieres a esto?. ¿Como contrasto esos dos días para imprimir un aviso que diga: sólo dispones de esos dos días.

Este es el script de la práctica para que lo veamos más claro:

http://www.dikindavi.byethost3.com/p...r/insertar.php

Un saludo
  #8 (permalink)  
Antiguo 05/03/2014, 12:33
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Impedir datos duplicados entre dos fechas

En efecto, tienes razon se me paso por alto esa posibilidad. saludos
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 05/03/2014, 13:57
Avatar de andresgarciadev  
Fecha de Ingreso: junio-2013
Mensajes: 218
Antigüedad: 10 años, 10 meses
Puntos: 32
Respuesta: Impedir datos duplicados entre dos fechas

no, me referia a q antes solo validaria que el rango de fecha en el sistema no se encuentre entre las fechas ingresadas.... pero faltaba validad que el rango de fechas ingresadas tampoco se encuentre dentro de las fechas del sistema... con el codigo que puse deberia funcionar e.e

Etiquetas: duplicados, fecha, impedir, mysql, registro, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:26.