Foros del Web » Programando para Internet » PHP »

validaciones en sistema reservas

Estas en el tema de validaciones en sistema reservas en el foro de PHP en Foros del Web. Hola a todos/as. estoy atascada. os cuento. tengo una pequeña aplicación de sistemas de reservas. la base de datos del sistema entre otras muchas tablas ...
  #1 (permalink)  
Antiguo 02/03/2009, 07:00
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Hola a todos/as. estoy atascada. os cuento. tengo una pequeña aplicación de sistemas de reservas. la base de datos del sistema entre otras muchas tablas tiene dos que son básicas para este sistema:

tabla 'habitaciones'
para simplificar diremos que tiene estos 3 campos:
idhabitacion----autonumerico
habitacion------tipo de habitacion (individual, doble, etc...)
cantidad--------número de habitaciones que hay de cada tipo

tabla 'reservas'
para simplificar diremos que tiene estos campos:
idreserva-------autonumerico
dia---------------recoge el día de la reserva (ahora explico su funcionamiento)
codigoreserva-codigo exclusivo que se genera automáticamente para cada reserva
habitacionid---habitacion a reservar (es el idhabitacion anterior. identifica al tipo de habitacion)
cantidad-------número de habitaciones de ese tipo a reservar

El sistema genera un código de reserva automático que va al campo codigoreserva y que es exclusivo para cada reserva. así tenemos que si una reserva tiene estos datos:

Fecha de entrada: 02-03-2009
Fecha de salida: 04-03-2009
Habitación: Individual
Número de habitaciones (o cantidad de habitaciones de ese tipo a reservar): 2

en la base de datos, en la tabla 'reservas' tendremos:

idreserva-1
día-02-03-2009
codigo reserva-5698632(generado automáticamente)
habitacionid-1
cantidad-1

idreserva-2
día-03-03-2009
codigo reserva-5698632(generado automáticamente)
habitacionid-1
cantidad-1

el día 04-03-2009 ya no generaría un nuevo campo porque el sistema desprecia el último día de la reserva al considerar que ese día es cuando se van y queda vacante.

bien. supongamos este ejemplo en cuestión. supongamos que de la habitación individual hay 2 habitaciones. la tabla 'habitaciones' tendría:
idhabitacion-1
tipo-Individual
cantidad-2

esta reserva motivaría que en esa misma fecha yo podría hacer otra reserva por otra habitación más en ese tipo de habitación, en la Individual, ya que hay 2 habitaciones de este tipo en el sistema. cómo valido yo todo esto? pues digo lo siguiente:

Código PHP:
$fechaen $_POST['fechaen'];
$fechasal $_POST['fechasal'];    
$habitacion $_POST['habitacion'];
$cantidad trim($_POST['cantidad']);

//consulta a la tabla habitaciones
$sql "SELECT * FROM habitaciones where idhabitacion='$habitacion'"
$result mysql_query($sql) or die (mysql_error()); 
$datos mysql_fetch_assoc($result);  


//consulta a la tabla reservas
$sqlrestot "SELECT COUNT(cantidad) AS totalreservas FROM reserva WHERE habitacionid='$habitacion' GROUP BY codigoreserva"
$resultrestot mysql_query($sqlrestot) or die (mysql_error()); 
$datosrestot mysql_fetch_assoc($resultrestot); 
ya tengo las consultas realizadas. ahora comienzo con las validaciones:

Código PHP:
$reservastotal $datosrestot ['totalreservas'];
$reservaslibresfec $datos ['cantidad'] - $reservastotal;

//Primera validación: Que haya habitaciones disponibles de ese tipo
//Si la variable $reservaslibresfec es cero es porque no tenemos disponibilidad
if ($reservaslibresfec==0){
echo 
"Todas las habitaciones tipo $datos[tipo] están ocupadas";



//Segunda validación: que la cantidad que quiero reservar exista, es decir,
//supongamos que yo quiero reservar 5 individuales pero si en todo el sistema
//el número de individuales es 2 me debe dar un mensaje diciendo que sólamente
//hay 2 habitaciones de tipo individual en el sistema

elseif ($cantidad $datos ['cantidad']) {
echo 
"Sólamente tenemos $datos[cantidad] habitaciones de ese tipo";


//Tercera validación: que en esas mismas fechas (una reserva tiene para todos
//sus días el mismo código de reserva) haya alguna disponibilidad. Por ejemplo
//de un mensaje diciendo que en esas fechas sólo hay disponible una habitación
//de ese tipo:

elseif ($cantidad <= $datos ['cantidad'] && $reservaslibresfec<>0) {
echo 
"En esas fechas tenemos disponibles $reservaslibresfec habitaciones de ese tipo"
ea. pues algo falla porque no va correctamente. alguna ayuda o idea¿? gracias a todos/as...

alguna idea? necesito ayuda.....:cor azon:

estoy desesperada....
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen

Última edición por GatorV; 03/03/2009 a las 11:05
  #2 (permalink)  
Antiguo 03/03/2009, 03:21
 
Fecha de Ingreso: enero-2008
Mensajes: 52
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: validaciones en sistema reservas

Intenta ser un pelin mas especifica.

Printa las sql para ver si se están ejecutando con los valores que esperas.

haz print_r de los resultados de de los fetch para ver que valores tienen las variables, a partir de ahi intenta identificar que valores no son los que deberian ser y encontrarás cual es el problema.
  #3 (permalink)  
Antiguo 03/03/2009, 06:47
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validaciones en sistema reservas

bueno. vamos a ir desmenuzando el tema. a ver. supongamos este ejemplo:

tabla 'habitacion':
idhabitacion-1
tipo-Individual
cantidad-2

tabla 'reservas':
tiene dos registros pero son de una única reserva que va desde el 02 hasta el 04 de marzo de 2009
idreserva-1
día-02-03-2009
codigo reserva-5698632(generado automáticamente)
habitacionid-1
cantidad-1

idreserva-2
día-03-03-2009
codigo reserva-5698632(generado automáticamente)
habitacionid-1
cantidad-1

partimos de estos datos. ahora tenemos estos otros:

con las dos consultas que tenemos a las tablas tendríamos:

$datos[cantidad] -- número total de habitaciones de ese tipo. en este caso tipo Individual, número total de habitaciones: 2

$reservastotal = $datosrestot ['totalreservas'];
$reservastotal es el número total de reservas realizado de una habitación tipo en cuestión.

yo hago ahora esta consulta:

$sqlrestot = "SELECT COUNT(codigoreserva) AS totalreservas FROM reservas group by codigoreserva";
$resultrestot = mysql_query($sqlrestot) or die (mysql_error());
$datosrestot = mysql_fetch_assoc($resultrestot);

que pretendo? pues lo que pretendo es conseguir el número de reservas que hay de una determinada habitación y para ello los agrupo por reservas diferentes realizadas, es decir, por código de reservas iguales realizados. en este caso debería ser 1, pues sólo tengo una reserva (que tiene un único código de reservas) y que tiene los días 02-03-09 y 03-03-09.
pues hay algún problema porque me dice que las reservas realizadas son 2, es decir, que cuenta cada registro de la tabla (aunque sean de la misma reserva pues tienen el mismo código de reserva) como una reserva diferente.

a qué es debido? es decir, no funciona bien el group by
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #4 (permalink)  
Antiguo 03/03/2009, 07:11
 
Fecha de Ingreso: enero-2008
Mensajes: 52
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: validaciones en sistema reservas

Código PHP:
SELECT codigoreservaCOUNT(*) AS totalreservas FROM reservas group by codigoreserva 
Prueba así
  #5 (permalink)  
Antiguo 03/03/2009, 07:17
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: validaciones en sistema reservas

bueno veo q quieres realizar un conteo solo por cada codigo de reserva q exista si existe 2 codigos iguales en la tabla de reserva el otro no me deberia contar para esto utiliza la sentencia

DISTINCT q es utilizada para contar o agrupar datos q no se repitan
Ejm: supongamos q sea tu tabla reserva
RES001 1
RES001 1
RES002 2
RES003 1
RES004 1
RES004 1

al aplicar una sentencia distinct sacamos solo los valores q no se repitan ejm:

Código PHP:
select distinct code from reservas 
me devolveria
RES001,RES002,RES003 y RES004

para tu caso deberia ser parecido a esto

Código PHP:
select count(distinct codefrom reservas group by code
la cual deberia dar
1
,1,1,1  de cada uno 

Nota:

si le pones al reves el distinct te contaria igual y no haria una distincion de datos
ejm:
select distinct count(code) from reservas group by code aqui te contaria todos los datos
por cada registro q exista me explico

si tengo 5 codigos con 54784 entonces me devolveria 5 ya q estoy contando todos los codigos q tenga dicho numero por lo tanto me devolveria 5 al hacerle el group by

entonces debes aplicar lo q te he mostrado como arriba

select count(distinct code) from reservas group by code
  #6 (permalink)  
Antiguo 03/03/2009, 07:42
 
Fecha de Ingreso: enero-2008
Mensajes: 52
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: validaciones en sistema reservas

Si tienes el codigo no te hace falta hacer ningun group
Código PHP:
$sqlrestot "SELECT COUNT(*) AS totalreservas FROM reserva WHERE habitacionid='$habitacion'"
  #7 (permalink)  
Antiguo 04/03/2009, 00:56
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
gracias a todos. usando distinct ha sido la solución. el caso es que ya la había probado pero nada.....algo haría mal....gracias a todos....besitos....

perdón....creo que me he precipitado....

buenas de nuevo...a ver....pensaba que con el distinct se había solucionado pero he comprobado que no en parte porque no es del todo lo que busco. me explico:

supongamos el caso anterior que nos planteaba Dradi7:

tenemos esta tabla de reservas:
CodigoReserva Tipo Cantidad
RES001 1 1
RES001 1 1
RES002 1 2
RES003 1 1
RES004 1 1
RES004 1 1

donde la primera parte es el código de la reserva, tipo es el tipo de habitación de acuerdo con la tabla habitaciones y la segunda la cantidad de habitación de ese tipo reservada. De acuerdo con esa tabla yo lo que quiero evidentemente es dar respuesta a la pregunta ¿cuantas habitaciones hay reservadas de ese tipo? pues en este caso tendríamos:
La Reserva con código RES001 habría reservado 1 habitación tipo 1 durante dos días (cada registro corresponde a un día)
La Reserva con código RES002 habría reservado 2 habitación tipo 1 durante un día
La Reserva con código RES003 habría reservado 1 habitación tipo 1 durante un día
La Reserva con código RES004 habría reservado 1 habitación tipo 1 durante dos días

Con lo cual, si queremos saber cuantas habitaciones hay reservadas de ese tipo (lo que quiero es saber la cantidad total para ver si hay disponibilidades) tendría:

1 + 2 + 1 + 1 = 5
Es decir, no debería ser 1, 1, 1, 1 que lo que hace es indicarme el número de reservas que hay. Lo que hay que saber es cuantas habitaciones hay reservadas para después, comparando con la tabla habitaciones donde se especifica el número que hay de cada tipo y ver si existen habitaciones disponibles
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen

Última edición por GatorV; 06/03/2009 a las 08:53
  #8 (permalink)  
Antiguo 04/03/2009, 08:09
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: validaciones en sistema reservas

Bueno parece q no me has entendido en parte el ejemplo q te di es para q pudieras utilizar el distinct en cualquier campo solo era un ejemplo q explicaba la utilizacion del distinct entonces para poder sacar el numero de habitaciones reservadas seria de la siguiente manera pero para ese caso podrias usar distinct o group by mira este ejemplo

Código PHP:
SELECT COD,CANT FROM PRUEBA GROUP BY COD,CANT 
Agrupando principalmente por codigo ya q es el q toma el valor y luego la cantidad asi dando los siguientes resultados

RES001 1 1
RES002 1 2
RES003 1 1
RES004 1 1
  #9 (permalink)  
Antiguo 06/03/2009, 06:55
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validaciones en sistema reservas

uff....sigo igual. vamos a ver....

tengo en la tabla 'habitaciones' que me dice el tipo y el número de habitaciones que hay de cada tipo lo siguiente:

idhabitacion----1---autonumerico
tipo-----Individual--clase de habitación
cantidad------2------número de habitaciones que hay del tipo Individual

ahora en la tabla 'reservas' tengo:

idreserva----1---autonumerico
codigoreserva---123456--código único para cada reserva
tipo----------------1---------indica de acuerdo con la tabla anterior que es Individual
cantidad----------1------nº habitaciones reservadas de ese tipo con esa reserva
dia---------------03-03-2009---dia uno de la reserva

idreserva----2---autonumerico
codigoreserva---123456--código único para cada reserva (el mismo que antes
porque es la misma reserva
tipo----------------1---------indica de acuerdo con la tabla anterior que es Individual
cantidad----------1------nº habitaciones reservadas de ese tipo con esa reserva
dia---------------04-03-2009---dia uno de la reserva

idreserva----3---autonumerico
codigoreserva---654321--código único para cada reserva
tipo----------------1---------indica de acuerdo con la tabla anterior que es Individual
cantidad----------1------nº habitaciones reservadas de ese tipo con esa reserva
dia---------------03-03-2009---dia uno de la reserva

es decir, en la tabla 'reservas' hay dos reservas, una la de codigo 123456 y la otra 654321. la primera tiene dos días, del 03-03 al 04-03 y la segunda del 03-03.

yo ahora quiero sacar una consulta que me diga cuantas habitaciones de ese tipo Individual me quedan libres en esa fecha. Si tengo en cuenta que en el sistema (tabla 'habitaciones') hay 2 unidades de la habitacion tipo individual, evidentemente en estas fechas no habrá ninguna disponible porque tengo reservadas las dos que existen. si hago un count no me lo coge. si hago un select, tampoco....es decir, cómo hago, qué consulta para que ahora mismo me cuente que hay las dos habitaciones, es decir, que no hay disponibles. y si cambio la última reserva y le pongo de día 05-03 por ejemplo, pues que me diga que queda 1 habitación libre en esas fechas del 3 al 4. evidentemente deben venir agrupadas por código de reserva porque si no el dato no es real....
por favor echadme una mano me voy a volver loca.....
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #10 (permalink)  
Antiguo 06/03/2009, 12:01
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: validaciones en sistema reservas

Bueno por lo q he comprendido tu deseas saber cuantas habitaciones quedan disponibles para un determinado dia para hoy para mañana etc pero no necesariamente debes agruparlo por el codigo de reserva ya q lo q mas importa es saber si existen habitaciones disponibles para una determinada fecha
para esto debes realizar la siguiente consulta:

Código PHP:
SELECT R.DIA,(H.CANTIDAD COUNT(R.CANTIDAD)) AS [HABDISPONIBLESFROM RESERVAS R 
    INNER JOIN HABITACION H ON
(R.TIPO H.IDHABITACION)
    
WHERE H.TIPO='INDIVIDUAL' AND R.DIA CURDATE() // VERIFICANDO HAB DISPONIBLES PARA LA FECHA DE HOY CLARAMENTE TU LO PUEDES CAMBIAR POR OTRA FECHA Q TU QUIERAS
    
GROUP BY R.CANTIDAD,R.DIA,H.CANTIDAD
GO 
Bueno esta consulta te deberia devolver para el caso del dia 03-03-2009

fecha hab disponibles
---------------------------------------
03-03-2009 0

para el otro caso en caso q tu le cambies por 05-03-2009 y q verifices la fecha de hoy

fecha hab disponibles
---------------------------------------
03-03-2009 1
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #11 (permalink)  
Antiguo 06/03/2009, 13:02
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: validaciones en sistema reservas

gracias Dradi7 voy a estudiar lo que me dices....estoy desesperadisima....
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #12 (permalink)  
Antiguo 06/03/2009, 13:19
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Respuesta: validaciones en sistema reservas

hay un problema con esto
Código PHP:
$reservaslibresfec<>0
//para preguntar si es diferente es así
$reservaslibresfec != 
saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
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 07:16.