Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Sistema reservas

Estas en el tema de Sistema reservas en el foro de PHP en Foros del Web. Buenas, necesito ayuda de una mente privilegia, me estoy volviendo loco para encontrar la buena combinación de sentencias a la hora de reservar. Pretendo hacer ...
  #1 (permalink)  
Antiguo 28/10/2014, 05:50
 
Fecha de Ingreso: agosto-2013
Mensajes: 28
Antigüedad: 10 años, 8 meses
Puntos: 0
Sistema reservas

Buenas, necesito ayuda de una mente privilegia, me estoy volviendo loco para encontrar la buena combinación de sentencias a la hora de reservar.

Pretendo hacer un sistema de reservas donde seleccionando fecha de inicio y fecha fin me consulte todas las reservas hechas hasta el momento y interprete si es posible reservar.

tablas

MOTOS [matricula]
RES [moto] [fecha_inicio] [fecha_fin] [persona]

Código PHP:
<?php
$reserva_inicio 
$_POST['inicio'];   
$reserva_fin $_POST['fin'];  

if (
$reserva_inicio $reserva_fin 
{
  
//si las fechas son correctas coge todas las reservas
  
$reservas mysql_query("SELECT * FROM res");
    if(
$row mysql_fetch_array($reservas))
    {
      
//HAY RESERVAS, VAMOS A COMPROBARLAS TODAS
      
echo "hay reservas";
                 
$matricula mysql_query("SELECT matricula FROM motos");
                
$reservas mysql_query("SELECT * FROM res");
                
$continue TRUE;
                while(
$row mysql_fetch_array($reservas) AND $continue TRUE){

                      
//Si fecha inicio y fecha fin son menos que la reserva, se reserva
                      
if ($reserva_inicio $row[1] AND $reserva_fin $row[1]){
                         
$query "INSERT INTO res (moto, inicio, fin, persona ) VALUES ('$row[0]','$reserva_inicio', '$reserva_fin', 'Joaquin' )";
                         if(
mysql_query($query)){
                          
$continue FALSE;
                           
?>
                         <script languaje="javascript">
                            alert("Reserva hecha !");
                            location.href = "administrar.php";
                           </script>
                          <?  
                         
}   
                      }
                      if (
$fecha_fin_anterior){

                            if (
$reserva_inicio $row[1] AND $reserva_fin $row[1] AND $reserva_inicio $fecha_fin_anterior){
                                           
$query "INSERT INTO res (moto, inicio, fin, persona ) VALUES ('$row[0]','$reserva_inicio', '$reserva_fin', 'Joaquin' )";
                                           if(
mysql_query($query)){
                                                  
$continue FALSE;
                                                   
?>
                                                 <script languaje="javascript">
                                                    alert("Reserva hecha !");
                                                    location.href = "administrar.php";
                                                   </script>
                                                  <?  
                                           
}   
                                  }


                      }

                      
$fecha_fin_anterior $row[2];
                } 


    }else
//NO HAY NINGUNA RESERVA, GUARDAMOS SIN PROBLEMAS
    
{
      
$matricula mysql_query("SELECT matricula FROM motos");
        if(
$row mysql_fetch_array($matricula)){
          
//si hay motos metemos la reserva
 

           
$query "INSERT INTO res (moto, inicio, fin, persona ) VALUES ('$row[0]','$reserva_inicio', '$reserva_fin', 'Joaquin' )";
           
mysql_query($query);
           
?>
             <script languaje="javascript">
                alert("Reserva hecha !");
                location.href = "administrar.php";
               </script>
              <?  
        
}else{
            
?>
             <script languaje="javascript">
                alert("No hay motos !!");
                location.href = "administrar.php";
               </script>
              <?  

        
}
    }




}else
{
    
?>
     <script languaje="javascript">
        alert("Fechas incorrectas!");
        location.href = "administrar.php";
       </script>
      <?   
?>
}
El problema es que si no hay reservas lo mete bien, pero luego me repite reservas.

De momento estoy simulando que solo hay una moto, luego lo ampliaré a X motos.
  #2 (permalink)  
Antiguo 28/10/2014, 06:54
Avatar de andres_15_  
Fecha de Ingreso: septiembre-2008
Ubicación: Cali
Mensajes: 232
Antigüedad: 15 años, 7 meses
Puntos: 7
Respuesta: Sistema reservas

Trabajo en una empresa donde en el momento estoy desarrollando un software para una empresa de calzado, el problema creo que lo puedes solucionar con una columna estado, es decir que a la hora de te lo alquilen lo cambias a estado A (alquilado, o tu veras el nombre que le colocas).

yo haria eso, exitos con tu proyecto.
  #3 (permalink)  
Antiguo 28/10/2014, 07:05
 
Fecha de Ingreso: septiembre-2011
Mensajes: 176
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sistema reservas

La idea esta en saber cuantas motos tienes para alquilar, una vez hecho esto haces una consulta para consultar la dispinibilidad en un rango de fechas. Si tienes 15 motos y en ese rango de fechas encuentras 15 reservas. No podrás hacer la reserva por que no tienes motos ya que las 15 estaran reservadas.

Código SQL:
Ver original
  1. SELECT dia_entrada, dia_salida FROM disponibilidad
  2.         WHERE     (dia_entrada BETWEEN '$dia_entrada' AND '$dia_salida')
  3.                          OR (dia_salida BETWEEN '$dia_entrada' AND '$dia_salida')
  4.                          OR (dia_entrada <= '$dia_entrada'  AND dia_salida >= '$dia_salida')
  #4 (permalink)  
Antiguo 28/10/2014, 07:09
 
Fecha de Ingreso: agosto-2013
Mensajes: 28
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Sistema reservas

pero una moto no esta NO DISPONIBLE si tiene una reserva, porque la reserva puede ser de la primera semana de noviembre, y seguiría estando DISPONIBLE para el resto de días.
  #5 (permalink)  
Antiguo 28/10/2014, 07:27
 
Fecha de Ingreso: septiembre-2011
Mensajes: 176
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sistema reservas

No entiendo que problema tienes, no tendrias disponibilidad de esa moto solo la primera semana.
  #6 (permalink)  
Antiguo 28/10/2014, 07:34
 
Fecha de Ingreso: agosto-2013
Mensajes: 28
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Sistema reservas

Cita:
pero una moto no esta NO DISPONIBLE si tiene una reserva, porque la reserva puede ser de la primera semana de noviembre, y seguiría estando DISPONIBLE para el resto de días.
No logro generar la sentencia correctas de IF a la hora de consultar que la fecha este libre.
  #7 (permalink)  
Antiguo 28/10/2014, 07:43
 
Fecha de Ingreso: septiembre-2011
Mensajes: 176
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sistema reservas

El usuarios busca un determinado rango de fechas y la consulta te mostrara cuantas reservas hay en ese rango. Si en ese rango tienes 5 reservas, compara el número de reservas por el número de motos. Tienes que usar BETWEEN, http://www.1keydata.com/es/sql/sql-between.php, para buscar en un rango de fechas.

Última edición por luisalberti; 28/10/2014 a las 07:50
  #8 (permalink)  
Antiguo 28/10/2014, 08:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Sistema reservas

Por ahí tienes que tener en cuenta un detalle mas o menos conceptual:
La base de datos puede informarte los períodos o las fechas donde un dato existe, por lo que puede darte las fechas o rangos de fechas para las que hay reservas. Eso si.
Pero la base de datos no puede darte los días para los que no existan reservas, porque el SQL solo trabaja con los datos reales, existentes, y los datos que no están en la tabla... no existen para la base.
Esto quiere decir que si tienes reservas para 5 días de una semana, la base puede decirte desde cuando hasta cuando, pero tu deberás realizar la programación que permita sobre esa información determinar qué otros días de esa semana están disponibles. La base per se no puede.
¿Se entiende la idea?
En otras palabras, en PHP verificas cuáles son los días disponibles, procesando lo obtenido en la consulta. Eventualmente deberás recorrer un array de días para descartar los tomados, y los que queden serán los disponibles. Eso en PHP no es difícil, pero en SQL...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 28/10/2014, 09:35
 
Fecha de Ingreso: agosto-2013
Mensajes: 28
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Sistema reservas

ACTUALIZO ya me comprueba las fechas pero solo para una moto, no me pasa a la siguiente moto si las fechas están reservadas para la primera.

while ($array = mysql_fetch_array($motos) AND $sigue == TRUE) {

Este sería wl while que no me esta haciendo, solo coge la primera moto del array $array .


Código PHP:
<?php
ob_start
();
session_start();  
require 
'configuracion.htpasswd';
$reserva_inicio $_POST['inicio'];   
$reserva_fin $_POST['fin'];  

if (
$reserva_inicio <= $reserva_fin 
{

  
$motos mysql_query("SELECT * FROM motos");
  
$sigue TRUE;
  while (
$array mysql_fetch_array($motos) AND $sigue == TRUE) {
      
      echo 
$array[0];
  

     
//si las fechas son correctas coge todas las reservas
  
$reservas mysql_query("SELECT * FROM res WHERE moto ='$array[0]' ");
    if(
$row mysql_fetch_array($reservas))
    {
      
//HAY RESERVAS, VAMOS A COMPROBARLAS TODAS

                
$reservas mysql_query("SELECT * FROM res WHERE moto ='$array[0]' ORDER BY inicio");
                
$continue TRUE;
                while(
$row mysql_fetch_array($reservas) AND $continue == TRUE){

                      
//Si fecha inicio y fecha fin son menos que la primera reserva, se reserva
                      
if ($reserva_inicio $row[1] AND $reserva_fin $row[1]){
                         
$query "INSERT INTO res (moto, inicio, fin, persona ) VALUES ('$array[0]','$reserva_inicio', '$reserva_fin', 'Joaquin' )";
                         
mysql_query($query);
                          
$continue FALSE;
                          
$sigue FALSE;
                           
?>
                         <script languaje="javascript">
                            alert("Reserva hecha !");
                            location.href = "administrar.php";
                           </script>
                          <?  
                            
                      
}else if($reserva_inicio $row[2]){

                           
$continue TRUE;

                      }else{
                        
$continue FALSE;
                      }

                } 

                 
$cuenta mysql_query("SELECT * FROM res ORDER BY inicio");

              while(
$row3 mysql_fetch_array($cuenta)){
                
$ultima_fecha $row3[2];
              }

              if (
$reserva_inicio $ultima_fecha){
                
$query "INSERT INTO res (moto, inicio, fin, persona ) VALUES ('$array[0]','$reserva_inicio', '$reserva_fin', 'Joaquin' )";
                         
mysql_query($query);
                         
$sigue FALSE;
                             
?>
                         <script languaje="javascript">
                            alert("Reserva hecha !");
                            location.href = "administrar.php";
                           </script>
                          <?  
              
}
                    
?>
                         <script languaje="javascript">
                            location.href = "administrar.php";
                           </script>
                          <?  
    
}else//NO HAY NINGUNA RESERVA, GUARDAMOS SIN PROBLEMAS
    
{
      
$matricula mysql_query("SELECT matricula FROM motos");
        if(
$row mysql_fetch_array($matricula)){
          
//si hay motos metemos la reserva
 

           
$query "INSERT INTO res (moto, inicio, fin, persona ) VALUES ('$array[0]','$reserva_inicio', '$reserva_fin', 'Joaquin' )";
           
mysql_query($query);
           
$sigue FALSE;
           
?>
             <script languaje="javascript">
                alert("Reserva hecha !");
                location.href = "administrar.php";
               </script>
              <?  
        
}else{
            
?>
             <script languaje="javascript">
                alert("No hay motos !!");
                location.href = "administrar.php";
               </script>
              <?  

        
}
    }



    }




}else
{
    
?>
     <script languaje="javascript">
        alert("Fechas incorrectas!");
        location.href = "administrar.php";
       </script>
      <?   

}


mysql_close();
?>
  #10 (permalink)  
Antiguo 28/10/2014, 10:13
 
Fecha de Ingreso: septiembre-2011
Mensajes: 176
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Sistema reservas

Hola solo estas mostrando la primera clave del array $array[0] por eso solo te sale una moto. Pero a lo que yo voy es o no te entiendo mucho lo que quieres hacer.

Por lo que entiendo "si la fecha fin y la fecha inicio son inferiores a la fecha inicio pues se puese reservar.

Entonces si yo tengo una reserva que es para mañana 28/10/2014, fecha inicio, solo podre reservar en fechas anteriores osea en el pasado 27/10/2014 .

Tna igual me lie yo pero lo veo mas facil como te comente, que opinas gnzsoloyo.
  #11 (permalink)  
Antiguo 29/10/2014, 03:45
 
Fecha de Ingreso: agosto-2013
Mensajes: 28
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Sistema reservas

Nada como dormir descansar y volver al lío, ya he conseguido solucionar los problemas y esta funcionando perfectamente. Gracias a tod@s

Etiquetas: fecha, mysql, reservas, select, sistema, sql, 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 05:23.