Foros del Web » Programando para Internet » PHP »

Form a mysql evitando duplicados DATE

Estas en el tema de Form a mysql evitando duplicados DATE en el foro de PHP en Foros del Web. Buenas. Bueno, tengo un problema que no consigo resolver. He creado una tabla que cuenta con una serie de campos, entre ellos 2 que son ...
  #1 (permalink)  
Antiguo 23/06/2012, 10:50
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 11 años, 10 meses
Puntos: 11
Form a mysql evitando duplicados DATE

Buenas.

Bueno, tengo un problema que no consigo resolver. He creado una tabla que cuenta con una serie de campos, entre ellos 2 que son los que me interesan aquí.

"fechaEntrada" y "fechaSalida".

Que controlan el dia que un cliente ocupa y sale de una habitación.

Mediante un formulario ingreso las reservas a la tabla de reservas, he ido restringiendo el formulario para evitar duplicados de reservas, como evitar que se duplique un cliente por medio de su DNI, email etc... Como hice en otros formularios de otras tablas. Pero no consigo evitarlo en lo que respecta a las fechas para esta tabla, al tener que restringir un rango de tiempo y no un dato.

Se supone que si un cliente entra el 2012-06-01 y sale el 2012-06-10 no tendria que poder ingresar otra reserva que entre total o parcialmente dentro de ese rango de fechas. Pero no soy capaz de hacerlo.

Os pongo como estoy metiendo los datos en la tabla de forma resumida exclullendo el resto de campos que no hacen falta para esto.

(los datos llegan desde un form que no creo que tenga que poner, pero si es necesario avisen y lo pongo tambien).

Código:
<?php
$conexion = mysql_connect("localhost","root","");
$seleccionar_bd = mysql_select_db("eltopo", $conexion);

$fechaEntrada = $_POST['fechaEntrada'];
$fechaSalida = $_POST['fechaSalida'];

$insertarFechas = mysql_query("INSERT INTO `reservas` (`fechaEntrada`, `fechaSalida`) VALUES ('{$fechaEntrada}', '{$fechaSalida}')", $conexion);

mysql_close($conexion);
?>
Llevo ya varios dias dandole vueltas, pero no encuentro una forma de hacerlo.

A ver si alguien encuentra una forma de hacerlo
  #2 (permalink)  
Antiguo 23/06/2012, 17:27
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 11 años, 10 meses
Puntos: 11
Respuesta: Form a mysql evitando duplicados DATE

Bueno al final lo resolví, espero que la solucion que he encontrado le sirva a alguien, por que he pasado dias y dias buscando en internet y no he encontrado nada al respecto de como evitar clones en rangos de fechas... Si alguien tiene una solución mas elegante o sencilla soy todo orejas .

Tras muchisimos intentos y grandes cantidades de sustancias iluminadoras (vease cantidades industriales de cafe )

Código:
//EVITAR CLONES EN RANGOS DE FECHAS
$ent = strtotime(date("Y-m-d", strtotime($fechaEntrada)) . " +1 day");
$sal = strtotime(date("Y-m-d", strtotime($fechaSalida)) . " -1 day");

$entrada = date("Y-m-d", $ent);
$salida = date("Y-m-d", $sal);

$chek_fecha = mysql_query("
	(SELECT count(fechaEntrada) AS NumFechaEnt FROM `reservas` WHERE fechaEntrada BETWEEN '".$entrada."' AND '".$salida."') 
	 UNION ALL 
	(SELECT count(fechaSalida) AS NumFechaSal FROM `reservas` WHERE fechaSalida BETWEEN '".$entrada."' AND '".$salida."')
",$conexion);

while($row = mysql_fetch_array($chek_fecha)) {

  if ($row["NumFechaEnt"] != 0) {
    die('Ya hay una fecha introducida para ese rango de fechas');
  }

}

// Continuar con la insercion de datos
Para los que se pregunten por que he añadido un dia de la fecha de entrada y restado otro de la fecha de salida:
Resulta que aunque un cliente salga un dia determinado, otro puede ocupar su habitacion ese mismo dia, por lo que el dia de salida de una fecha, la habitacion se considera libre... Es un caso muy particular, pero bueno :P

Edito: hay un caso en el que esto no funciona... Si se inserta una reserva justo en medio de otra que la contenga totalmente... Es un fallo grave, así que si alguien sabe como resolverlo... A mi me afecta poco ya que es casi imposible que con los rangos de ocupacion maximos y minimos que tengo una reserva termine dentro de otra totalmente... Pero para otros usos si que puede ser un problema.

Última edición por noruas; 24/06/2012 a las 10:36

Etiquetas: date, duplicados, evitando, formulario, mysql, tabla
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 10:30.